[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