libcamera/test/timer-thread.cpp
Laurent Pinchart dbafe16da7 meson: Remove -Wno-unused-parameter
We build libcamera with -Wno-unused-parameter and this doesn't cause
much issue internally. However, it prevents catching unused parameters
in inline functions defined in public headers. This can lead to
compilation warnings for applications compiled without
-Wno-unused-parameter.

To catch those issues, remove -Wno-unused-parameter and fix all the
related warnings with [[maybe_unused]].

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-08-25 02:58:04 +03:00

107 lines
1.8 KiB
C++

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* timer-thread.cpp - Threaded timer test
*/
#include <chrono>
#include <iostream>
#include <libcamera/event_dispatcher.h>
#include <libcamera/timer.h>
#include "libcamera/internal/thread.h"
#include "test.h"
using namespace std;
using namespace libcamera;
class TimeoutHandler : public Object
{
public:
TimeoutHandler()
: timer_(this), timeout_(false)
{
timer_.timeout.connect(this, &TimeoutHandler::timeoutHandler);
timer_.start(100);
}
void restart()
{
timeout_ = false;
timer_.start(100);
}
bool timeout() const
{
return timeout_;
}
private:
void timeoutHandler([[maybe_unused]] Timer *timer)
{
timeout_ = true;
}
Timer timer_;
bool timeout_;
};
class TimerThreadTest : public Test
{
protected:
int init()
{
thread_.start();
timeout_.moveToThread(&thread_);
return TestPass;
}
int run()
{
/*
* Test that the timer expires and emits the timeout signal in
* the thread it belongs to.
*/
this_thread::sleep_for(chrono::milliseconds(200));
if (!timeout_.timeout()) {
cout << "Timer expiration test failed" << endl;
return TestFail;
}
/*
* Test that starting the timer from another thread fails. We
* need to interrupt the event dispatcher to make sure we don't
* succeed simply because the event dispatcher hasn't noticed
* the timer restart.
*/
timeout_.restart();
thread_.eventDispatcher()->interrupt();
this_thread::sleep_for(chrono::milliseconds(200));
if (timeout_.timeout()) {
cout << "Timer restart test failed" << endl;
return TestFail;
}
return TestPass;
}
void cleanup()
{
/* Must stop thread before destroying timeout. */
thread_.exit(0);
thread_.wait();
}
private:
TimeoutHandler timeout_;
Thread thread_;
};
TEST_REGISTER(TimerThreadTest)