Improve ThreadSynchronization Logging (enable release logging if required)
[platform/core/uifw/dali-adaptor.git] / adaptors / base / vsync-notifier.h
index 87bb0fe..fd6bdc3 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_INTERNAL_VSYNC_NOTIFIER_H__
 
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2015 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.
  *
  */
 
-namespace boost
-{
-
-class thread;
-
-} // namespace boost
+// EXTERNAL INCLUDES
+#include <pthread.h>
 
 namespace Dali
 {
@@ -43,13 +39,13 @@ namespace Adaptor
 {
 
 class VSyncMonitorInterface;
-class UpdateRenderSynchronization;
+class ThreadSynchronization;
 class EnvironmentOptions;
 class AdaptorInternalServices;
 
 /**
- * Implements a simple class that monitors vertical blanks from libdrm
- * and sends a notification to Core.
+ * Implements a simple class that either monitors vertical blanks from libdrm, or manages
+ * a software timer to handle syncing.
  */
 class VSyncNotifier
 {
@@ -62,7 +58,7 @@ public:
    * @param[in] adaptorInterfaces base adaptor interface
    * @param[in] environmentOptions environment options
    */
-  VSyncNotifier( UpdateRenderSynchronization& sync,
+  VSyncNotifier( ThreadSynchronization& sync,
                  AdaptorInternalServices& adaptorInterfaces,
                  const EnvironmentOptions& environmentOptions);
 
@@ -89,14 +85,25 @@ private:
    */
   void Run();
 
+  /**
+   * Helper for the thread calling the entry function
+   * @param[in] This A pointer to the current VSyncNotifier object
+   */
+  static inline void* InternalThreadEntryFunc( void* This )
+  {
+    ( static_cast<VSyncNotifier*>( This ) )->Run();
+    return NULL;
+  }
+
 private:
 
-  UpdateRenderSynchronization&        mUpdateRenderSync;    ///< Used to synchronize the update, render & vsync threads
-  Dali::Integration::Core&            mCore;                ///< Dali core reference
-  Integration::PlatformAbstraction&   mPlatformAbstraction; ///< The platform abstraction for retrieving the current time etc.
-  VSyncMonitorInterface*              mVSyncMonitor;        ///< VSyncMonitor interface
-  boost::thread*                      mThread;              ///< The actual thread.
-  const EnvironmentOptions&           mEnvironmentOptions;  ///< Environment options
+  ThreadSynchronization&              mThreadSynchronization;   ///< Used to synchronize all the threads
+  Dali::Integration::Core&            mCore;                    ///< Dali core reference
+  Integration::PlatformAbstraction&   mPlatformAbstraction;     ///< The platform abstraction for retrieving the current time etc.
+  VSyncMonitorInterface*              mVSyncMonitor;            ///< VSyncMonitor interface
+  pthread_t*                          mThread;                  ///< The actual thread.
+  const EnvironmentOptions&           mEnvironmentOptions;      ///< Environment options
+  unsigned int                        mNumberOfVSyncsPerRender; ///< How many frames for each update/render cycle.
 
 }; // class VSyncNotifier