From patchwork Wed Oct 28 10:31:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 10288 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 1A112BDB1E for ; Wed, 28 Oct 2020 10:32:06 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C405D625FE; Wed, 28 Oct 2020 11:32:05 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="BZW0CaZ2"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2B130625EF for ; Wed, 28 Oct 2020 11:32:04 +0100 (CET) Received: from pyrite.rasen.tech (unknown [IPv6:2400:4051:61:600:2c71:1b79:d06d:5032]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9FC3199A; Wed, 28 Oct 2020 11:32:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1603881123; bh=4r43Df56Lzm3dEGcbjXd7izkQmLPHXCdRVDpiAWMSDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BZW0CaZ2RU6elEUUpBbHpSxryaZQ+2y73Lzk5/lIRhp3pcAe69Q6pqcsLJxpQckje qNn9MJMJgoGEIQWqi/c5erbtjV4GXgzymqNMvJ9dGKKuGK5NpgV8uLo42eqimUisMH 7YeQEHUfyrKoAjf7dpnyLfmiiqABThVMRFoipW9U= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Wed, 28 Oct 2020 19:31:47 +0900 Message-Id: <20201028103151.34575-2-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201028103151.34575-1-paul.elder@ideasonboard.com> References: <20201028103151.34575-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/6] libcamera: request: Add tracepoints 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" Add and use tracepoints in Request. Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart --- Changes in v2: - remove tracepoints from uvcvideo - remove comment in changelog that this is only used for demonstration - use Request pointers instead of feeding the fields manually to the tracepoint --- .../internal/tracepoints/meson.build | 1 + .../libcamera/internal/tracepoints/request.tp | 85 +++++++++++++++++++ src/libcamera/request.cpp | 15 ++++ 3 files changed, 101 insertions(+) create mode 100644 include/libcamera/internal/tracepoints/request.tp diff --git a/include/libcamera/internal/tracepoints/meson.build b/include/libcamera/internal/tracepoints/meson.build index 2dd6733e..8410c205 100644 --- a/include/libcamera/internal/tracepoints/meson.build +++ b/include/libcamera/internal/tracepoints/meson.build @@ -1,4 +1,5 @@ # SPDX-License-Identifier: CC0-1.0 tracepoint_files = files([ + 'request.tp', ]) diff --git a/include/libcamera/internal/tracepoints/request.tp b/include/libcamera/internal/tracepoints/request.tp new file mode 100644 index 00000000..481a3670 --- /dev/null +++ b/include/libcamera/internal/tracepoints/request.tp @@ -0,0 +1,85 @@ +#include + +TRACEPOINT_EVENT_CLASS( + libcamera, + request, + TP_ARGS( + libcamera::Request *, req, + int, cancelled + ), + TP_FIELDS( + ctf_integer(uint64_t, cookie, req->cookie()) + ctf_integer(int, status, req->status()) + ctf_integer(int, cancelled, cancelled) + ) +) + +TRACEPOINT_EVENT_INSTANCE( + libcamera, + request, + request_construct, + TP_ARGS( + libcamera::Request *, req, + int, cancelled + ) +) + +TRACEPOINT_EVENT_INSTANCE( + libcamera, + request, + request_deconstruct, + TP_ARGS( + libcamera::Request *, req, + int, cancelled + ) +) + +TRACEPOINT_EVENT_INSTANCE( + libcamera, + request, + request_reuse, + TP_ARGS( + libcamera::Request *, req, + int, cancelled + ) +) + +TRACEPOINT_EVENT_INSTANCE( + libcamera, + request, + request_add_buffer, + TP_ARGS( + libcamera::Request *, req, + int, cancelled + ) +) + +TRACEPOINT_EVENT_INSTANCE( + libcamera, + request, + request_find_buffer, + TP_ARGS( + const libcamera::Request *, req, + int, cancelled + ) +) + +TRACEPOINT_EVENT_INSTANCE( + libcamera, + request, + request_complete, + TP_ARGS( + libcamera::Request *, req, + int, cancelled + ) +) + +TRACEPOINT_EVENT_INSTANCE( + libcamera, + request, + request_complete_buffer, + TP_ARGS( + libcamera::Request *, req, + int, cancelled + ) +) diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp index ae8b1660..bec2cab5 100644 --- a/src/libcamera/request.cpp +++ b/src/libcamera/request.cpp @@ -16,6 +16,7 @@ #include "libcamera/internal/camera_controls.h" #include "libcamera/internal/log.h" +#include "libcamera/internal/tracepoints.h" /** * \file request.h @@ -85,10 +86,14 @@ Request::Request(Camera *camera, uint64_t cookie) * \todo: Add a validator for metadata controls. */ metadata_ = new ControlList(controls::controls); + + LIBCAMERA_TRACEPOINT(request_construct, this, cancelled_); } Request::~Request() { + LIBCAMERA_TRACEPOINT(request_deconstruct, this, cancelled_); + delete metadata_; delete controls_; delete validator_; @@ -106,6 +111,8 @@ Request::~Request() */ void Request::reuse(ReuseFlag flags) { + LIBCAMERA_TRACEPOINT(request_reuse, this, cancelled_); + pending_.clear(); if (flags & ReuseBuffers) { for (auto pair : bufferMap_) { @@ -167,6 +174,8 @@ void Request::reuse(ReuseFlag flags) */ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer) { + LIBCAMERA_TRACEPOINT(request_add_buffer, this, cancelled_); + if (!stream) { LOG(Request, Error) << "Invalid stream reference"; return -EINVAL; @@ -202,6 +211,8 @@ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer) */ FrameBuffer *Request::findBuffer(const Stream *stream) const { + LIBCAMERA_TRACEPOINT(request_find_buffer, this, cancelled_); + const auto it = bufferMap_.find(stream); if (it == bufferMap_.end()) return nullptr; @@ -253,6 +264,8 @@ FrameBuffer *Request::findBuffer(const Stream *stream) const */ void Request::complete() { + LIBCAMERA_TRACEPOINT(request_complete, this, cancelled_); + ASSERT(!hasPendingBuffers()); status_ = cancelled_ ? RequestCancelled : RequestComplete; @@ -276,6 +289,8 @@ void Request::complete() */ bool Request::completeBuffer(FrameBuffer *buffer) { + LIBCAMERA_TRACEPOINT(request_complete_buffer, this, cancelled_); + int ret = pending_.erase(buffer); ASSERT(ret == 1);