Show a patch.

GET /api/1.1/patches/13081/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 13081,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/13081/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/13081/",
    "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": "<20210722232851.747614-8-nfraprado@collabora.com>",
    "date": "2021-07-22T23:28:47",
    "name": "[libcamera-devel,v7,07/11] lc-compliance: Add test to queue more requests than hardware depth",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "bb716ff6802a6630a1f83495ecdb1de18fba5fe7",
    "submitter": {
        "id": 84,
        "url": "https://patchwork.libcamera.org/api/1.1/people/84/?format=api",
        "name": "Nícolas F. R. A. Prado",
        "email": "nfraprado@collabora.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/13081/mbox/",
    "series": [
        {
            "id": 2269,
            "url": "https://patchwork.libcamera.org/api/1.1/series/2269/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2269",
            "date": "2021-07-22T23:28:40",
            "name": "lc-compliance: Add test to queue more requests than hardware depth",
            "version": 7,
            "mbox": "https://patchwork.libcamera.org/series/2269/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/13081/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/13081/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 0D4BFC0109\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 22 Jul 2021 23:29:41 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C734D687A7;\n\tFri, 23 Jul 2021 01:29:40 +0200 (CEST)",
            "from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7248F60276\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 23 Jul 2021 01:29:39 +0200 (CEST)",
            "from localhost.localdomain (unknown\n\t[IPv6:2804:14c:1a9:2434:a4c5:aa5e:1d8c:5e2c])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits))\n\t(No client certificate requested) (Authenticated sender: nfraprado)\n\tby bhuna.collabora.co.uk (Postfix) with ESMTPSA id 7C9351F447D4;\n\tFri, 23 Jul 2021 00:29:37 +0100 (BST)"
        ],
        "From": "=?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= <nfraprado@collabora.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu, 22 Jul 2021 20:28:47 -0300",
        "Message-Id": "<20210722232851.747614-8-nfraprado@collabora.com>",
        "X-Mailer": "git-send-email 2.32.0",
        "In-Reply-To": "<20210722232851.747614-1-nfraprado@collabora.com>",
        "References": "<20210722232851.747614-1-nfraprado@collabora.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v7 07/11] lc-compliance: Add test to queue\n\tmore requests than hardware depth",
        "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>",
        "Cc": "kernel@collabora.com, =?utf-8?q?Andr=C3=A9_Almeida?=\n\t<andrealmeid@collabora.com>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "A pipeline handler should be able to handle an arbitrary number of\nsimultaneous requests by submitting what it can to the video device and\nqueuing the rest internally until resources are available. This isn't\ncurrently done by some pipeline handlers however [1].\n\nAdd a new test to lc-compliance that submits a lot of requests at once\nto check if the pipeline handler is behaving well in this situation.\n\n[1] https://bugs.libcamera.org/show_bug.cgi?id=24\n\nSigned-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>\n---\n\nNo changes in v7\n\nChanges in v6:\n- Made MAX_SIMULTANEOUS_REQUESTS a constexpr\n\nChanges in v5:\n- Updated to use googletest, and CameraHolder and roleToString from previous\n  patches\n\n src/lc-compliance/capture_test.cpp   | 45 ++++++++++++++++++++++++++++\n src/lc-compliance/simple_capture.cpp | 30 +++++++++++++++++++\n src/lc-compliance/simple_capture.h   | 11 +++++++\n 3 files changed, 86 insertions(+)",
    "diff": "diff --git a/src/lc-compliance/capture_test.cpp b/src/lc-compliance/capture_test.cpp\nindex b4807486ee07..a7ba7448a21b 100644\n--- a/src/lc-compliance/capture_test.cpp\n+++ b/src/lc-compliance/capture_test.cpp\n@@ -18,6 +18,8 @@ using namespace libcamera;\n const std::vector<int> NUMREQUESTS = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };\n const std::vector<StreamRole> ROLES = { Raw, StillCapture, VideoRecording, Viewfinder };\n \n+static constexpr unsigned int MAX_SIMULTANEOUS_REQUESTS = 8;\n+\n static const std::string &roleToString(const StreamRole &role)\n {\n \tstatic std::map<StreamRole, std::string> rolesMap = { { Raw, \"Raw\" },\n@@ -79,12 +81,37 @@ void SingleStream::TearDown()\n \treleaseCamera();\n }\n \n+class RoleParametrizedTest : public testing::TestWithParam<StreamRole>, public CameraHolder\n+{\n+public:\n+\tstatic std::string nameParameters(const testing::TestParamInfo<RoleParametrizedTest::ParamType> &info);\n+\n+protected:\n+\tvoid SetUp() override;\n+\tvoid TearDown() override;\n+};\n+\n+void RoleParametrizedTest::SetUp()\n+{\n+\tacquireCamera();\n+}\n+\n+void RoleParametrizedTest::TearDown()\n+{\n+\treleaseCamera();\n+}\n+\n std::string SingleStream::nameParameters(const testing::TestParamInfo<SingleStream::ParamType> &info)\n {\n \treturn roleToString(std::get<0>(info.param)) + \"_\" +\n \t       std::to_string(std::get<1>(info.param));\n }\n \n+std::string RoleParametrizedTest::nameParameters(const testing::TestParamInfo<RoleParametrizedTest::ParamType> &info)\n+{\n+\treturn roleToString(info.param);\n+}\n+\n /*\n  * Test single capture cycles\n  *\n@@ -147,8 +174,26 @@ TEST_P(SingleStream, UnbalancedStop)\n \tcapture.capture(numRequests);\n }\n \n+TEST_P(RoleParametrizedTest, Overflow)\n+{\n+\tauto role = GetParam();\n+\n+\tSimpleCaptureOverflow capture(camera_);\n+\n+\tcapture.configure(role);\n+\n+\tcapture.allocateBuffers(MAX_SIMULTANEOUS_REQUESTS);\n+\n+\tcapture.capture();\n+}\n+\n INSTANTIATE_TEST_SUITE_P(CaptureTests,\n \t\t\t SingleStream,\n \t\t\t testing::Combine(testing::ValuesIn(ROLES),\n \t\t\t\t\t  testing::ValuesIn(NUMREQUESTS)),\n \t\t\t SingleStream::nameParameters);\n+\n+INSTANTIATE_TEST_SUITE_P(CaptureTests,\n+\t\t\t RoleParametrizedTest,\n+\t\t\t testing::ValuesIn(ROLES),\n+\t\t\t RoleParametrizedTest::nameParameters);\ndiff --git a/src/lc-compliance/simple_capture.cpp b/src/lc-compliance/simple_capture.cpp\nindex 06ef44ef7e42..48ce8f088e71 100644\n--- a/src/lc-compliance/simple_capture.cpp\n+++ b/src/lc-compliance/simple_capture.cpp\n@@ -220,3 +220,33 @@ void SimpleCaptureUnbalanced::requestComplete(Request *request)\n \tif (camera_->queueRequest(request))\n \t\tloop_->exit(-EINVAL);\n }\n+\n+/* SimpleCaptureOverflow */\n+\n+SimpleCaptureOverflow::SimpleCaptureOverflow(std::shared_ptr<Camera> camera)\n+\t: SimpleCapture(camera)\n+{\n+}\n+\n+void SimpleCaptureOverflow::capture()\n+{\n+\tstart();\n+\n+\tStream *stream = config_->at(0).stream();\n+\tconst std::vector<std::unique_ptr<FrameBuffer>> &buffers = allocator_->buffers(stream);\n+\n+\tcaptureCount_ = 0;\n+\tcaptureLimit_ = buffers.size();\n+\n+\tstd::vector<std::unique_ptr<libcamera::Request>> requests;\n+\tqueueRequests(stream, buffers, requests);\n+\n+\trunCaptureSession();\n+\n+\tASSERT_EQ(captureCount_, captureLimit_);\n+}\n+\n+void SimpleCaptureOverflow::requestComplete([[maybe_unused]] Request *request)\n+{\n+\tcaptureCompleted();\n+}\ndiff --git a/src/lc-compliance/simple_capture.h b/src/lc-compliance/simple_capture.h\nindex 0f9a060fece3..2f4960584642 100644\n--- a/src/lc-compliance/simple_capture.h\n+++ b/src/lc-compliance/simple_capture.h\n@@ -72,4 +72,15 @@ private:\n \tvoid requestComplete(libcamera::Request *request) override;\n };\n \n+class SimpleCaptureOverflow : public SimpleCapture\n+{\n+public:\n+\tSimpleCaptureOverflow(std::shared_ptr<libcamera::Camera> camera);\n+\n+\tvoid capture();\n+\n+private:\n+\tvoid requestComplete(libcamera::Request *request) override;\n+};\n+\n #endif /* __LC_COMPLIANCE_SIMPLE_CAPTURE_H__ */\n",
    "prefixes": [
        "libcamera-devel",
        "v7",
        "07/11"
    ]
}