From: JunsuChoi Date: Fri, 29 Oct 2021 06:05:19 +0000 (+0900) Subject: CanvasRenderer: Use NativeImageSourceQueue in Tizen profile X-Git-Tag: dali_2.0.52~7^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=commitdiff_plain;h=4af52df544d8f96c9fe6fb2977572f2faf0f4b8a CanvasRenderer: Use NativeImageSourceQueue in Tizen profile For performance, instead of PixelData Change-Id: Ia20e249a271ba9ea9cbf91bc020b18ce194c4260 --- diff --git a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp index bc45837..ba9f1af 100644 --- a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp +++ b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp @@ -23,12 +23,10 @@ #include // INTERNAL INCLUDES -#include #include #include #include #include -#include namespace Dali { @@ -56,11 +54,11 @@ CanvasRendererTizen* CanvasRendererTizen::New(const Vector2& viewBox) CanvasRendererTizen::CanvasRendererTizen(const Vector2& viewBox) : #ifdef THORVG_SUPPORT - mPixelBuffer(nullptr), mRasterizedTexture(), mMutex(), mTvgCanvas(nullptr), mTvgRoot(nullptr), + mNativeImageQueue(nullptr), #endif mSize(Vector2::ZERO), mViewBox(Vector2::ZERO), @@ -126,11 +124,8 @@ bool CanvasRendererTizen::Commit() } else { - if(!mPixelBuffer || !mPixelBuffer.GetBuffer()) - { - MakeTargetBuffer(mSize); - mChanged = false; - } + MakeTargetBuffer(mSize); + mChanged = false; } if(mTvgCanvas->clear() != tvg::Result::Success) @@ -168,25 +163,18 @@ bool CanvasRendererTizen::Commit() Dali::Texture CanvasRendererTizen::GetRasterizedTexture() { #ifdef THORVG_SUPPORT - if(mPixelBuffer) + if(mNativeImageQueue) { - auto width = mPixelBuffer.GetWidth(); - auto height = mPixelBuffer.GetHeight(); - if(width <= 0 || height <= 0) + if(!mRasterizedTexture) { - return Dali::Texture(); + mRasterizedTexture = Dali::Texture::New(*mNativeImageQueue); } - - Dali::PixelData pixelData = Devel::PixelBuffer::Convert(mPixelBuffer); - - if(!mRasterizedTexture || mRasterizedTexture.GetWidth() != width || mRasterizedTexture.GetHeight() != height) - { - mRasterizedTexture = Dali::Texture::New(Dali::TextureType::TEXTURE_2D, Dali::Pixel::BGRA8888, width, height); - } - - mRasterizedTexture.Upload(pixelData); + return mRasterizedTexture; + } + else + { + return Dali::Texture(); } - return mRasterizedTexture; #else return Dali::Texture(); #endif @@ -336,14 +324,34 @@ bool CanvasRendererTizen::Rasterize() #ifdef THORVG_SUPPORT Mutex::ScopedLock lock(mMutex); - if(mTvgCanvas->draw() != tvg::Result::Success) + if(mNativeImageQueue && mNativeImageQueue->CanDequeueBuffer()) + { + uint32_t width, height, stride; + uint8_t* buffer = mNativeImageQueue->DequeueBuffer(width, height, stride); + if(!buffer) + { + DALI_LOG_ERROR("Pixel buffer create to fail [%p]\n", this); + return false; + } + + mTvgCanvas->target(reinterpret_cast(buffer), width, width, height, tvg::SwCanvas::ARGB8888); + + if(mTvgCanvas->draw() != tvg::Result::Success) + { + DALI_LOG_ERROR("ThorVG Draw fail [%p]\n", this); + mNativeImageQueue->EnqueueBuffer(buffer); + return false; + } + + mTvgCanvas->sync(); + + mNativeImageQueue->EnqueueBuffer(buffer); + } + else { - DALI_LOG_ERROR("ThorVG Draw fail [%p]\n", this); return false; } - mTvgCanvas->sync(); - return true; #else return false; @@ -432,18 +440,14 @@ const Vector2& CanvasRendererTizen::GetViewBox() void CanvasRendererTizen::MakeTargetBuffer(const Vector2& size) { #ifdef THORVG_SUPPORT - mPixelBuffer = Devel::PixelBuffer::New(size.width, size.height, Dali::Pixel::BGRA8888); - - unsigned char* pBuffer; - pBuffer = mPixelBuffer.GetBuffer(); - - if(!pBuffer) + if(!mNativeImageQueue) { - DALI_LOG_ERROR("Pixel buffer create to fail [%p]\n", this); - return; + mNativeImageQueue = Dali::NativeImageSourceQueue::New(size.width, size.height, Dali::NativeImageSourceQueue::ColorFormat::RGBA8888); + } + else if(size.width != mSize.width || size.height != mSize.height) + { + mNativeImageQueue->SetSize(static_cast(size.width), static_cast(size.height)); } - - mTvgCanvas->target(reinterpret_cast(pBuffer), size.width, size.width, size.height, tvg::SwCanvas::ARGB8888); #endif } diff --git a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h index 88a43ed..b200585 100644 --- a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h +++ b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h @@ -29,9 +29,9 @@ // INTERNAL INCLUDES #include #include +#include #include #include -#include namespace Dali { @@ -164,11 +164,11 @@ private: private: #ifdef THORVG_SUPPORT - Devel::PixelBuffer mPixelBuffer; - Dali::Texture mRasterizedTexture; - Dali::Mutex mMutex; - std::unique_ptr mTvgCanvas; - tvg::Scene* mTvgRoot; + Dali::Texture mRasterizedTexture; + Dali::Mutex mMutex; + std::unique_ptr mTvgCanvas; + tvg::Scene* mTvgRoot; + Dali::NativeImageSourceQueuePtr mNativeImageQueue; #endif DrawableGroup::DrawableVector mDrawables;