(Vector) Support EncodedImageBuffer can use for vector image
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / svg / svg-task.cpp
index 5bf92a4..5f8ed8c 100644 (file)
@@ -16,7 +16,7 @@
  */
 
 // CLASS HEADER
-#include "svg-task.h"
+#include <dali-toolkit/internal/visuals/svg/svg-task.h>
 
 // EXTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/file-loader.h>
@@ -64,9 +64,10 @@ VectorImageRenderer SvgTask::GetRenderer()
   return mVectorRenderer;
 }
 
-SvgLoadingTask::SvgLoadingTask(VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, CallbackBase* callback)
+SvgLoadingTask::SvgLoadingTask(VectorImageRenderer vectorRenderer, const VisualUrl& url, EncodedImageBuffer encodedImageBuffer, float dpi, CallbackBase* callback)
 : SvgTask(vectorRenderer, callback, url.GetProtocolType() == VisualUrl::ProtocolType::REMOTE ? AsyncTask::PriorityType::LOW : AsyncTask::PriorityType::HIGH),
   mImageUrl(url),
+  mEncodedImageBuffer(encodedImageBuffer),
   mDpi(dpi)
 {
 }
@@ -89,7 +90,8 @@ void SvgLoadingTask::Process()
   {
     std::ostringstream oss;
     oss << "[url:" << mImageUrl.GetUrl() << "]";
-    DALI_TRACE_BEGIN_WITH_MESSAGE(gTraceFilter, "DALI_SVG_LOADING_TASK", oss.str().c_str());
+    DALI_TRACE_BEGIN(gTraceFilter, "DALI_SVG_LOADING_TASK");
+    DALI_LOG_RELEASE_INFO("BEGIN: DALI_SVG_LOADING_TASK %s", oss.str().c_str());
   }
 #endif
 
@@ -97,25 +99,35 @@ void SvgLoadingTask::Process()
 
   Dali::Vector<uint8_t> buffer;
 
-  if(!mImageUrl.IsLocalResource())
+  if(mEncodedImageBuffer)
   {
-    if(!Dali::FileLoader::DownloadFileSynchronously(mImageUrl.GetUrl(), buffer))
+    // Copy raw buffer.
+    // TODO : Can't we load svg without copy buffer in future?
+    buffer = mEncodedImageBuffer.GetRawBuffer();
+
+    // We don't need to hold image buffer anymore.
+    mEncodedImageBuffer.Reset();
+  }
+  else if(mImageUrl.IsLocalResource())
+  {
+    if(!Dali::FileLoader::ReadFile(mImageUrl.GetUrl(), buffer))
     {
-      DALI_LOG_ERROR("Failed to download file! [%s]\n", mImageUrl.GetUrl().c_str());
+      DALI_LOG_ERROR("Failed to read file! [%s]\n", mImageUrl.GetUrl().c_str());
       loadFailed = true;
     }
   }
   else
   {
-    if(!Dali::FileLoader::ReadFile(mImageUrl.GetUrl(), buffer))
+    if(!Dali::FileLoader::DownloadFileSynchronously(mImageUrl.GetUrl(), buffer))
     {
-      DALI_LOG_ERROR("Failed to read file! [%s]\n", mImageUrl.GetUrl().c_str());
+      DALI_LOG_ERROR("Failed to download file! [%s]\n", mImageUrl.GetUrl().c_str());
       loadFailed = true;
     }
   }
 
   if(!loadFailed)
   {
+    buffer.Reserve(buffer.Count() + 1u);
     buffer.PushBack('\0');
 
     if(!mVectorRenderer.Load(buffer, mDpi))
@@ -132,7 +144,8 @@ void SvgLoadingTask::Process()
     std::ostringstream oss;
     oss << "[success:" << mHasSucceeded << " ";
     oss << "url:" << mImageUrl.GetUrl() << "]";
-    DALI_TRACE_END_WITH_MESSAGE(gTraceFilter, "DALI_SVG_LOADING_TASK", oss.str().c_str());
+    DALI_TRACE_END(gTraceFilter, "DALI_SVG_LOADING_TASK");
+    DALI_LOG_RELEASE_INFO("END: DALI_SVG_LOADING_TASK %s", oss.str().c_str());
   }
 #endif
 }