From 17fbf6301800ee1ddd3d55ff4f66a2a81da77332 Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Fri, 12 Aug 2022 18:06:35 +0900 Subject: [PATCH] (Vector) Support SYNCHRONOUS_LOADING By deault, SYNCHRONOUS_LOADING is true not to break previous behavior Change-Id: I1145c89c22dfb10d895c5fb39d0d35a4a071d62d --- .../utc-Dali-Visuals-internal.cpp | 3 +- .../utc-Dali-AnimatedVectorImageVisual.cpp | 98 +++++++++++++--------- .../src/dali-toolkit/utc-Dali-Visual.cpp | 3 + .../animated-vector-image-visual.cpp | 43 +++++++--- .../vector-animation-task.cpp | 38 ++++++--- .../animated-vector-image/vector-animation-task.h | 6 +- 6 files changed, 127 insertions(+), 64 deletions(-) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Visuals-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Visuals-internal.cpp index 9f4cd73..4134db6 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Visuals-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Visuals-internal.cpp @@ -194,7 +194,8 @@ int UtcDaliAnimatedVectorImageVisualSetProperties(void) propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) .Add(DevelImageVisual::Property::LOOP_COUNT, 3) - .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.2f, 0.8f)); + .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.2f, 0.8f)) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp index 4ca6308..09a4dd4 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp @@ -88,8 +88,8 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void) application.SendNotification(); application.Render(); - // Trigger count is 2 - load & render a frame - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + // Trigger count is 1 - render a frame + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); // renderer is added to actor DALI_TEST_CHECK(actor.GetRendererCount() == 1u); @@ -110,7 +110,8 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -154,7 +155,8 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void) .Add(DevelImageVisual::Property::LOOP_COUNT, 3) .Add(DevelImageVisual::Property::PLAY_RANGE, playRange) .Add(DevelVisual::Property::CORNER_RADIUS, 50.0f) - .Add(DevelVisual::Property::BORDERLINE_WIDTH, 20.0f); + .Add(DevelVisual::Property::BORDERLINE_WIDTH, 20.0f) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -207,7 +209,8 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void) .Add("cornerRadius", cornerRadius) .Add("borderlineWidth", borderlineWidth) .Add("borderlineColor", borderlineColor) - .Add("borderlineOffset", borderlineOffset); + .Add("borderlineOffset", borderlineOffset) + .Add("synchronousLoading", true); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -221,8 +224,8 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void) application.SendNotification(); application.Render(); - // Trigger count is 2 - load & render a frame - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + // Trigger count is 1 - render a frame + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); // renderer is added to actor DALI_TEST_CHECK(actor.GetRendererCount() == 1u); @@ -312,7 +315,8 @@ int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void) .Add(DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE) .Add(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth) .Add(DevelVisual::Property::BORDERLINE_COLOR, borderlineColor) - .Add(DevelVisual::Property::BORDERLINE_OFFSET, borderlineOffset); + .Add(DevelVisual::Property::BORDERLINE_OFFSET, borderlineOffset) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); // request AnimatedVectorImageVisual with a property map VisualFactory factory = VisualFactory::Get(); @@ -423,7 +427,8 @@ int UtcDaliAnimatedVectorImageVisualPlayback(void) Visual::Base visual = factory.CreateVisual( Property::Map() .Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false)); DummyControl dummyControl = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); @@ -570,8 +575,8 @@ int UtcDaliAnimatedVectorImageVisualCustomShader(void) application.SendNotification(); application.Render(); - // Trigger count is 2 - load & render a frame - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + // Trigger count is 1 - render a frame + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); Renderer renderer = dummy.GetRendererAt(0); Shader shader2 = renderer.GetShader(); @@ -597,7 +602,11 @@ int UtcDaliAnimatedVectorImageVisualNaturalSize(void) tet_infoline("UtcDaliAnimatedVectorImageVisualNaturalSize"); VisualFactory factory = VisualFactory::Get(); - Visual::Base visual = factory.CreateVisual(TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions()); + Visual::Base visual = factory.CreateVisual( + Property::Map() + .Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false)); DALI_TEST_CHECK(visual); DummyControl actor = DummyControl::New(true); @@ -639,7 +648,8 @@ int UtcDaliAnimatedVectorImageVisualLoopCount(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) - .Add(DevelImageVisual::Property::LOOP_COUNT, 3); + .Add(DevelImageVisual::Property::LOOP_COUNT, 3) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -683,7 +693,8 @@ int UtcDaliAnimatedVectorImageVisualPlayRange(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) - .Add(DevelImageVisual::Property::PLAY_RANGE, array); + .Add(DevelImageVisual::Property::PLAY_RANGE, array) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -812,7 +823,8 @@ int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) - .Add(DevelImageVisual::Property::PLAY_RANGE, array); + .Add(DevelImageVisual::Property::PLAY_RANGE, array) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -938,8 +950,8 @@ int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void) application.SendNotification(); application.Render(); - // Wait for animation finish - load, render, finish - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION); + // Wait for animation finish - render, finish + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); Property::Map map = actor.GetProperty(DummyControl::Property::TEST_VISUAL); Property::Value* value = map.Find(DevelImageVisual::Property::PLAY_STATE); @@ -958,7 +970,8 @@ int UtcDaliAnimatedVectorImageVisualJumpTo(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) - .Add(DevelImageVisual::Property::LOOP_COUNT, 3); + .Add(DevelImageVisual::Property::LOOP_COUNT, 3) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1090,7 +1103,8 @@ int UtcDaliAnimatedVectorImageVisualUpdateProperty(void) propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) .Add(DevelImageVisual::Property::LOOP_COUNT, 3) - .Add(DevelImageVisual::Property::PLAY_RANGE, playRange); + .Add(DevelImageVisual::Property::PLAY_RANGE, playRange) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1209,7 +1223,8 @@ int UtcDaliAnimatedVectorImageVisualStopBehavior(void) propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) .Add(DevelImageVisual::Property::LOOP_COUNT, 3) - .Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME); + .Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1317,7 +1332,8 @@ int UtcDaliAnimatedVectorImageVisualLoopingMode(void) .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) .Add(DevelImageVisual::Property::LOOP_COUNT, 3) .Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME) - .Add(DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE); + .Add(DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1408,8 +1424,8 @@ int UtcDaliAnimatedVectorImageVisualPropertyNotification(void) application.SendNotification(); application.Render(); - // Trigger count is 2 - load & render a frame - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + // Trigger count is 1 - render a frame + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); Renderer renderer = actor.GetRendererAt(0u); DALI_TEST_CHECK(renderer); @@ -1488,7 +1504,8 @@ int UtcDaliAnimatedVectorImageVisualMultipleInstances(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual1 = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual1); @@ -1504,7 +1521,8 @@ int UtcDaliAnimatedVectorImageVisualMultipleInstances(void) propertyMap.Clear(); propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual2 = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual2); @@ -1561,7 +1579,8 @@ int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1628,8 +1647,8 @@ int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void) application.SendNotification(); application.Render(); - // Trigger count is 2 - load & render a frame - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + // Trigger count is 1 - render a frame + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); Property::Map attributes; DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes); @@ -1666,7 +1685,8 @@ int UtcDaliAnimatedVectorImageVisualInvalidFile01(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1724,9 +1744,6 @@ int UtcDaliAnimatedVectorImageVisualInvalidFile02(void) application.SendNotification(); application.Render(); - // Trigger count is 1 - load - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); - // Add to the Scene after loading application.GetScene().Add(actor); @@ -1755,7 +1772,8 @@ int UtcDaliAnimatedVectorImageVisualInvalidFile03(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1793,7 +1811,8 @@ int UtcDaliAnimatedVectorImageVisualFrameDrops(void) Property::Map propertyMap; propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) - .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP); + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); DALI_TEST_CHECK(visual); @@ -1856,11 +1875,6 @@ int UtcDaliAnimatedVectorImageVisualSize(void) application.GetScene().Add(actor); application.SendNotification(); - - // Trigger count is 1 - load - DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); - - application.SendNotification(); application.Render(); // Trigger count is 1 - resource ready @@ -1926,7 +1940,11 @@ int UtcDaliAnimatedVectorImageVisualDynamicProperty(void) tet_infoline("UtcDaliAnimatedVectorImageVisualDynamicProperty"); VisualFactory factory = VisualFactory::Get(); - Visual::Base visual = factory.CreateVisual(TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions()); + Visual::Base visual = factory.CreateVisual( + Property::Map() + .Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false)); DALI_TEST_CHECK(visual); DummyControl actor = DummyControl::New(true); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index dae8540..2035ed7 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -4182,6 +4182,7 @@ int UtcDaliVisualRoundedCorner(void) properties["cornerRadius"] = Vector4(1.0f, 100.0f, 10.0f, 0.1f); // Dummy Input properties["cornerRadius"] = cornerRadius; properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE; + properties["synchronousLoading"] = false; Visual::Base visual = factory.CreateVisual(properties); @@ -4559,6 +4560,7 @@ int UtcDaliVisualBorderline(void) properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth; properties["borderlineColor"] = borderlineColor; properties[DevelVisual::Property::BORDERLINE_OFFSET] = borderlineOffset; + properties[ImageVisual::Property::SYNCHRONOUS_LOADING] = false; Visual::Base visual = factory.CreateVisual(properties); @@ -5595,6 +5597,7 @@ int UtcDaliVisualGetVisualProperty07(void) Property::Map propertyMap; propertyMap.Insert(Visual::Property::TYPE, DevelVisual::Type::ANIMATED_VECTOR_IMAGE); propertyMap.Insert(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, false); Visual::Base animatedVectorVisual = factory.CreateVisual(propertyMap); diff --git a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp index 1f73f80..006554d 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp @@ -102,13 +102,8 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual(VisualFactoryCache& factory // the rasterized image is with pre-multiplied alpha format mImpl->mFlags |= Visual::Base::Impl::IS_PREMULTIPLIED_ALPHA; - mVectorAnimationTask->RequestLoad(mUrl.GetUrl()); - - mVectorAnimationTask->ResourceReadySignal().Connect(this, &AnimatedVectorImageVisual::OnResourceReady); - mVectorAnimationTask->SetAnimationFinishedCallback(new EventThreadCallback(MakeCallback(this, &AnimatedVectorImageVisual::OnAnimationFinished))); - - auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager(); - vectorAnimationManager.AddObserver(*this); + // By default, load a file synchronously + mImpl->mFlags |= Visual::Base::Impl::IS_SYNCHRONOUS_RESOURCE_LOADING; } AnimatedVectorImageVisual::~AnimatedVectorImageVisual() @@ -247,6 +242,10 @@ void AnimatedVectorImageVisual::DoSetProperties(const Property::Map& propertyMap { DoSetProperty(Toolkit::DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, keyValue.second); } + else if(keyValue.first == SYNCHRONOUS_LOADING) + { + DoSetProperty(Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING, keyValue.second); + } } } @@ -306,11 +305,35 @@ void AnimatedVectorImageVisual::DoSetProperty(Property::Index index, const Prope } break; } + case Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING: + { + bool sync = false; + if(value.Get(sync)) + { + if(sync) + { + mImpl->mFlags |= Visual::Base::Impl::IS_SYNCHRONOUS_RESOURCE_LOADING; + } + else + { + mImpl->mFlags &= ~Visual::Base::Impl::IS_SYNCHRONOUS_RESOURCE_LOADING; + } + } + break; + } } } void AnimatedVectorImageVisual::OnInitialize(void) { + mVectorAnimationTask->ResourceReadySignal().Connect(this, &AnimatedVectorImageVisual::OnResourceReady); + mVectorAnimationTask->SetAnimationFinishedCallback(new EventThreadCallback(MakeCallback(this, &AnimatedVectorImageVisual::OnAnimationFinished))); + + mVectorAnimationTask->RequestLoad(mUrl.GetUrl(), IsSynchronousLoadingRequired()); + + auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager(); + vectorAnimationManager.AddObserver(*this); + Shader shader = GenerateShader(); Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); @@ -337,7 +360,7 @@ void AnimatedVectorImageVisual::DoSetOnScene(Actor& actor) if(mLoadFailed) { Vector2 imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - mFactoryCache.UpdateBrokenImageRenderer(mImpl->mRenderer, imageSize); + mFactoryCache.UpdateBrokenImageRenderer(mImpl->mRenderer, imageSize, false); actor.AddRenderer(mImpl->mRenderer); ResourceReady(Toolkit::Visual::ResourceStatus::FAILED); } @@ -530,7 +553,7 @@ void AnimatedVectorImageVisual::OnResourceReady(VectorAnimationTask::ResourceSta else { Vector2 imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - mFactoryCache.UpdateBrokenImageRenderer(mImpl->mRenderer, imageSize); + mFactoryCache.UpdateBrokenImageRenderer(mImpl->mRenderer, imageSize, false); actor.AddRenderer(mImpl->mRenderer); ResourceReady(Toolkit::Visual::ResourceStatus::FAILED); } @@ -539,7 +562,7 @@ void AnimatedVectorImageVisual::OnResourceReady(VectorAnimationTask::ResourceSta } } - DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "Renderer is added (status = %d) [%p]\n", status, this); + DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "status = %d [%p]\n", status, this); } void AnimatedVectorImageVisual::OnAnimationFinished() diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp index a202747..01b6898 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp @@ -105,14 +105,17 @@ void VectorAnimationTask::Finalize() mDestroyTask = true; } -bool VectorAnimationTask::Load() +bool VectorAnimationTask::Load(bool synchronousLoading) { if(!mVectorRenderer.Load(mUrl)) { DALI_LOG_ERROR("VectorAnimationTask::Load: Load failed [%s]\n", mUrl.c_str()); mLoadRequest = false; mLoadFailed = true; - mLoadCompletedTrigger->Trigger(); + if(!synchronousLoading) + { + mLoadCompletedTrigger->Trigger(); + } return false; } @@ -124,7 +127,10 @@ bool VectorAnimationTask::Load() mFrameDurationMicroSeconds = MICROSECONDS_PER_SECOND / mFrameRate; mLoadRequest = false; - mLoadCompletedTrigger->Trigger(); + if(!synchronousLoading) + { + mLoadCompletedTrigger->Trigger(); + } DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::Load: file = %s [%d frames, %f fps] [%p]\n", mUrl.c_str(), mTotalFrame, mFrameRate, this); @@ -140,12 +146,22 @@ void VectorAnimationTask::SetRenderer(Renderer renderer) DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::SetRenderer [%p]\n", this); } -void VectorAnimationTask::RequestLoad(const std::string& url) +void VectorAnimationTask::RequestLoad(const std::string& url, bool synchronousLoading) { - mUrl = url; - mLoadRequest = true; + mUrl = url; - mVectorAnimationThread.AddTask(this); + if(!synchronousLoading) + { + mLoadRequest = true; + + mVectorAnimationThread.AddTask(this); + } + else + { + Load(true); + + OnLoadCompleted(); + } } bool VectorAnimationTask::IsLoadRequested() const @@ -398,11 +414,11 @@ bool VectorAnimationTask::Rasterize(bool& keepAnimation) // The task will be destroyed. We don't need rasterization. return false; } + } - if(mLoadRequest) - { - return Load(); - } + if(mLoadRequest) + { + return Load(false); } if(mLoadFailed) diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h index 42d13f8..4a0c497 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h @@ -149,8 +149,9 @@ public: * @brief Requests to load the animation file. * * @param[in] url The url of the vector animation file + * @param[in] synchronousLoading True if the url should be loaded synchronously */ - void RequestLoad(const std::string& url); + void RequestLoad(const std::string& url, bool synchronousLoading); /** * @brief Queries whether loading is requested. @@ -230,9 +231,10 @@ private: /** * @brief Loads the animation file. * + * @param[in] synchronousLoading True if loading is requested synchronously * @return True if loading succeeded, false otherwise. */ - bool Load(); + bool Load(bool synchronousLoading); /** * @brief Play the vector animation. -- 2.7.4