mirror of
https://github.com/KLayout/klayout.git
synced 2026-08-22 05:57:41 +02:00
Added option to retrieve current memory footprint, implemented for Windows (to be tested)
This commit is contained in:
@@ -153,6 +153,11 @@ static std::string timer_to_s (const tl::Timer *timer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Class<tl::Timer> decl_Timer ("tl", "Timer",
|
Class<tl::Timer> decl_Timer ("tl", "Timer",
|
||||||
|
gsi::method ("memory_size", &tl::Timer::memory_size,
|
||||||
|
"@brief Gets the current memory usage of the process in Bytes\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.27."
|
||||||
|
) +
|
||||||
gsi::method ("user", &tl::Timer::sec_user,
|
gsi::method ("user", &tl::Timer::sec_user,
|
||||||
"@brief Returns the elapsed CPU time in user mode from start to stop in seconds\n"
|
"@brief Returns the elapsed CPU time in user mode from start to stop in seconds\n"
|
||||||
) +
|
) +
|
||||||
|
|||||||
+42
-13
@@ -186,17 +186,27 @@ Timer::take ()
|
|||||||
m_wall_ms = wall_ms;
|
m_wall_ms = wall_ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
size_t
|
||||||
SelfTimer::start_report () const
|
Timer::memory_size ()
|
||||||
{
|
|
||||||
tl::info << m_desc << ": " << tl::to_string (tr ("started"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SelfTimer::report () const
|
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
tl::info << m_desc << ": (user) " << sec_user () << " (sys) " << sec_sys ();
|
|
||||||
|
size_t mem = 0;
|
||||||
|
|
||||||
|
HANDLE h_process = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId ());
|
||||||
|
if (h_process != NULL) {
|
||||||
|
|
||||||
|
PROCESS_MEMORY_COUNTERS pmc;
|
||||||
|
if (GetProcessMemoryInfo (h_process, &pmc, sizeof (pmc))) {
|
||||||
|
mem = size_t (pmc.WorkingSetSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle (h_process);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return mem;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
unsigned long memsize = 0;
|
unsigned long memsize = 0;
|
||||||
@@ -250,12 +260,31 @@ SelfTimer::report () const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return size_t (memsize);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SelfTimer::start_report () const
|
||||||
|
{
|
||||||
|
tl::info << m_desc << ": " << tl::to_string (tr ("started"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SelfTimer::report () const
|
||||||
|
{
|
||||||
|
size_t memsize = memory_size ();
|
||||||
|
|
||||||
tl::info << m_desc << ": " << sec_user () << " (user) "
|
tl::info << m_desc << ": " << sec_user () << " (user) "
|
||||||
<< sec_sys () << " (sys) "
|
<< sec_sys () << " (sys) "
|
||||||
<< sec_wall () << " (wall) "
|
<< sec_wall () << " (wall)" << tl::noendl;
|
||||||
<< tl::sprintf ("%.2fM", double (memsize) / (1024.0 * 1024.0)) << " (mem)"
|
|
||||||
;
|
if (memsize > 0) {
|
||||||
#endif
|
tl::info << " " << tl::sprintf ("%.2fM", double (memsize) / (1024.0 * 1024.0)) << " (mem)";
|
||||||
|
} else {
|
||||||
|
tl::info << "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
|||||||
@@ -95,6 +95,11 @@ public:
|
|||||||
return (double (m_wall_ms_res) * 0.001);
|
return (double (m_wall_ms_res) * 0.001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reports the current memory usage
|
||||||
|
*/
|
||||||
|
static size_t memory_size ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
timer_t m_user_ms, m_sys_ms, m_wall_ms;
|
timer_t m_user_ms, m_sys_ms, m_wall_ms;
|
||||||
timer_t m_user_ms_res, m_sys_ms_res, m_wall_ms_res;
|
timer_t m_user_ms_res, m_sys_ms_res, m_wall_ms_res;
|
||||||
|
|||||||
Reference in New Issue
Block a user