[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