[libcamera-devel] [PATCH 2/2] test: fence: Signal fence once

Jacopo Mondi jacopo at jmondi.org
Mon Dec 13 15:51:43 CET 2021


The unit test associates a fence with a framebuffer and makes sure
the fence is correctly signalled.

Once a fence is correctly signalled, it is released by the core, and the
underlying file descriptor closed.

The unit test however tries to write on the fence file descriptor every
time the designated Request is queued, and error which is now visible
as the return value of the fence signalling write() is checked.

Fix that by associating a fence with a framebuffer only once.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 test/fence.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/test/fence.cpp b/test/fence.cpp
index d2865398784e..524db2a10757 100644
--- a/test/fence.cpp
+++ b/test/fence.cpp
@@ -56,6 +56,7 @@ private:
 	Stream *stream_;
 
 	bool expectedCompletionResult_ = true;
+	bool setFence_ = true;
 
 	unsigned int completedRequest_;
 
@@ -193,7 +194,7 @@ void FenceTest::requestRequeue(Request *request)
 
 	request->reuse();
 
-	if (cookie == signalledRequestId_) {
+	if (cookie == signalledRequestId_ && setFence_) {
 		/*
 		 * The second time this request is queued add a fence to it.
 		 *
@@ -257,6 +258,7 @@ void FenceTest::signalFence()
 	if (ret != sizeof(value))
 		cerr << "Failed to signal fence" << endl;
 
+	setFence_ = false;
 	dispatcher_->processEvents();
 }
 
@@ -316,7 +318,7 @@ int FenceTest::run()
 	Timer timer;
 	timer.start(1000);
 	while (timer.isRunning() && expectedCompletionResult_) {
-		if (completedRequest_ == signalledRequestId_)
+		if (completedRequest_ == signalledRequestId_ && setFence_)
 			/*
 			 * signalledRequestId_ has just completed and it has
 			 * been re-queued with a fence. Start the timer to
-- 
2.33.1



More information about the libcamera-devel mailing list