X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-factory-impl.cpp;h=07e1ec9f81ef94bc8c735b4024df0e4c4eb0f532;hb=82442f05b91524bdc363c0768407b811b9a794fa;hp=57290a10848fc80a4bdf667e4116b39d56cceb57;hpb=afc7b4cbc280d4a7e2cacf83cf43886a93c1770f;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/visual-factory-impl.cpp b/dali-toolkit/internal/visuals/visual-factory-impl.cpp index 57290a1..07e1ec9 100644 --- a/dali-toolkit/internal/visuals/visual-factory-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-factory-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -19,6 +19,7 @@ // EXTERNAL INCLUDES #include +#include #include #include #include @@ -26,6 +27,7 @@ // INTERNAL INCLUDES #include +#include #include #include #include @@ -80,6 +82,7 @@ VisualFactory::VisualFactory(bool debugEnabled) mImageVisualShaderFactory(), mTextVisualShaderFactory(), mSlotDelegate(this), + mIdleCallback(nullptr), mDebugEnabled(debugEnabled), mPreMultiplyOnLoad(true) { @@ -87,6 +90,12 @@ VisualFactory::VisualFactory(bool debugEnabled) VisualFactory::~VisualFactory() { + if(mIdleCallback && Adaptor::IsAvailable()) + { + // Removes the callback from the callback manager in case the control is destroyed before the callback is executed. + Adaptor::Get().RemoveIdle(mIdleCallback); + mIdleCallback = nullptr; + } } void VisualFactory::OnStyleChangedSignal(Toolkit::StyleManager styleManager, StyleChange::Type type) @@ -332,18 +341,18 @@ Toolkit::Visual::Base VisualFactory::CreateVisual(const std::string& url, ImageD case VisualUrl::TVG: case VisualUrl::SVG: { - visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl); + visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size); break; } case VisualUrl::GIF: case VisualUrl::WEBP: { - visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl); + visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size); break; } case VisualUrl::JSON: { - visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl); + visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size); break; } case VisualUrl::REGULAR_IMAGE: @@ -377,6 +386,27 @@ bool VisualFactory::GetPreMultiplyOnLoad() const return mPreMultiplyOnLoad; } +void VisualFactory::DiscardVisual(Toolkit::Visual::Base visual) +{ + mDiscardedVisuals.emplace_back(visual); + + RegisterDiscardCallback(); +} + +void VisualFactory::UsePreCompiledShader() +{ + if(mPrecompiledShaderRequested) + { + return; + } + mPrecompiledShaderRequested = true; + + RawShaderData rawShaderData; + Integration::ShaderPrecompiler::Get().Enable(); + GetImageVisualShaderFactory().GetPrecompiledShader(rawShaderData); + Integration::ShaderPrecompiler::Get().SavePrecomipleShaderList(rawShaderData); +} + Internal::TextureManager& VisualFactory::GetTextureManager() { return GetFactoryCache().GetTextureManager(); @@ -390,9 +420,8 @@ void VisualFactory::SetBrokenImageUrl(Toolkit::StyleManager& styleManager) if(styleManager) { - customBrokenImageUrlList = Toolkit::DevelStyleManager::GetBrokenImageUrlList(styleManager); - const Property::Map& config = Toolkit::DevelStyleManager::GetConfigurations(styleManager); - const auto brokenImageUrlValue = config.Find("brokenImageUrl", Property::Type::STRING); + customBrokenImageUrlList = Toolkit::DevelStyleManager::GetBrokenImageUrlList(styleManager); + const auto brokenImageUrlValue = Toolkit::DevelStyleManager::GetConfigurations(styleManager).Find("brokenImageUrl", Property::Type::STRING); if(brokenImageUrlValue) { brokenImageUrlValue->Get(brokenImageUrl); @@ -416,6 +445,9 @@ Internal::VisualFactoryCache& VisualFactory::GetFactoryCache() } SetBrokenImageUrl(styleManager); } + + //UsePreCompiledShader(); // Call forcelly + return *mFactoryCache; } @@ -437,6 +469,31 @@ TextVisualShaderFactory& VisualFactory::GetTextVisualShaderFactory() return *mTextVisualShaderFactory; } +void VisualFactory::OnDiscardCallback() +{ + mIdleCallback = nullptr; + + // Discard visual now. + mDiscardedVisuals.clear(); +} + +void VisualFactory::RegisterDiscardCallback() +{ + if(!mIdleCallback && Adaptor::IsAvailable()) + { + // The callback manager takes the ownership of the callback object. + mIdleCallback = MakeCallback(this, &VisualFactory::OnDiscardCallback); + + Adaptor& adaptor = Adaptor::Get(); + + if(!adaptor.AddIdle(mIdleCallback, false)) + { + // Fail to add idle. (Maybe adaptor is paused.) + mIdleCallback = nullptr; + } + } +} + } // namespace Internal } // namespace Toolkit