/*
- * 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
{
bool Rasterize()
{
- gRasterizeCalled = true;
+ ++gRasterizeCalledCount;
return gRasterizeResult;
}
{
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
#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.
// 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.
/*
- * 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.
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();
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();
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();
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);
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);