[libcamera-devel] [PATCH 07/14] test: Get event dispatcher from current thread

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Aug 19 17:10:27 CEST 2019


Hi Jacopo,

On Mon, Aug 19, 2019 at 11:03:20AM +0200, Jacopo Mondi wrote:
> Hi Laurent,
>   regardless of the discussion on the instance() operation, I think
> this is good, but please see a few comments below.
> 
> Minors apart:
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> 
> On Sun, Aug 18, 2019 at 04:13:22AM +0300, Laurent Pinchart wrote:
> > For all tests that don't otherwise require access to the camera manager,
> > get the event dispatcher from the current thread instead of the camera
> > manager. This prepares for the removal of CameraManager::instance().
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  test/event-dispatcher.cpp                | 4 ++--
> >  test/event.cpp                           | 4 ++--
> >  test/ipc/unixsocket.cpp                  | 6 +++---
> >  test/log/log_process.cpp                 | 4 ++--
> >  test/meson.build                         | 6 +++---
> >  test/object-invoke.cpp                   | 3 +--
> >  test/process/process_test.cpp            | 4 ++--
> >  test/timer.cpp                           | 4 ++--
> >  test/v4l2_videodevice/buffer_sharing.cpp | 4 ++--
> >  test/v4l2_videodevice/capture_async.cpp  | 4 ++--
> >  test/v4l2_videodevice/v4l2_m2mdevice.cpp | 4 ++--
> >  11 files changed, 23 insertions(+), 24 deletions(-)
> >
> > diff --git a/test/event-dispatcher.cpp b/test/event-dispatcher.cpp
> > index e8818dcab4ad..f243ec39bc28 100644
> > --- a/test/event-dispatcher.cpp
> > +++ b/test/event-dispatcher.cpp
> > @@ -9,11 +9,11 @@
> >  #include <signal.h>
> >  #include <sys/time.h>
> >
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/timer.h>
> >
> >  #include "test.h"
> > +#include "thread.h"
> >
> >  using namespace std;
> >  using namespace libcamera;
> > @@ -33,7 +33,7 @@ protected:
> >
> >  	int init()
> >  	{
> > -		dispatcher = CameraManager::instance()->eventDispatcher();
> > +		dispatcher = Thread::current()->eventDispatcher();
> >
> >  		struct sigaction sa = {};
> >  		sa.sa_handler = &sigAlarmHandler;
> > diff --git a/test/event.cpp b/test/event.cpp
> > index 9bd876153a18..816060cc44a2 100644
> > --- a/test/event.cpp
> > +++ b/test/event.cpp
> > @@ -9,12 +9,12 @@
> >  #include <string.h>
> >  #include <unistd.h>
> >
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/event_notifier.h>
> >  #include <libcamera/timer.h>
> >
> >  #include "test.h"
> > +#include "thread.h"
> >
> >  using namespace std;
> >  using namespace libcamera;
> > @@ -35,7 +35,7 @@ protected:
> >
> >  	int run()
> >  	{
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		std::string data("H2G2");
> >  		Timer timeout;
> >  		ssize_t ret;
> > diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp
> > index 40a3a84a87d2..f53042b88720 100644
> > --- a/test/ipc/unixsocket.cpp
> > +++ b/test/ipc/unixsocket.cpp
> > @@ -15,12 +15,12 @@
> >  #include <sys/wait.h>
> >  #include <unistd.h>
> >
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/timer.h>
> >
> >  #include "ipc_unixsocket.h"
> >  #include "test.h"
> > +#include "thread.h"
> >  #include "utils.h"
> >
> >  #define CMD_CLOSE	0
> > @@ -47,7 +47,7 @@ public:
> >  	UnixSocketTestSlave()
> >  		: exitCode_(EXIT_FAILURE), exit_(false)
> >  	{
> > -		dispatcher_ = CameraManager::instance()->eventDispatcher();
> > +		dispatcher_ = Thread::current()->eventDispatcher();
> >  		ipc_.readyRead.connect(this, &UnixSocketTestSlave::readyRead);
> >  	}
> >
> > @@ -436,7 +436,7 @@ private:
> >  				return -ETIMEDOUT;
> >  			}
> >
> > -			CameraManager::instance()->eventDispatcher()->processEvents();
> > +			Thread::current()->eventDispatcher()->processEvents();
> >  		}
> >
> >  		callResponse_ = nullptr;
> > diff --git a/test/log/log_process.cpp b/test/log/log_process.cpp
> > index 36d25b27bfea..2df4aa43713c 100644
> > --- a/test/log/log_process.cpp
> > +++ b/test/log/log_process.cpp
> > @@ -14,7 +14,6 @@
> >  #include <unistd.h>
> >  #include <vector>
> >
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/logging.h>
> >  #include <libcamera/timer.h>
> > @@ -22,6 +21,7 @@
> >  #include "log.h"
> >  #include "process.h"
> >  #include "test.h"
> > +#include "thread.h"
> >  #include "utils.h"
> >
> >  using namespace std;
> > @@ -65,7 +65,7 @@ protected:
> >
> >  	int run()
> >  	{
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		Timer timeout;
> >
> >  		int exitCode = 42;
> > diff --git a/test/meson.build b/test/meson.build
> > index 05265b7d4976..84722cceb35d 100644
> > --- a/test/meson.build
> > +++ b/test/meson.build
> > @@ -13,22 +13,22 @@ subdir('v4l2_subdevice')
> >  subdir('v4l2_videodevice')
> >
> >  public_tests = [
> > -    ['event',                           'event.cpp'],
> > -    ['event-dispatcher',                'event-dispatcher.cpp'],
> >      ['geometry',                        'geometry.cpp'],
> >      ['list-cameras',                    'list-cameras.cpp'],
> >      ['signal',                          'signal.cpp'],
> > -    ['timer',                           'timer.cpp'],
> >  ]
> >
> >  internal_tests = [
> >      ['camera-sensor',                   'camera-sensor.cpp'],
> > +    ['event',                           'event.cpp'],
> > +    ['event-dispatcher',                'event-dispatcher.cpp'],
> >      ['event-thread',                    'event-thread.cpp'],
> >      ['message',                         'message.cpp'],
> >      ['object',                          'object.cpp'],
> >      ['object-invoke',                   'object-invoke.cpp'],
> >      ['signal-threads',                  'signal-threads.cpp'],
> >      ['threads',                         'threads.cpp'],
> > +    ['timer',                           'timer.cpp'],
> >      ['timer-thread',                    'timer-thread.cpp'],
> >  ]
> >
>
> This seems unrelated...

No really, the tests now use the thread.h header to retrieve the event
dispatcher from the thread, so they need access to internal headers.

> > diff --git a/test/object-invoke.cpp b/test/object-invoke.cpp
> > index 7221930f4380..9fb93e140305 100644
> > --- a/test/object-invoke.cpp
> > +++ b/test/object-invoke.cpp
> > @@ -9,7 +9,6 @@
> >  #include <iostream>
> >  #include <thread>
> >
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/object.h>
> 
> While at it, could you re-sort the following:
> 
> #include "thread.h"
> #include "test.h"

OK

> > @@ -61,7 +60,7 @@ class ObjectInvokeTest : public Test
> >  protected:
> >  	int run()
> >  	{
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		InvokedObject object;
> >
> >  		/*
> > diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp
> > index acb161454e2e..d264555e545f 100644
> > --- a/test/process/process_test.cpp
> > +++ b/test/process/process_test.cpp
> > @@ -9,12 +9,12 @@
> >  #include <unistd.h>
> >  #include <vector>
> >
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/timer.h>
> >
> >  #include "process.h"
> >  #include "test.h"
> > +#include "thread.h"
> >  #include "utils.h"
> >
> >  using namespace std;
> > @@ -41,7 +41,7 @@ public:
> >  protected:
> >  	int run()
> >  	{
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		Timer timeout;
> >
> >  		int exitCode = 42;
> > diff --git a/test/timer.cpp b/test/timer.cpp
> > index addebce3c784..c30709d4109a 100644
> > --- a/test/timer.cpp
> > +++ b/test/timer.cpp
> > @@ -7,11 +7,11 @@
> >
> >  #include <iostream>
> >
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/timer.h>
> >
> >  #include "test.h"
> > +#include "thread.h"
> >
> >  using namespace std;
> >  using namespace libcamera;
> > @@ -62,7 +62,7 @@ protected:
> >
> >  	int run()
> >  	{
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		ManagedTimer timer;
> >  		ManagedTimer timer2;
> >
> > diff --git a/test/v4l2_videodevice/buffer_sharing.cpp b/test/v4l2_videodevice/buffer_sharing.cpp
> > index 12ec88f2d8e6..1629f34cfa6c 100644
> > --- a/test/v4l2_videodevice/buffer_sharing.cpp
> > +++ b/test/v4l2_videodevice/buffer_sharing.cpp
> > @@ -13,10 +13,10 @@
> >  #include <iostream>
> >
> >  #include <libcamera/buffer.h>
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/timer.h>
> >
> > +#include "thread.h"
> >  #include "v4l2_videodevice_test.h"
> >
> >  class BufferSharingTest : public V4L2VideoDeviceTest
> > @@ -116,7 +116,7 @@ protected:
> >
> >  	int run()
> >  	{
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		Timer timeout;
> >  		int ret;
> >
> > diff --git a/test/v4l2_videodevice/capture_async.cpp b/test/v4l2_videodevice/capture_async.cpp
> > index 4909f71a3f34..17eb528b12fd 100644
> > --- a/test/v4l2_videodevice/capture_async.cpp
> > +++ b/test/v4l2_videodevice/capture_async.cpp
> > @@ -6,12 +6,12 @@
> >   */
> >
> >  #include <libcamera/buffer.h>
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/timer.h>
> >
> >  #include <iostream>
> >
> > +#include "thread.h"
> >  #include "v4l2_videodevice_test.h"
> >
> >  class CaptureAsyncTest : public V4L2VideoDeviceTest
> > @@ -34,7 +34,7 @@ protected:
> >  	{
> >  		const unsigned int bufferCount = 8;
> >
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		Timer timeout;
> >  		int ret;
> >
> > diff --git a/test/v4l2_videodevice/v4l2_m2mdevice.cpp b/test/v4l2_videodevice/v4l2_m2mdevice.cpp
> > index d132b1db2432..4d3644c2d287 100644
> > --- a/test/v4l2_videodevice/v4l2_m2mdevice.cpp
> > +++ b/test/v4l2_videodevice/v4l2_m2mdevice.cpp
> > @@ -8,12 +8,12 @@
> >  #include <iostream>
> >
> >  #include <libcamera/buffer.h>
> > -#include <libcamera/camera_manager.h>
> >  #include <libcamera/event_dispatcher.h>
> >  #include <libcamera/timer.h>
> >
> >  #include "device_enumerator.h"
> >  #include "media_device.h"
> > +#include "thread.h"
> >  #include "v4l2_videodevice.h"
> >
> >  #include "test.h"
> > @@ -80,7 +80,7 @@ protected:
> >  	{
> >  		constexpr unsigned int bufferCount = 4;
> >
> > -		EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
> > +		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> >  		int ret;
> >
> >  		MediaEntity *entity = media_->getEntityByName("vim2m-source");

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list