[libcamera-devel] [PATCH 00/18] Object & Thread enhancements

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Aug 12 14:46:24 CEST 2019


Hello everybody,

This patch series extends the Object and Thread implementations in
libcamera to improve thread affinity handling.

This first patch is a simple cleanup.

Object instances are associated with a thread, and the thread affinity
can be changed with Object::moveToThread(). This moves pending messages
for the object to the message queue of the new thread. Patch 02/18 fixes
a bug in the implementation that forgot to wake up the event loop of the
new thread, and patch 03/18 fixes a bug that prevented dispatching
message to the main thread.

The next three patches split the slot-related classes from signal.h
(04/18), decouple them from the signal implementation (05/18) and use
them to add a new asynchronous method invocation mechanism for the
Object class (06/18). Patch 07/18 then adds a message to notify Object
instances of thread move. The next two patches are new tests for those
APIs.

Patches 10/18 to 12/18 bind CameraManager, EventNotifier and Timer
instances to threads by inheriting from the Object class. The
EventNotifier and Timer classes now support being moved to a different
thread with proper operation with the new thread's event loop. The next
two patches add new tests for those operations.

Patch 15/18 adds a parent-child hierarchy in the Object class, to
simplify moving objects to threads. Patch 16/18 supports this by adding
a parent argument to the constructor of various classes. Patch 17/18
extends the object test to cover the parent-child relationships, and
patch 18/18 shows how they can simplify code.

Laurent Pinchart (18):
  libcamera: object: Make message() method protected
  libcamera: thread: Wake up target thread when moving objects
  libcamera: thread: Support dispatching messages to main thread
  libcamera: signal: Split Slot implementation to reusable classes
  libcamera: bound_method: Decouple from Signal implementation
  libcamera: object: Add an asynchronous method invocation method
  libcamera: object: Notify objects of thread move
  test: Add Object::invokeMethod() test
  test: Add Object class thread affinity test
  libcamera: camera_manager: Bind CameraManager to threads
  libcamera: event_notifier: Bind event notifiers to threads
  libcamera: timer: Bind timers to threads
  test: Add EventNotifier thread move test
  test: Add Timer thread move test
  libcamera: object: Create parent-child relationships
  libcamera: Add parent argument to constructors of Object-derived
    classes
  test: object: Extend object test to verify parent-child relationships
  test: Simplify tests with parent-child relationships

 Documentation/Doxyfile.in               |  10 +-
 include/libcamera/bound_method.h        | 130 +++++++++++++++++++
 include/libcamera/camera_manager.h      |   4 +-
 include/libcamera/event_notifier.h      |  10 +-
 include/libcamera/meson.build           |   1 +
 include/libcamera/object.h              |  32 ++++-
 include/libcamera/signal.h              | 151 +++-------------------
 include/libcamera/timer.h               |  13 +-
 src/libcamera/bound_method.cpp          |  27 ++++
 src/libcamera/camera_manager.cpp        |   4 +-
 src/libcamera/event_dispatcher_poll.cpp |   3 +
 src/libcamera/event_notifier.cpp        |  22 +++-
 src/libcamera/include/message.h         |  22 ++--
 src/libcamera/include/thread.h          |   5 +-
 src/libcamera/meson.build               |   1 +
 src/libcamera/message.cpp               |  50 ++++++--
 src/libcamera/object.cpp                | 120 +++++++++++++++---
 src/libcamera/signal.cpp                |  23 ----
 src/libcamera/thread.cpp                |  26 +++-
 src/libcamera/timer.cpp                 |  33 ++++-
 test/event-thread.cpp                   | 106 ++++++++++++++++
 test/meson.build                        |   4 +
 test/object-invoke.cpp                  | 137 ++++++++++++++++++++
 test/object.cpp                         | 158 ++++++++++++++++++++++++
 test/timer-thread.cpp                   |  72 +++++++++++
 25 files changed, 948 insertions(+), 216 deletions(-)
 create mode 100644 include/libcamera/bound_method.h
 create mode 100644 src/libcamera/bound_method.cpp
 create mode 100644 test/event-thread.cpp
 create mode 100644 test/object-invoke.cpp
 create mode 100644 test/object.cpp
 create mode 100644 test/timer-thread.cpp

-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list