mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-16 08:55:06 +03:00
test: timer: Test that a timer can be restarted before it expires
The Timer API allows restarting a timer before it expires. Add a corresponding test. The test fails as the Timer class doesn't comply with its API documentation. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
9c6794164d
commit
dfe1d89441
1 changed files with 24 additions and 4 deletions
|
@ -21,13 +21,14 @@ class ManagedTimer : public Timer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ManagedTimer()
|
ManagedTimer()
|
||||||
: Timer()
|
: Timer(), count_(0)
|
||||||
{
|
{
|
||||||
timeout.connect(this, &ManagedTimer::timeoutHandler);
|
timeout.connect(this, &ManagedTimer::timeoutHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void start(int msec)
|
void start(int msec)
|
||||||
{
|
{
|
||||||
|
count_ = 0;
|
||||||
start_ = std::chrono::steady_clock::now();
|
start_ = std::chrono::steady_clock::now();
|
||||||
expiration_ = std::chrono::steady_clock::time_point();
|
expiration_ = std::chrono::steady_clock::time_point();
|
||||||
|
|
||||||
|
@ -40,12 +41,19 @@ public:
|
||||||
return abs(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count());
|
return abs(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool hasFailed()
|
||||||
|
{
|
||||||
|
return isRunning() || count_ != 1 || jitter() > 50;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void timeoutHandler(Timer *timer)
|
void timeoutHandler(Timer *timer)
|
||||||
{
|
{
|
||||||
expiration_ = std::chrono::steady_clock::now();
|
expiration_ = std::chrono::steady_clock::now();
|
||||||
|
count_++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int count_;
|
||||||
std::chrono::steady_clock::time_point start_;
|
std::chrono::steady_clock::time_point start_;
|
||||||
std::chrono::steady_clock::time_point expiration_;
|
std::chrono::steady_clock::time_point expiration_;
|
||||||
};
|
};
|
||||||
|
@ -74,7 +82,7 @@ protected:
|
||||||
|
|
||||||
dispatcher->processEvents();
|
dispatcher->processEvents();
|
||||||
|
|
||||||
if (timer.isRunning() || timer.jitter() > 50) {
|
if (timer.hasFailed()) {
|
||||||
cout << "Timer expiration test failed" << endl;
|
cout << "Timer expiration test failed" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
@ -87,7 +95,7 @@ protected:
|
||||||
timer.start(4295);
|
timer.start(4295);
|
||||||
dispatcher->processEvents();
|
dispatcher->processEvents();
|
||||||
|
|
||||||
if (timer.isRunning() || timer.jitter() > 50) {
|
if (timer.hasFailed()) {
|
||||||
cout << "Timer expiration test failed" << endl;
|
cout << "Timer expiration test failed" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
@ -102,11 +110,23 @@ protected:
|
||||||
|
|
||||||
dispatcher->processEvents();
|
dispatcher->processEvents();
|
||||||
|
|
||||||
if (timer.isRunning() || timer.jitter() > 50) {
|
if (timer.hasFailed()) {
|
||||||
cout << "Timer restart test failed" << endl;
|
cout << "Timer restart test failed" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Timer restart before expiration. */
|
||||||
|
timer.start(50);
|
||||||
|
timer.start(100);
|
||||||
|
timer.start(150);
|
||||||
|
|
||||||
|
dispatcher->processEvents();
|
||||||
|
|
||||||
|
if (timer.hasFailed()) {
|
||||||
|
cout << "Timer restart before expiration test failed" << endl;
|
||||||
|
return TestFail;
|
||||||
|
}
|
||||||
|
|
||||||
/* Two timers. */
|
/* Two timers. */
|
||||||
timer.start(1000);
|
timer.start(1000);
|
||||||
timer2.start(300);
|
timer2.start(300);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue