Patch Detail
Show a patch.
GET /api/1.1/patches/24136/?format=api
{ "id": 24136, "url": "https://patchwork.libcamera.org/api/1.1/patches/24136/?format=api", "web_url": "https://patchwork.libcamera.org/patch/24136/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20250815113400.20623-7-laurent.pinchart@ideasonboard.com>", "date": "2025-08-15T11:33:58", "name": "[v2,6/8] utils: codegen: ipc: Optimize constructors of IPA interface structures", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "6479af5b8335aaffc19af3d8c088a64019ce36ff", "submitter": { "id": 2, "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api", "name": "Laurent Pinchart", "email": "laurent.pinchart@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/24136/mbox/", "series": [ { "id": 5383, "url": "https://patchwork.libcamera.org/api/1.1/series/5383/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5383", "date": "2025-08-15T11:33:52", "name": "libcamera: Use span in FrameBuffer & assorted cleanups", "version": 2, "mbox": "https://patchwork.libcamera.org/series/5383/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/24136/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/24136/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id AC612BEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 15 Aug 2025 11:34:39 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DD5A16926D;\n\tFri, 15 Aug 2025 13:34:38 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1165269264\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 15 Aug 2025 13:34:30 +0200 (CEST)", "from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id EE8B76A8;\n\tFri, 15 Aug 2025 13:33:34 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"LiFqUjbW\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1755257615;\n\tbh=PqXjuEd/eETxliLeoxxBIFcSSeAUo4EyKWgToqjiTes=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=LiFqUjbWT5k6FCvcXZe3sS4pax4F6nad0+pq4aNChAB2XCjM8LHogGSUgzgTM4cz7\n\tqy7uRoLpbhlIZhBa96yeJbfvF2W1J/C7owatQ0OwtYVkX44G4rLp6rURcHvyzbXPvs\n\tQtBonsfqLnyIjohqSUDlIU8l1KS8F5UwfD0/a1Tg=", "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "=?utf-8?q?Daniel_R=C3=A1kos?= <daniel.rakos@rastergrid.com>", "Subject": "[PATCH v2 6/8] utils: codegen: ipc: Optimize constructors of IPA\n\tinterface structures", "Date": "Fri, 15 Aug 2025 14:33:58 +0300", "Message-ID": "<20250815113400.20623-7-laurent.pinchart@ideasonboard.com>", "X-Mailer": "git-send-email 2.49.1", "In-Reply-To": "<20250815113400.20623-1-laurent.pinchart@ideasonboard.com>", "References": "<20250815113400.20623-1-laurent.pinchart@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "IPA interface structures store copies of data. For members that are not\nPODs, such as vectors or strings, the constructors take const references\nto a container class storing the data, and copies it internally. This is\ninefficient if the caller constructs the container for the sole purpose\nof passing it to the IPA interface structure constructor, as it forces a\ncopy of the data.\n\nReplace the const reference argument with a plain instance, and move it\nin the constructor. This allows getting rid of the data copy if the\ncaller uses std::move().\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n .../generators/libcamera_templates/definition_functions.tmpl | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)", "diff": "diff --git a/utils/codegen/ipc/generators/libcamera_templates/definition_functions.tmpl b/utils/codegen/ipc/generators/libcamera_templates/definition_functions.tmpl\nindex 8b8509f3ded6..31c70e152d4f 100644\n--- a/utils/codegen/ipc/generators/libcamera_templates/definition_functions.tmpl\n+++ b/utils/codegen/ipc/generators/libcamera_templates/definition_functions.tmpl\n@@ -36,12 +36,12 @@ public:\n \n \t{{struct.mojom_name}}(\n {%- for field in struct.fields -%}\n-{{\"const \" if not field|is_pod}}{{field|name}} {{\"&\" if not field|is_pod}}_{{field.mojom_name}}{{\", \" if not loop.last}}\n+{{field|name}} _{{field.mojom_name}}{{\", \" if not loop.last}}\n {%- endfor -%}\n )\n \t\t:\n {%- for field in struct.fields -%}\n-{{\" \" if loop.first}}{{field.mojom_name}}(_{{field.mojom_name}}){{\", \" if not loop.last}}\n+{{\" \" if loop.first}}{{field.mojom_name}}({{\"std::move(\" if not field|is_pod}}_{{field.mojom_name}}{{\")\" if not field|is_pod}}){{\", \" if not loop.last}}\n {%- endfor %}\n \t{\n \t}\n", "prefixes": [ "v2", "6/8" ] }