Fix bug with wxStopWatch::Start() not resuming paused stopwatch any more.
Since r69835 the stop watch remained paused even when Start() was called. Do resume it when restarting it both for backwards compatibility and because it makes more sense and also document this behaviour. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69921 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
238188550e
commit
17d72a48ff
@ -61,6 +61,10 @@ public:
|
||||
|
||||
/**
|
||||
(Re)starts the stop watch with a given initial value.
|
||||
|
||||
The stopwatch will always be running after calling Start(), even if
|
||||
Pause() had been called before and even if it had been called multiple
|
||||
times.
|
||||
*/
|
||||
void Start(long milliseconds = 0);
|
||||
|
||||
|
@ -125,6 +125,10 @@ wxLongLong wxStopWatch::GetClockFreq() const
|
||||
|
||||
void wxStopWatch::Start(long t0)
|
||||
{
|
||||
// Calling Start() makes the stop watch run however many times it was
|
||||
// paused before.
|
||||
m_pauseCount = 0;
|
||||
|
||||
DoStart();
|
||||
|
||||
m_t0 -= (wxLongLong(t0)*GetClockFreq())/MILLISECONDS_PER_SECOND;
|
||||
|
@ -26,6 +26,14 @@
|
||||
#include "wx/stopwatch.h"
|
||||
#include "wx/utils.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
const long tolerance = 10; // in ms
|
||||
const int sleepTime = 500;
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// test class
|
||||
// --------------------------------------------------------------------------
|
||||
@ -39,10 +47,12 @@ private:
|
||||
CPPUNIT_TEST_SUITE( StopWatchTestCase );
|
||||
CPPUNIT_TEST( Misc );
|
||||
CPPUNIT_TEST( BackwardsClockBug );
|
||||
CPPUNIT_TEST( RestartBug );
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
void Misc();
|
||||
void BackwardsClockBug();
|
||||
void RestartBug();
|
||||
|
||||
DECLARE_NO_COPY_CLASS(StopWatchTestCase)
|
||||
};
|
||||
@ -55,8 +65,6 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( StopWatchTestCase, "StopWatchTestCase" );
|
||||
|
||||
void StopWatchTestCase::Misc()
|
||||
{
|
||||
static const long tolerance = 10; // in ms
|
||||
|
||||
wxStopWatch sw;
|
||||
long t;
|
||||
wxLongLong usec;
|
||||
@ -81,7 +89,6 @@ void StopWatchTestCase::Misc()
|
||||
t >= 0 && t < tolerance
|
||||
);
|
||||
|
||||
static const int sleepTime = 500;
|
||||
sw.Resume();
|
||||
wxMilliSleep(sleepTime);
|
||||
t = sw.Time();
|
||||
@ -124,3 +131,22 @@ void StopWatchTestCase::BackwardsClockBug()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StopWatchTestCase::RestartBug()
|
||||
{
|
||||
wxStopWatch sw;
|
||||
sw.Pause();
|
||||
|
||||
// Calling Start() should resume the stopwatch if it was paused.
|
||||
static const int offset = 5000;
|
||||
sw.Start(offset);
|
||||
wxMilliSleep(sleepTime);
|
||||
|
||||
long t = sw.Time();
|
||||
WX_ASSERT_MESSAGE
|
||||
(
|
||||
("Actual time value is %ld", t),
|
||||
t > offset + sleepTime - tolerance &&
|
||||
t < offset + sleepTime + tolerance
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user