[libcamera-devel] [PATCH 2/2] test: threads: Add wait() timeout test

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Jan 23 14:10:49 CET 2020


Hi Kieran,

On Thu, Jan 23, 2020 at 10:19:23AM +0000, Kieran Bingham wrote:
> On 23/01/2020 02:55, Laurent Pinchart wrote:
> > Add a test case to wait with a timeout, testing both a too short and a
> > long enough duration.
> > 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> 
> Some discussion below, but this is fine stand-alone anyway.
> 
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> > ---
> >  test/threads.cpp | 33 ++++++++++++++++++++++++++-------
> >  1 file changed, 26 insertions(+), 7 deletions(-)
> > 
> > diff --git a/test/threads.cpp b/test/threads.cpp
> > index 9a2d39dfd106..fc4b07cc6428 100644
> > --- a/test/threads.cpp
> > +++ b/test/threads.cpp
> > @@ -15,24 +15,22 @@
> >  using namespace std;
> >  using namespace libcamera;
> >  
> > -class InstrumentedThread : public Thread
> > +class DelayThread : public Thread
> >  {
> >  public:
> > -	InstrumentedThread(unsigned int iterations)
> > -		: iterations_(iterations)
> > +	DelayThread(chrono::steady_clock::duration duration)
> > +		: duration_(duration)
> >  	{
> >  	}
> >  
> >  protected:
> >  	void run()
> >  	{
> > -		for (unsigned int i = 0; i < iterations_; ++i) {
> > -			this_thread::sleep_for(chrono::milliseconds(50));
> > -		}
> > +		this_thread::sleep_for(duration_);
> >  	}
> >  
> >  private:
> > -	unsigned int iterations_;
> > +	chrono::steady_clock::duration duration_;
> >  };
> >  
> >  class ThreadTest : public Test
> > @@ -82,6 +80,27 @@ protected:
> >  
> >  		delete thread;
> >  
> > +		/* Test waiting for completion with a timeout. */
> > +		thread = new DelayThread(chrono::milliseconds(500));
> > +		thread->start();
> > +		thread->exit(0);
> > +
> > +		bool timeout = thread->wait(chrono::milliseconds(100));
> > +
> > +		if (!timeout) {
> > +			cout << "Waiting for thread didn't time out" << endl;
> > +			return TestFail;
> > +		}
> > +
> > +		timeout = thread->wait(chrono::milliseconds(1000));
> > +
> > +		if (timeout) {
> > +			cout << "Waiting for thread timed out" << endl;
> > +			return TestFail;
> > +		}
> > +
> > +		delete thread;
> > +
> 
> How about a test for waiting on a thread that isn't running? (Perhaps
> put in an thread->wait(utils::duration::max()); after we know the thread
> has already stopped here ?

That's a good idea. I'll add it as a separate patch.

> What happens if the wait receives a signal while it is waiting?

As in a POSIX signal ? As far as I can tell, nothing.

> >  		return TestPass;
> >  	}
> >  

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list