From patchwork Thu Aug 14 13:05:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 24103 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id D1FA1BDCC1 for ; Thu, 14 Aug 2025 13:05:40 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D036169257; Thu, 14 Aug 2025 15:05:39 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="f+0QFIac"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5A44861444 for ; Thu, 14 Aug 2025 15:05:38 +0200 (CEST) Received: from Monstersaurus.lan (cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id AE0D16DF; Thu, 14 Aug 2025 15:04:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1755176683; bh=yKLr+NcMjN6zbpcA9UP9b3QPY8rmuED3I64tTcfH2Qs=; h=From:To:Cc:Subject:Date:From; b=f+0QFIacujwSxJ0fFdnHwZsLJN8Sx/tBGj95cydXxvvyFt6U45mxiAxq/v21E2Mm7 P6kMxUFekANzm5qNZRO8+4gMR6SUXXfngio9/V7J7HPe7hsa3X93cwvkFMh/QB/9yk jRNUEAOkVJc6eFr9te70UddUeiofyZ2TxT2ZxvFE= From: Kieran Bingham To: libcamera devel Cc: "Schulz, Andreas" , Kieran Bingham Subject: [PATCH] Thread: Add name parameter Date: Thu, 14 Aug 2025 14:05:34 +0100 Message-ID: <20250814130534.1125903-1-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.50.1 MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: "Schulz, Andreas" For debugging purposes, threads can be assigned a name, which eases distinguishing between them in e.g. htop or gdb. This uses a Linux-specific API for now which is limited to 15 characters (+ null terminator), so truncation is done and names for existing thread instantiations were chosen to be consise. [Kieran: Apply checkstyle suggestions] Signed-off-by: Schulz, Andreas Signed-off-by: Kieran Bingham --- include/libcamera/base/thread.h | 4 +++- src/libcamera/base/thread.cpp | 8 +++++++- src/libcamera/camera_manager.cpp | 2 +- src/libcamera/software_isp/software_isp.cpp | 6 +++--- .../libcamera_templates/module_ipa_proxy.cpp.tmpl | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/libcamera/base/thread.h b/include/libcamera/base/thread.h index b9284c2c0556..56055261e920 100644 --- a/include/libcamera/base/thread.h +++ b/include/libcamera/base/thread.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include @@ -30,7 +31,7 @@ class ThreadMain; class Thread { public: - Thread(); + Thread(std::string name = std::string()); virtual ~Thread(); void start(); @@ -74,6 +75,7 @@ private: void moveObject(Object *object, ThreadData *currentData, ThreadData *targetData); + std::string name_; std::thread thread_; ThreadData *data_; }; diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp index d8fe0d6971ec..d016f352a783 100644 --- a/src/libcamera/base/thread.cpp +++ b/src/libcamera/base/thread.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -140,6 +141,7 @@ class ThreadMain : public Thread { public: ThreadMain() + : Thread("libcamera-main") { data_->running_ = true; } @@ -230,7 +232,8 @@ ThreadData *ThreadData::current() /** * \brief Create a thread */ -Thread::Thread() +Thread::Thread(std::string name) + : name_(std::move(name)) { data_ = new ThreadData; data_->thread_ = this; @@ -286,6 +289,9 @@ void Thread::startThread() data_->tid_ = syscall(SYS_gettid); currentThreadData = data_; + if (!name_.empty()) + pthread_setname_np(thread_.native_handle(), name_.substr(0, 15).c_str()); + run(); } diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index f81794bfd6fe..a42835c18739 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -38,7 +38,7 @@ LOG_DEFINE_CATEGORY(Camera) #ifndef __DOXYGEN_PUBLIC__ CameraManager::Private::Private() - : initialized_(false) + : Thread("CameraManager"), initialized_(false) { ipaManager_ = std::make_unique(); } diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp index 28e2a360e7e6..b2f6cf61b646 100644 --- a/src/libcamera/software_isp/software_isp.cpp +++ b/src/libcamera/software_isp/software_isp.cpp @@ -75,9 +75,9 @@ LOG_DEFINE_CATEGORY(SoftwareIsp) */ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor, ControlInfoMap *ipaControls) - : dmaHeap_(DmaBufAllocator::DmaBufAllocatorFlag::CmaHeap | - DmaBufAllocator::DmaBufAllocatorFlag::SystemHeap | - DmaBufAllocator::DmaBufAllocatorFlag::UDmaBuf) + : ispWorkerThread_("SWIspWorker"), dmaHeap_(DmaBufAllocator::DmaBufAllocatorFlag::CmaHeap | + DmaBufAllocator::DmaBufAllocatorFlag::SystemHeap | + DmaBufAllocator::DmaBufAllocatorFlag::UDmaBuf) { /* * debayerParams_ must be initialized because the initial value is used for diff --git a/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl index beb646e2d157..7d2d510f5a79 100644 --- a/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl +++ b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl @@ -46,7 +46,7 @@ namespace {{ns}} { {%- endif %} {{proxy_name}}::{{proxy_name}}(IPAModule *ipam, bool isolate) - : IPAProxy(ipam), isolate_(isolate), + : IPAProxy(ipam), thread_("{{proxy_name}}"), isolate_(isolate), controlSerializer_(ControlSerializer::Role::Proxy), seq_(0) { LOG(IPAProxy, Debug)