From: Eunki Hong Date: Sat, 24 May 2025 16:44:06 +0000 (+0900) Subject: Fix randomly failed UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02 X-Git-Tag: dali_2.4.21~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F45%2F324745%2F3;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Fix randomly failed UtcDaliCanvasViewRasterizationRequestIfRasterizeFailed02 Sometimes, CanvasRenderer's task completed before we reset the flags. Change-Id: I0594031989336e66f620dc2dc13b5feb887a6bbb Signed-off-by: Eunki Hong --- diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.cpp index a0b3564bd1..49cca8dac4 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.cpp @@ -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. @@ -22,13 +22,15 @@ #include #include #include + +#include #include #include 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 diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.h index 1087fb697a..89c39156ec 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.h @@ -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. diff --git a/automated-tests/src/dali-toolkit/utc-Dali-CanvasView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-CanvasView.cpp index e0bbdb4cb6..83c3e59a16 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-CanvasView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-CanvasView.cpp @@ -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);