[PATCH v2 1/6] test: camera: Increase timeout for vimc capture tests
Dan Scally
dan.scally at ideasonboard.com
Fri May 31 16:52:23 CEST 2024
Hi Laurent - thanks for the patch
On 29/05/2024 16:43, Laurent Pinchart wrote:
> On slower machines, a 1s timeout to capture frames with vimc can be too
> short and cause test failures. Make the timeout proportional to the
> number of frames expected to be captured, using a conservative low
> estimate of the frame rate at 2fps.
Sounds like a good idea to me
>
> By itself, that change could increase the test time quite substantially
> on fast platforms, so break from the capture loop as soon as we capture
> enough frames. To do so, interrupt the dispatcher at every request
> completion, or it will only get interrupted after the timer times out.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally at ideasonboard.com>
> ---
> test/camera/buffer_import.cpp | 21 +++++++++++++++------
> test/camera/capture.cpp | 22 ++++++++++++++--------
> 2 files changed, 29 insertions(+), 14 deletions(-)
>
> diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp
> index 9288400474a7..815d1caed9f3 100644
> --- a/test/camera/buffer_import.cpp
> +++ b/test/camera/buffer_import.cpp
> @@ -63,6 +63,8 @@ protected:
> request->reuse();
> request->addBuffer(stream, buffer);
> camera_->queueRequest(request);
> +
> + dispatcher_->interrupt();
> }
>
> int init() override
> @@ -76,6 +78,8 @@ protected:
> return TestFail;
> }
>
> + dispatcher_ = Thread::current()->eventDispatcher();
> +
> return TestPass;
> }
>
> @@ -133,17 +137,20 @@ protected:
> }
> }
>
> - EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> + const unsigned int nFrames = cfg.bufferCount * 2;
>
> Timer timer;
> - timer.start(1000ms);
> - while (timer.isRunning())
> - dispatcher->processEvents();
> + timer.start(500ms * nFrames);
> + while (timer.isRunning()) {
> + dispatcher_->processEvents();
> + if (completeRequestsCount_ > nFrames)
> + break;
> + }
>
> - if (completeRequestsCount_ < cfg.bufferCount * 2) {
> + if (completeRequestsCount_ < nFrames) {
> std::cout << "Failed to capture enough frames (got "
> << completeRequestsCount_ << " expected at least "
> - << cfg.bufferCount * 2 << ")" << std::endl;
> + << nFrames << ")" << std::endl;
> return TestFail;
> }
>
> @@ -161,6 +168,8 @@ protected:
> }
>
> private:
> + EventDispatcher *dispatcher_;
> +
> std::vector<std::unique_ptr<Request>> requests_;
>
> unsigned int completeBuffersCount_;
> diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp
> index de824083dfed..8766fb194ee5 100644
> --- a/test/camera/capture.cpp
> +++ b/test/camera/capture.cpp
> @@ -59,6 +59,8 @@ protected:
> request->reuse();
> request->addBuffer(stream, buffer);
> camera_->queueRequest(request);
> +
> + dispatcher_->interrupt();
> }
>
> int init() override
> @@ -73,6 +75,7 @@ protected:
> }
>
> allocator_ = new FrameBufferAllocator(camera_);
> + dispatcher_ = Thread::current()->eventDispatcher();
>
> return TestPass;
> }
> @@ -135,19 +138,20 @@ protected:
> }
> }
>
> - EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
> + unsigned int nFrames = allocator_->buffers(stream).size() * 2;
>
> Timer timer;
> - timer.start(1000ms);
> - while (timer.isRunning())
> - dispatcher->processEvents();
> + timer.start(500ms * nFrames);
> + while (timer.isRunning()) {
> + dispatcher_->processEvents();
> + if (completeRequestsCount_ > nFrames)
> + break;
> + }
>
> - unsigned int nbuffers = allocator_->buffers(stream).size();
> -
> - if (completeRequestsCount_ < nbuffers * 2) {
> + if (completeRequestsCount_ < nFrames) {
> cout << "Failed to capture enough frames (got "
> << completeRequestsCount_ << " expected at least "
> - << nbuffers * 2 << ")" << endl;
> + << nFrames * 2 << ")" << endl;
> return TestFail;
> }
>
> @@ -164,6 +168,8 @@ protected:
> return TestPass;
> }
>
> + EventDispatcher *dispatcher_;
> +
> std::vector<std::unique_ptr<Request>> requests_;
>
> std::unique_ptr<CameraConfiguration> config_;
More information about the libcamera-devel
mailing list