[Tizen] (Vector) Use Processor to reduce delay
authorJiyun Yang <ji.yang@samsung.com>
Tue, 5 Nov 2019 04:18:56 +0000 (13:18 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Tue, 5 Nov 2019 04:18:56 +0000 (13:18 +0900)
This reverts commit 273caef33139ed32833d98938a032f9204e20857.

dali-extension/vector-animation-renderer/tizen-vector-animation-renderer.cpp
dali-extension/vector-animation-renderer/tizen-vector-animation-renderer.h

index 416041d..c57f9f1 100755 (executable)
@@ -21,6 +21,7 @@
 // EXTERNAL INCLUDES
 #include <dali/public-api/object/property-array.h>
 #include <dali/integration-api/debug.h>
+#include <dali/integration-api/adaptors/adaptor.h>
 #include <dali/devel-api/adaptor-framework/native-image-source-queue.h>
 #include <dali/devel-api/images/native-image-interface-extension.h>
 #include <cstring> // for strlen()
@@ -67,7 +68,8 @@ TizenVectorAnimationRenderer::TizenVectorAnimationRenderer()
   mDefaultHeight( 0 ),
   mFrameRate( 60.0f ),
   mResourceReady( false ),
-  mShaderChanged( false )
+  mShaderChanged( false ),
+  mResourceReadyTriggered( false )
 {
 }
 
@@ -76,6 +78,11 @@ TizenVectorAnimationRenderer::~TizenVectorAnimationRenderer()
   Dali::Mutex::ScopedLock lock( mMutex );
 
   ResetBuffers();
+
+  if( Adaptor::IsAvailable() )
+  {
+    Adaptor::Get().UnregisterProcessor( *this );
+  }
 }
 
 bool TizenVectorAnimationRenderer::Initialize( const std::string& url )
@@ -97,6 +104,8 @@ bool TizenVectorAnimationRenderer::Initialize( const std::string& url )
   mDefaultWidth = static_cast< uint32_t >( w );
   mDefaultHeight = static_cast< uint32_t >( h );
 
+  Adaptor::Get().RegisterProcessor( *this );
+
   DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::Initialize: file [%s] [%p]\n", url.c_str(), this );
 
   return true;
@@ -157,10 +166,10 @@ void TizenVectorAnimationRenderer::SetSize( uint32_t width, uint32_t height )
 
 bool TizenVectorAnimationRenderer::Render( uint32_t frameNumber )
 {
+  Dali::Mutex::ScopedLock lock( mMutex );
+
   if( tbm_surface_queue_can_dequeue( mTbmQueue, 0 ) )
   {
-    Dali::Mutex::ScopedLock lock( mMutex );
-
     tbm_surface_h tbmSurface;
 
     if( tbm_surface_queue_dequeue( mTbmQueue, &tbmSurface ) != TBM_SURFACE_QUEUE_ERROR_NONE )
@@ -219,17 +228,16 @@ bool TizenVectorAnimationRenderer::Render( uint32_t frameNumber )
       mRenderedTexture = mTexture;
       mResourceReady = true;
 
+      mResourceReadyTriggered = true;
       mResourceReadyTrigger->Trigger();
 
       DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::Render: Resource ready [current = %d] [%p]\n", frameNumber, this );
     }
-  }
-  else
-  {
-    return false;
+
+    return true;
   }
 
-  return true;
+  return false;
 }
 
 uint32_t TizenVectorAnimationRenderer::GetTotalFrameNumber() const
@@ -250,8 +258,10 @@ void TizenVectorAnimationRenderer::GetDefaultSize( uint32_t& width, uint32_t& he
   DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::GetDefaultSize: width = %d, height = %d [%p]\n", width, height, this );
 }
 
-void TizenVectorAnimationRenderer::GetLayerInfo( Property::Map& map ) const
+void TizenVectorAnimationRenderer::GetLayerInfo( Property::Map& map )
 {
+  Dali::Mutex::ScopedLock lock( mMutex );
+
   auto layerInfo = mVectorRenderer->layers();
 
   for( auto&& iter : layerInfo )
@@ -268,6 +278,11 @@ VectorAnimationRendererPlugin::UploadCompletedSignalType& TizenVectorAnimationRe
   return mUploadCompletedSignal;
 }
 
+void TizenVectorAnimationRenderer::Process()
+{
+  OnResourceReady();
+}
+
 void TizenVectorAnimationRenderer::SetShader()
 {
   if( mShaderChanged )
@@ -341,16 +356,23 @@ void TizenVectorAnimationRenderer::ResetBuffers()
 
 void TizenVectorAnimationRenderer::OnResourceReady()
 {
-  DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::OnResourceReady: Set Texture [%p]\n", this );
+  Dali::Mutex::ScopedLock lock( mMutex );
 
-  // Set texture
-  if( mRenderer )
+  if( mResourceReadyTriggered )
   {
-    TextureSet textureSet = mRenderer.GetTextures();
-    textureSet.SetTexture( 0, mRenderedTexture );
-  }
+    DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::OnResourceReady: Set Texture [%p]\n", this );
 
-  mUploadCompletedSignal.Emit();
+    // Set texture
+    if( mRenderer )
+    {
+      TextureSet textureSet = mRenderer.GetTextures();
+      textureSet.SetTexture( 0, mRenderedTexture );
+    }
+
+    mResourceReadyTriggered = false;
+
+    mUploadCompletedSignal.Emit();
+  }
 }
 
 } // namespace Plugin
index 9b61e01..e9f6213 100755 (executable)
  */
 
 // EXTERNAL INCLUDES
-#include <dali/public-api/math/uint-16-pair.h>
 #include <dali/public-api/common/vector-wrapper.h>
 #include <dali/devel-api/threading/mutex.h>
 #include <dali/devel-api/adaptor-framework/event-thread-callback.h>
 #include <dali/devel-api/adaptor-framework/native-image-source-queue.h>
 #include <dali/devel-api/adaptor-framework/vector-animation-renderer-plugin.h>
+#include <dali/integration-api/processor-interface.h>
 #include <memory>
 #include <rlottie.h>
 #include <tbm_surface.h>
@@ -39,7 +39,7 @@ namespace Plugin
 /**
  * @brief Implementation of the Tizen vector animation renderer class which has Tizen platform dependency.
  */
-class TizenVectorAnimationRenderer : public Dali::VectorAnimationRendererPlugin
+class TizenVectorAnimationRenderer : public Dali::VectorAnimationRendererPlugin, public Integration::Processor
 {
 public:
 
@@ -91,13 +91,20 @@ public:
   /**
    * @copydoc Dali::VectorAnimationRendererPlugin::GetLayerInfo()
    */
-  void GetLayerInfo( Property::Map& map ) const override;
+  void GetLayerInfo( Property::Map& map ) override;
 
   /**
    * @copydoc Dali::VectorAnimationRendererPlugin::UploadCompletedSignal()
    */
   UploadCompletedSignalType& UploadCompletedSignal() override;
 
+protected: // Implementation of Processor
+
+  /**
+   * @copydoc Dali::Integration::Processor::Process()
+   */
+  void Process() override;
+
 private:
 
   /**
@@ -138,6 +145,7 @@ private:
   float                                  mFrameRate;             ///< The frame rate of the content
   bool                                   mResourceReady;         ///< Whether the resource is ready
   bool                                   mShaderChanged;         ///< Whether the shader is changed to support native image
+  bool                                   mResourceReadyTriggered;///< Whether the resource ready is triggered
 };
 
 } // namespace Plugin