Merge "Usage of CustomeView for ScrollContainer and code refactoring accordingly...
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / toolkit-event-thread-callback.cpp
index f77cdde..b809b87 100644 (file)
 #include <cstddef>
 #include <semaphore.h>
 #include <math.h>
+#include <ctime>
 #include <climits>
+#include <cstdio>
+#include <unistd.h>
 
 namespace Dali
 {
@@ -63,14 +66,18 @@ void EventThreadCallback::Trigger()
   }
 }
 
-void EventThreadCallback::WaitingForTrigger(unsigned int count)
+bool EventThreadCallback::WaitingForTrigger(unsigned int count, unsigned int seconds)
 {
   if(  mImpl->triggeredCount >= count )
   {
-    return;
+    return true;
   }
+  struct timespec now;
+  clock_gettime( CLOCK_REALTIME, &now );
+  now.tv_sec += seconds;
   mImpl->expectedCount = count;
-  sem_wait( &(mImpl->mySemaphore) );
+  int error = sem_timedwait( &(mImpl->mySemaphore), &now );
+  return error != 0;
 }
 
 CallbackBase* EventThreadCallback::GetCallback()
@@ -84,3 +91,46 @@ EventThreadCallback* EventThreadCallback::Get()
 }
 
 }
+
+namespace Test
+{
+
+bool WaitForEventThreadTrigger( int triggerCount )
+{
+  bool success = true;
+  const int TEST_TIMEOUT(30);
+
+  struct timespec startTime;
+  struct timespec now;
+  clock_gettime( CLOCK_REALTIME, &startTime );
+  now.tv_sec = startTime.tv_sec;
+  now.tv_nsec = startTime.tv_nsec;
+
+  Dali::EventThreadCallback* eventTrigger = NULL;
+  while( eventTrigger == NULL )
+  {
+    eventTrigger = Dali::EventThreadCallback::Get();
+    clock_gettime( CLOCK_REALTIME, &now );
+    if( now.tv_sec - startTime.tv_sec > TEST_TIMEOUT )
+    {
+      success = false;
+      break;
+    }
+    usleep(10);
+  }
+  if( eventTrigger != NULL )
+  {
+    Dali::CallbackBase* callback = eventTrigger->GetCallback();
+    eventTrigger->WaitingForTrigger( triggerCount, TEST_TIMEOUT - (now.tv_sec - startTime.tv_sec) );
+    Dali::CallbackBase::Execute( *callback );
+  }
+
+  clock_gettime( CLOCK_REALTIME, &now );
+  if( now.tv_sec > startTime.tv_sec + 1 )
+  {
+    fprintf(stderr, "WaitForEventThreadTrigger took %ld seconds\n", now.tv_sec - startTime.tv_sec );
+  }
+  return success;
+}
+
+}