Message ID | 20240529154341.10426-2-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Commit | 0554a55427b4b742dbaf473562dcc2d85ef15756 |
Headers | show |
Series |
|
Related | show |
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@ideasonboard.com> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@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_;
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_;