Message ID | 20190812124642.24287-10-laurent.pinchart@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Laurent, Thanks for your work. On 2019-08-12 15:46:33 +0300, Laurent Pinchart wrote: > The test verifies thread affinity and thread move notifications. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> > --- > test/meson.build | 1 + > test/object.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 89 insertions(+) > create mode 100644 test/object.cpp > > diff --git a/test/meson.build b/test/meson.build > index 7c9abc630230..c6601813db78 100644 > --- a/test/meson.build > +++ b/test/meson.build > @@ -24,6 +24,7 @@ public_tests = [ > internal_tests = [ > ['camera-sensor', 'camera-sensor.cpp'], > ['message', 'message.cpp'], > + ['object', 'object.cpp'], > ['object-invoke', 'object-invoke.cpp'], > ['signal-threads', 'signal-threads.cpp'], > ['threads', 'threads.cpp'], > diff --git a/test/object.cpp b/test/object.cpp > new file mode 100644 > index 000000000000..3f1f700d1b39 > --- /dev/null > +++ b/test/object.cpp > @@ -0,0 +1,88 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * Copyright (C) 2019, Google Inc. > + * > + * object.cpp - Object tests > + */ > + > +#include <iostream> > + > +#include <libcamera/object.h> > + > +#include "message.h" > +#include "thread.h" > + > +#include "test.h" > + > +using namespace std; > +using namespace libcamera; > + > +class InstrumentedObject : public Object > +{ > +public: > + enum Status { > + NoMessage, > + MessageReceived, > + }; > + > + InstrumentedObject() > + : status_(NoMessage) > + { > + } > + > + Status status() const { return status_; } > + void reset() { status_ = NoMessage; } > + > +protected: > + void message(Message *msg) override > + { > + if (msg->type() == Message::ThreadMoveMessage) > + status_ = MessageReceived; > + > + Object::message(msg); > + } > + > +private: > + Status status_; > +}; > + > +class ObjectTest : public Test > +{ > +protected: > + int init() > + { > + a_ = new InstrumentedObject(); > + return TestPass; > + } > + > + int run() > + { > + /* Verify that moving an object to a different thread succeeds. */ > + a_->moveToThread(&thread_); > + > + if (a_->thread() != &thread_ || a_->thread() == Thread::current()) { > + cout << "Failed to move object to thread" << endl; > + return TestFail; > + } > + > + /* Verify that objects receive a ThreadMoveMessage when moved. */ > + if (a_->status() != InstrumentedObject::MessageReceived) { > + cout << "Moving object didn't deliver ThreadMoveMessage" << endl; > + return TestFail; > + } > + > + return TestPass; > + } > + > + void cleanup() > + { > + delete a_; > + } > + > +private: > + InstrumentedObject *a_; > + > + Thread thread_; > +}; > + > +TEST_REGISTER(ObjectTest) > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > libcamera-devel mailing list > libcamera-devel@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
diff --git a/test/meson.build b/test/meson.build index 7c9abc630230..c6601813db78 100644 --- a/test/meson.build +++ b/test/meson.build @@ -24,6 +24,7 @@ public_tests = [ internal_tests = [ ['camera-sensor', 'camera-sensor.cpp'], ['message', 'message.cpp'], + ['object', 'object.cpp'], ['object-invoke', 'object-invoke.cpp'], ['signal-threads', 'signal-threads.cpp'], ['threads', 'threads.cpp'], diff --git a/test/object.cpp b/test/object.cpp new file mode 100644 index 000000000000..3f1f700d1b39 --- /dev/null +++ b/test/object.cpp @@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * object.cpp - Object tests + */ + +#include <iostream> + +#include <libcamera/object.h> + +#include "message.h" +#include "thread.h" + +#include "test.h" + +using namespace std; +using namespace libcamera; + +class InstrumentedObject : public Object +{ +public: + enum Status { + NoMessage, + MessageReceived, + }; + + InstrumentedObject() + : status_(NoMessage) + { + } + + Status status() const { return status_; } + void reset() { status_ = NoMessage; } + +protected: + void message(Message *msg) override + { + if (msg->type() == Message::ThreadMoveMessage) + status_ = MessageReceived; + + Object::message(msg); + } + +private: + Status status_; +}; + +class ObjectTest : public Test +{ +protected: + int init() + { + a_ = new InstrumentedObject(); + return TestPass; + } + + int run() + { + /* Verify that moving an object to a different thread succeeds. */ + a_->moveToThread(&thread_); + + if (a_->thread() != &thread_ || a_->thread() == Thread::current()) { + cout << "Failed to move object to thread" << endl; + return TestFail; + } + + /* Verify that objects receive a ThreadMoveMessage when moved. */ + if (a_->status() != InstrumentedObject::MessageReceived) { + cout << "Moving object didn't deliver ThreadMoveMessage" << endl; + return TestFail; + } + + return TestPass; + } + + void cleanup() + { + delete a_; + } + +private: + InstrumentedObject *a_; + + Thread thread_; +}; + +TEST_REGISTER(ObjectTest)
The test verifies thread affinity and thread move notifications. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- test/meson.build | 1 + test/object.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 test/object.cpp