Fix randomly failed UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02 45/324745/3
authorEunki Hong <eunkiki.hong@samsung.com>
Sat, 24 May 2025 16:44:06 +0000 (01:44 +0900)
committerEunki Hong <eunkiki.hong@samsung.com>
Sun, 25 May 2025 02:59:14 +0000 (11:59 +0900)
Sometimes, CanvasRenderer's task completed before we reset the flags.

Change-Id: I0594031989336e66f620dc2dc13b5feb887a6bbb
Signed-off-by: Eunki Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.h
automated-tests/src/dali-toolkit/utc-Dali-CanvasView.cpp

index a0b3564bd128c374e2900571a5d5aa578f58b101..49cca8dac4d261e0af0e838bec50a803be1e586c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 #include <sys/stat.h>
 #include <toolkit-application.h>
 #include <toolkit-event-thread-callback.h>
+
+#include <atomic>
 #include <cstring>
 #include <memory>
 
 namespace
 {
-bool gRasterizeCalled = false;
-bool gRasterizeResult = true; ///< Default rasterization result as success
+std::atomic_uint32_t gRasterizeCalledCount = 0u;
+std::atomic_uint32_t gRasterizeResult      = true; ///< Default rasterization result as success
 } // namespace
 namespace Dali
 {
@@ -68,7 +70,7 @@ public:
 
   bool Rasterize()
   {
-    gRasterizeCalled = true;
+    ++gRasterizeCalledCount;
     return gRasterizeResult;
   }
 
@@ -247,16 +249,21 @@ namespace Test::CanvasRenderer
 {
 void MarkRasterizationResult(bool result)
 {
-  gRasterizeResult = result;
+  gRasterizeResult.store(result ? 1u : 0u);
+}
+
+void ReduceRasterizationFlagCount()
+{
+  --gRasterizeCalledCount;
 }
 
 void ResetRasterizationFlag()
 {
-  gRasterizeCalled = false;
+  gRasterizeCalledCount.store(0u);
 }
 
 bool IsRasterizationCalled()
 {
-  return gRasterizeCalled;
+  return gRasterizeCalledCount.load();
 }
 } // namespace Test::CanvasRenderer
\ No newline at end of file
index 1087fb697a02d136c8323ce8a24efaf23262577c..89c39156ecc2432c3312f79caf685ad0adc45c32 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_TOOLKIT_CANVAS_RENDERER_H
 
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,7 +26,10 @@ namespace Test::CanvasRenderer
 // Set global rasterization result for CanvaseRender Rasterize() function.
 void MarkRasterizationResult(bool result);
 
-// Reset CanvaseRender Rasterize() function called signal.
+// Reduce the cound of CanvaseRender Rasterize() function called signal.
+void ReduceRasterizationFlagCount();
+
+// Reset CanvaseRender Rasterize() function called signal as zero.
 void ResetRasterizationFlag();
 
 // Get CanvaseRender Rasterize() function called or not.
index e0bbdb4cb6bad15d76c30da5e712253952f06278..83c3e59a16d375010a8616298be0900664ab58bb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -718,7 +718,7 @@ int UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02(void)
   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
 
   DALI_TEST_EQUALS(Test::CanvasRenderer::IsRasterizationCalled(), true, TEST_LOCATION);
-  Test::CanvasRenderer::ResetRasterizationFlag();
+  Test::CanvasRenderer::ReduceRasterizationFlagCount();
 
   application.SendNotification();
   application.Render();
@@ -746,7 +746,7 @@ int UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02(void)
   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
 
   DALI_TEST_EQUALS(Test::CanvasRenderer::IsRasterizationCalled(), true, TEST_LOCATION);
-  Test::CanvasRenderer::ResetRasterizationFlag();
+  Test::CanvasRenderer::ReduceRasterizationFlagCount();
 
   application.SendNotification();
   application.Render();
@@ -755,7 +755,7 @@ int UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02(void)
   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
 
   DALI_TEST_EQUALS(Test::CanvasRenderer::IsRasterizationCalled(), true, TEST_LOCATION);
-  Test::CanvasRenderer::ResetRasterizationFlag();
+  Test::CanvasRenderer::ReduceRasterizationFlagCount();
 
   application.SendNotification();
   application.Render();
@@ -764,7 +764,7 @@ int UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02(void)
   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
 
   DALI_TEST_EQUALS(Test::CanvasRenderer::IsRasterizationCalled(), true, TEST_LOCATION);
-  Test::CanvasRenderer::ResetRasterizationFlag();
+  Test::CanvasRenderer::ReduceRasterizationFlagCount();
 
   // Make rasterization success.
   Test::CanvasRenderer::MarkRasterizationResult(true);
@@ -776,12 +776,18 @@ int UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02(void)
   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
 
   DALI_TEST_EQUALS(Test::CanvasRenderer::IsRasterizationCalled(), true, TEST_LOCATION);
-  Test::CanvasRenderer::ResetRasterizationFlag();
+  Test::CanvasRenderer::ReduceRasterizationFlagCount();
 
   application.SendNotification();
   application.Render();
 
   // Check whether the canvasView is not rasterized again.
+  // Note that it could be trigger if latest rasterize callback finished before we mark result as true.
+  // So we have to consume result one time.
+  if(Test::WaitForEventThreadTrigger(1, 0))
+  {
+    Test::CanvasRenderer::ReduceRasterizationFlagCount();
+  }
   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 0), false, TEST_LOCATION);
 
   DALI_TEST_EQUALS(Test::CanvasRenderer::IsRasterizationCalled(), false, TEST_LOCATION);