application.Render();
// Trigger count is 2 - load & render a frame
+ tet_printf("First upload. Check load + render\n");
DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
propertyMap.Clear();
application.SendNotification();
application.Render();
- // Trigger count is 1 - animation finished
- DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ // Trigger count is 2 - animation finished + force render request
+ tet_printf("Wait until animation finished. Check render finished + force render trigger\n");
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
Property::Value* value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
application.SendNotification();
application.Render();
- // Trigger count is 1 - animation finished
- DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ // Trigger count is 2 - animation finished + force render request
+ tet_printf("Wait until animation finished again. Check render finished + force render trigger\n");
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
application.SendNotification();
application.Render();
+ // Trigger count is 1 - force render request due to pause
+ tet_printf("Check force render trigger due to pause action\n");
DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
application.SendNotification();
application.Render();
- DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ // Trigger count is 2 - animation finished + force render request
+ tet_printf("Check animation stop + force render trigger\n");
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
mTraceFactory(Dali::Adaptor::Get().GetTraceFactory()),
mNeedToSleep(false),
mDestroyThread(false),
- mEventTriggered(false),
mForceRenderOnce(false)
{
mAsyncTaskManager = Dali::AsyncTaskManager::Get();
Mutex::ScopedLock lock(mEventTriggerMutex);
if(DALI_LIKELY(!mDestroyThread))
{
+ DALI_LOG_DEBUG_INFO("VectorAnimationThread::AddEventTriggerCallback [%p, %u]\n", callback, argument);
+
+ DALI_ASSERT_ALWAYS(callback && "Someone register null callback! Please check the callstack\n");
+
mTriggerEventCallbacks.emplace_back(callback, argument);
- if(!mEventTriggered)
+ // Note : Always trigger event since eventfd might not emit triggered callback sometimes.
+ // Let we keep this logic until fd relative bug fixed. 2024-12-16 eunkiki.hong
+ if(DALI_LIKELY(mEventTrigger))
{
- DALI_LOG_DEBUG_INFO("VectorAnimationThread::mEventTrigger Triggered!\n");
mEventTrigger->Trigger();
- mEventTriggered = true;
}
}
}
{
mForceRenderOnce = true;
- if(!mEventTriggered)
+ DALI_LOG_DEBUG_INFO("VectorAnimationThread::mEventTrigger Triggered!\n");
+ // Note : Always trigger event since eventfd might not emit triggered callback sometimes.
+ // Let we keep this logic until fd relative bug fixed. 2024-12-16 eunkiki.hong
+ if(DALI_LIKELY(mEventTrigger))
{
- DALI_LOG_DEBUG_INFO("VectorAnimationThread::mEventTrigger Triggered!\n");
mEventTrigger->Trigger();
- mEventTriggered = true;
}
}
}
mTriggerEventCallbacks.erase(iter);
return callbackIdPair;
}
- mEventTriggered = false;
}
return std::make_pair(nullptr, 0u);
}