[libcamera-devel] [PATCH v2 14/18] test: Add Timer thread move test
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sat Aug 17 17:40:20 CEST 2019
Hi Laurent,
Thanks for your work.
On 2019-08-17 18:21:00 +0300, Laurent Pinchart wrote:
> The test verifies correct behaviour of a running timer moved to a
> different thread.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> test/meson.build | 1 +
> test/timer-thread.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 79 insertions(+)
> create mode 100644 test/timer-thread.cpp
>
> diff --git a/test/meson.build b/test/meson.build
> index f695ffd7be44..05265b7d4976 100644
> --- a/test/meson.build
> +++ b/test/meson.build
> @@ -29,6 +29,7 @@ internal_tests = [
> ['object-invoke', 'object-invoke.cpp'],
> ['signal-threads', 'signal-threads.cpp'],
> ['threads', 'threads.cpp'],
> + ['timer-thread', 'timer-thread.cpp'],
> ]
>
> foreach t : public_tests
> diff --git a/test/timer-thread.cpp b/test/timer-thread.cpp
> new file mode 100644
> index 000000000000..b9373050068c
> --- /dev/null
> +++ b/test/timer-thread.cpp
> @@ -0,0 +1,78 @@
> +/* 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/timer.h>
> +
> +#include "test.h"
> +#include "thread.h"
> +
> +using namespace std;
> +using namespace libcamera;
> +
> +class TimeoutHandler : public Object
> +{
> +public:
> + TimeoutHandler()
> + : timeout_(false)
> + {
> + timer_.timeout.connect(this, &TimeoutHandler::timeoutHandler);
> + timer_.start(100);
> + }
> +
> + bool timeout() const
> + {
> + return timeout_;
> + }
> +
> + void moveToThread(Thread *thread)
> + {
> + Object::moveToThread(thread);
> + timer_.moveToThread(thread);
> + }
> +
> +private:
> + void timeoutHandler(Timer *timer)
> + {
> + timeout_ = true;
> + }
> +
> + Timer timer_;
> + bool timeout_;
> +};
> +
> +class TimerThreadTest : public Test
> +{
> +protected:
> + int run()
> + {
> + Thread thread;
> + thread.start();
> +
> + TimeoutHandler timeout;
> + timeout.moveToThread(&thread);
> +
> + this_thread::sleep_for(chrono::milliseconds(100));
> +
> + /* Must stop thread before destroying timeout. */
> + thread.exit(0);
> + thread.wait();
> +
> + if (!timeout.timeout()) {
> + cout << "Timer expiration test failed" << endl;
> + return TestFail;
> + }
> +
> + return TestPass;
> + }
> +
> +private:
> +};
> +
> +TEST_REGISTER(TimerThreadTest)
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list