mirror of https://github.com/KLayout/klayout.git
Bugfix: progress response time was long sometimes
Reason: the timer involved measured CPU time. So if the process wasn't CPU intensive (i.e. waiting for network response), cancelling the operation wasn't possible.
This commit is contained in:
parent
2454104346
commit
90c5ff4b12
|
|
@ -32,7 +32,6 @@
|
|||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#ifndef _MSC_VER // not available on MS VC++
|
||||
# include <unistd.h>
|
||||
|
|
@ -67,7 +66,7 @@ void
|
|||
Timer::start ()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
long clks_ms = (long) ((double) clock () * (1000.0 / CLOCKS_PER_SEC) + 0.5);
|
||||
timer_t clks_ms = (timer_t) ((double) clock () * (1000.0 / CLOCKS_PER_SEC) + 0.5);
|
||||
m_user_ms += clks_ms;
|
||||
// no system time available ..
|
||||
#else
|
||||
|
|
@ -75,8 +74,8 @@ Timer::start ()
|
|||
times (&clks);
|
||||
const double clk2msec = 1000.0 / sysconf (_SC_CLK_TCK);
|
||||
|
||||
m_user_ms += (long) ((clks.tms_utime + clks.tms_cutime) * clk2msec + 0.5);
|
||||
m_sys_ms += (long) ((clks.tms_stime + clks.tms_cstime) * clk2msec + 0.5);
|
||||
m_user_ms += (timer_t) ((clks.tms_utime + clks.tms_cutime) * clk2msec + 0.5);
|
||||
m_sys_ms += (timer_t) ((clks.tms_stime + clks.tms_cstime) * clk2msec + 0.5);
|
||||
#endif
|
||||
m_wall_ms += msecs_to (QDateTime::fromTime_t (0), QDateTime::currentDateTime ());
|
||||
}
|
||||
|
|
@ -97,6 +96,27 @@ Timer::stop ()
|
|||
m_wall_ms = 0;
|
||||
}
|
||||
|
||||
void
|
||||
Timer::take ()
|
||||
{
|
||||
timer_t user_ms = m_user_ms;
|
||||
timer_t sys_ms = m_sys_ms;
|
||||
timer_t wall_ms = m_wall_ms;
|
||||
|
||||
m_user_ms = -m_user_ms;
|
||||
m_sys_ms = -m_sys_ms;
|
||||
m_wall_ms = -m_wall_ms;
|
||||
start ();
|
||||
|
||||
m_user_ms_res = m_user_ms;
|
||||
m_sys_ms_res = m_sys_ms;
|
||||
m_wall_ms_res = m_wall_ms;
|
||||
|
||||
m_user_ms = user_ms;
|
||||
m_sys_ms = sys_ms;
|
||||
m_wall_ms = wall_ms;
|
||||
}
|
||||
|
||||
void
|
||||
SelfTimer::report () const
|
||||
{
|
||||
|
|
@ -168,20 +188,20 @@ SelfTimer::report () const
|
|||
|
||||
Clock::Clock (double s)
|
||||
{
|
||||
m_clock = clock_value (s * double (CLOCKS_PER_SEC));
|
||||
m_clock_ms = s * 1000.0;
|
||||
}
|
||||
|
||||
double
|
||||
Clock::seconds () const
|
||||
{
|
||||
return double (m_clock) / double (CLOCKS_PER_SEC);
|
||||
return double (m_clock_ms) * 0.001;
|
||||
}
|
||||
|
||||
Clock
|
||||
Clock::current ()
|
||||
{
|
||||
Clock c;
|
||||
c.m_clock = clock ();
|
||||
c.m_clock_ms += msecs_to (QDateTime::fromTime_t (0), QDateTime::currentDateTime ());
|
||||
return c;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include "tlCommon.h"
|
||||
|
||||
#include <string>
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
|
||||
class QDateTime;
|
||||
|
|
@ -50,6 +50,8 @@ TL_PUBLIC int64_t msecs_to (const QDateTime &from, const QDateTime &to);
|
|||
class TL_PUBLIC Timer
|
||||
{
|
||||
public:
|
||||
typedef int64_t timer_t;
|
||||
|
||||
Timer ();
|
||||
|
||||
/**
|
||||
|
|
@ -59,10 +61,16 @@ public:
|
|||
|
||||
/**
|
||||
* @brief Stops the timer
|
||||
* Only after stop or take, the time can be read with sec_user etc.
|
||||
*/
|
||||
void stop ();
|
||||
|
||||
/**
|
||||
/**
|
||||
* @brief Takes the time, but does not stop
|
||||
*/
|
||||
void take ();
|
||||
|
||||
/**
|
||||
* @brief Reports the time spent between start() and stop() in user space
|
||||
*/
|
||||
double sec_user () const
|
||||
|
|
@ -87,8 +95,8 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
long m_user_ms, m_sys_ms, m_wall_ms;
|
||||
long m_user_ms_res, m_sys_ms_res, m_wall_ms_res;
|
||||
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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -152,12 +160,14 @@ private:
|
|||
class TL_PUBLIC Clock
|
||||
{
|
||||
public:
|
||||
typedef int64_t timer_t;
|
||||
|
||||
typedef unsigned long clock_value;
|
||||
|
||||
/**
|
||||
* @brief Default constructor: construct a clock object pointing to an arbitrary value
|
||||
*/
|
||||
Clock () : m_clock (0)
|
||||
Clock () : m_clock_ms (0)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
|
@ -171,7 +181,7 @@ public:
|
|||
* @brief Copy constructor
|
||||
*/
|
||||
Clock (const Clock &d)
|
||||
: m_clock (d.m_clock)
|
||||
: m_clock_ms (d.m_clock_ms)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
|
@ -181,7 +191,7 @@ public:
|
|||
*/
|
||||
Clock &operator= (Clock d)
|
||||
{
|
||||
m_clock = d.m_clock;
|
||||
m_clock_ms = d.m_clock_ms;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
@ -190,7 +200,7 @@ public:
|
|||
*/
|
||||
bool operator== (Clock d) const
|
||||
{
|
||||
return m_clock == d.m_clock;
|
||||
return m_clock_ms == d.m_clock_ms;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -206,8 +216,7 @@ public:
|
|||
*/
|
||||
bool operator< (Clock d) const
|
||||
{
|
||||
// to account for wrap around, we do the comparison this way:
|
||||
return long (m_clock) - long (d.m_clock) < 0;
|
||||
return m_clock_ms < d.m_clock_ms;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -215,7 +224,7 @@ public:
|
|||
*/
|
||||
Clock &operator-= (Clock d)
|
||||
{
|
||||
m_clock -= d.m_clock;
|
||||
m_clock_ms -= d.m_clock_ms;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
@ -240,7 +249,7 @@ public:
|
|||
static Clock current ();
|
||||
|
||||
private:
|
||||
clock_value m_clock;
|
||||
timer_t m_clock_ms;
|
||||
};
|
||||
|
||||
} // namespace tl
|
||||
|
|
|
|||
Loading…
Reference in New Issue