2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <toolkit-timer.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <toolkit-vector-animation-renderer.h>
25 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
27 #include <dali-toolkit/devel-api/controls/control-devel.h>
28 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
31 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
32 #include <dali/devel-api/rendering/renderer-devel.h>
33 #include <dali/devel-api/adaptor-framework/window-devel.h>
34 #include "dummy-control.h"
37 using namespace Dali::Toolkit;
39 void dali_animated_vector_image_visual_startup(void)
41 test_return_value = TET_UNDEF;
44 void dali_animated_vector_image_visual_cleanup(void)
46 test_return_value = TET_PASS;
52 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
53 const char* TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP = "framedrop.json";
54 const char* TEST_VECTOR_IMAGE_INVALID_FILE_NAME = "invalid.json";
56 bool gAnimationFinishedSignalFired = false;
58 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
60 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
62 gAnimationFinishedSignalFired = true;
68 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
70 ToolkitTestApplication application;
71 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
73 VisualFactory factory = VisualFactory::Get();
74 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
75 DALI_TEST_CHECK( visual );
77 DummyControl actor = DummyControl::New( true );
78 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
79 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
80 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
81 application.GetScene().Add( actor );
83 application.SendNotification();
86 // renderer is added to actor
87 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
88 Renderer renderer = actor.GetRendererAt( 0u );
89 DALI_TEST_CHECK( renderer );
91 // Test SetOffScene().
93 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
98 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
100 ToolkitTestApplication application;
101 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
103 Property::Map propertyMap;
104 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
105 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
107 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
108 DALI_TEST_CHECK( visual );
110 DummyControl actor = DummyControl::New( true );
111 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
112 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
113 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
114 application.GetScene().Add( actor );
116 application.SendNotification();
117 application.Render();
119 // renderer is added to actor
120 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
121 Renderer renderer = actor.GetRendererAt( 0u );
122 DALI_TEST_CHECK( renderer );
125 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
130 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
132 ToolkitTestApplication application;
133 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
135 int startFrame = 1, endFrame = 3;
136 Property::Array playRange;
137 playRange.PushBack( startFrame );
138 playRange.PushBack( endFrame );
140 Property::Map propertyMap;
141 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
142 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
143 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
144 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
145 .Add( DevelVisual::Property::CORNER_RADIUS, 50.0f );
147 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
148 DALI_TEST_CHECK( visual );
150 DummyControl actor = DummyControl::New( true );
151 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
152 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
153 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
154 application.GetScene().Add( actor );
156 application.SendNotification();
157 application.Render();
159 // renderer is added to actor
160 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
161 Renderer renderer = actor.GetRendererAt( 0u );
162 DALI_TEST_CHECK( renderer );
165 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
170 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
172 ToolkitTestApplication application;
173 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
175 int startFrame = 1, endFrame = 3;
176 float cornerRadius = 22.0f;
177 Property::Array playRange;
178 playRange.PushBack( startFrame );
179 playRange.PushBack( endFrame );
181 Property::Map propertyMap;
182 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
183 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
184 .Add( "loopCount", 3 )
185 .Add( "playRange", playRange )
186 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
187 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE )
188 .Add( "redrawInScalingDown", false )
189 .Add( "cornerRadius", cornerRadius );
191 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
192 DALI_TEST_CHECK( visual );
194 DummyControl actor = DummyControl::New( true );
195 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
196 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
197 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
198 application.GetScene().Add( actor );
200 application.SendNotification();
201 application.Render();
203 // Trigger count is 1 - render a frame
204 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
206 // renderer is added to actor
207 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
209 Renderer renderer = actor.GetRendererAt( 0u );
210 DALI_TEST_CHECK( renderer );
212 Property::Map resultMap;
213 visual.CreatePropertyMap( resultMap );
215 // check the property values from the returned map from a visual
216 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
217 DALI_TEST_CHECK( value );
218 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
220 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
221 DALI_TEST_CHECK( value );
222 DALI_TEST_CHECK( value->Get< int >() == 3 );
224 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
225 DALI_TEST_CHECK( value );
227 Property::Array* result = value->GetArray();
228 DALI_TEST_CHECK( result );
230 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
231 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
233 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
234 DALI_TEST_CHECK( value );
235 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
237 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
238 DALI_TEST_CHECK( value );
239 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
241 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
242 DALI_TEST_CHECK( value );
243 DALI_TEST_CHECK( value->Get< bool >() == false );
245 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
246 DALI_TEST_CHECK( value );
247 DALI_TEST_EQUALS( value->Get< Vector4 >(), Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius), TEST_LOCATION );
249 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
250 DALI_TEST_CHECK( value );
251 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::ABSOLUTE );
254 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
259 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
261 ToolkitTestApplication application;
262 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
264 int startFrame = 1, endFrame = 3;
265 Vector4 cornerRadius(50.0f, 22.0f, 0.0f, 3.0f);
266 Property::Array playRange;
267 playRange.PushBack( startFrame );
268 playRange.PushBack( endFrame );
270 Property::Map propertyMap;
271 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
272 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
273 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
274 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
275 .Add( DevelVisual::Property::CORNER_RADIUS, cornerRadius )
276 .Add( DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE);
278 // request AnimatedVectorImageVisual with a property map
279 VisualFactory factory = VisualFactory::Get();
280 Visual::Base visual = factory.CreateVisual( propertyMap );
282 DummyControl actor = DummyControl::New( true );
283 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
284 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
286 Vector2 controlSize( 20.f, 30.f );
287 actor.SetProperty( Actor::Property::SIZE, controlSize );
289 application.GetScene().Add( actor );
291 application.SendNotification();
292 application.Render();
294 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
296 Property::Map resultMap;
297 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
299 // check the property values from the returned map from a visual
300 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
301 DALI_TEST_CHECK( value );
302 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
304 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
305 DALI_TEST_CHECK( value );
306 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
308 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
309 DALI_TEST_CHECK( value );
310 DALI_TEST_CHECK( value->Get< int >() == 3 );
312 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
313 DALI_TEST_CHECK( value );
315 Property::Array* result = value->GetArray();
316 DALI_TEST_CHECK( result );
318 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
319 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
321 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
322 DALI_TEST_CHECK( value );
323 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
325 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
326 DALI_TEST_CHECK( value );
327 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
329 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
330 DALI_TEST_CHECK( value );
332 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
333 DALI_TEST_CHECK( value );
334 DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value
336 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
337 DALI_TEST_CHECK( value );
338 DALI_TEST_EQUALS( value->Get< Vector4 >(), cornerRadius, TEST_LOCATION );
340 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
341 DALI_TEST_CHECK( value );
342 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::RELATIVE );
344 // request AnimatedVectorImageVisual with an URL
345 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
348 visual2.CreatePropertyMap( resultMap );
350 // check the property values from the returned map from a visual
351 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
352 DALI_TEST_CHECK( value );
353 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
355 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
356 DALI_TEST_CHECK( value );
357 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
362 int UtcDaliAnimatedVectorImageVisualPlayback(void)
364 ToolkitTestApplication application;
366 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
369 // request AnimatedVectorImageVisual with a property map
370 VisualFactory factory = VisualFactory::Get();
371 Visual::Base visual = factory.CreateVisual(
373 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
374 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
376 DummyControl dummyControl = DummyControl::New( true );
377 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
378 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
379 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
381 Property::Map attributes;
382 tet_infoline( "Test Play action" );
383 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
385 application.GetScene().Add( dummyControl );
386 application.SendNotification();
387 application.Render( 16 );
389 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
390 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
391 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
393 tet_infoline( "Test Pause action" );
394 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
396 application.SendNotification();
397 application.Render(16);
399 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
400 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
401 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
403 tet_infoline( "Test Play action" );
404 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
406 application.SendNotification();
407 application.Render(16);
409 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
410 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
411 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
413 tet_infoline( "Test Stop action" );
414 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
416 application.SendNotification();
417 application.Render(16);
419 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
420 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
421 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
423 tet_infoline( "Test Stop action again" );
424 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
426 application.SendNotification();
427 application.Render(16);
429 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
430 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
431 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
433 tet_infoline( "Test Play action" );
434 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
436 application.SendNotification();
437 application.Render(16);
439 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
440 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
441 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
443 tet_infoline( "Off stage" );
444 dummyControl.Unparent();
446 application.SendNotification();
447 application.Render(16);
449 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
450 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
451 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
453 tet_infoline( "On stage again" );
454 application.GetScene().Add( dummyControl );
456 application.SendNotification();
457 application.Render(16);
459 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
460 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
461 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
463 tet_infoline( "Test Play action" );
464 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
466 application.SendNotification();
467 application.Render(16);
469 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
470 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
471 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
474 Vector3 newSize( 100.0f, 100.0f, 0.0f );
475 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
477 application.SendNotification();
478 application.Render(16);
480 // Size should be changed
481 Vector3 naturalSize = dummyControl.GetNaturalSize();
482 DALI_TEST_CHECK( naturalSize == newSize );
484 dummyControl.Unparent();
490 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
492 ToolkitTestApplication application;
493 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
495 VisualFactory factory = VisualFactory::Get();
496 Property::Map properties;
497 Property::Map shader;
498 const std::string vertexShader = "Foobar";
499 const std::string fragmentShader = "Foobar sampler2D Foobar";
500 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
501 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
503 properties[Visual::Property::TYPE] = Visual::IMAGE;
504 properties[Visual::Property::SHADER] = shader;
505 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
507 Visual::Base visual = factory.CreateVisual( properties );
509 // trigger creation through setting on stage
510 DummyControl dummy = DummyControl::New( true );
511 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
512 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
514 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
515 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
516 application.GetScene().Add( dummy );
518 application.SendNotification();
519 application.Render();
521 Renderer renderer = dummy.GetRendererAt( 0 );
522 Shader shader2 = renderer.GetShader();
523 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
524 Property::Map* map = value.GetMap();
525 DALI_TEST_CHECK( map );
527 std::string resultFragmentShader, resultVertexShader;
528 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
529 fragment->Get( resultFragmentShader );
530 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
532 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
533 vertex->Get( resultVertexShader );
534 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
539 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
541 ToolkitTestApplication application;
542 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
544 VisualFactory factory = VisualFactory::Get();
545 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
546 DALI_TEST_CHECK( visual );
548 DummyControl actor = DummyControl::New( true );
549 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
550 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
552 Vector2 controlSize( 20.f, 30.f );
555 application.GetScene().Add( actor );
557 application.SendNotification();
558 application.Render();
560 visual.GetNaturalSize( naturalSize );
562 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
564 actor.SetProperty( Actor::Property::SIZE, controlSize );
566 application.SendNotification();
567 application.Render();
569 visual.GetNaturalSize( naturalSize );
571 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
576 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
578 ToolkitTestApplication application;
579 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
581 Property::Map propertyMap;
582 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
583 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
584 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
586 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
587 DALI_TEST_CHECK( visual );
589 DummyControl actor = DummyControl::New( true );
590 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
591 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
593 Vector2 controlSize( 20.f, 30.f );
594 actor.SetProperty( Actor::Property::SIZE, controlSize );
596 application.GetScene().Add( actor );
598 Property::Map attributes;
599 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
601 application.SendNotification();
602 application.Render();
604 // Trigger count is 1 - render a frame
605 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
607 // renderer is added to actor
608 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
609 Renderer renderer = actor.GetRendererAt( 0u );
610 DALI_TEST_CHECK( renderer );
615 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
617 ToolkitTestApplication application;
618 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
620 int startFrame = 1, endFrame = 3;
621 Property::Array array;
622 array.PushBack( endFrame );
623 array.PushBack( startFrame );
625 Property::Map propertyMap;
626 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
627 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
628 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
630 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
631 DALI_TEST_CHECK( visual );
633 DummyControl actor = DummyControl::New( true );
634 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
635 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
637 Vector2 controlSize( 20.f, 30.f );
638 actor.SetProperty( Actor::Property::SIZE, controlSize );
640 application.GetScene().Add( actor );
642 Property::Map attributes;
643 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
645 application.SendNotification();
646 application.Render();
648 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
650 // renderer is added to actor
651 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
652 Renderer renderer = actor.GetRendererAt( 0u );
653 DALI_TEST_CHECK( renderer );
655 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
656 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
658 int resultStartFrame, resultEndFrame;
659 Property::Array* result = value->GetArray();
660 result->GetElementAt( 0 ).Get( resultStartFrame );
661 result->GetElementAt( 1 ).Get( resultEndFrame );
663 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
664 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
666 // Set invalid play range
669 array.PushBack( 100 );
672 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
673 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
675 application.SendNotification();
676 application.Render();
678 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
680 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
681 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
683 result = value->GetArray();
684 result->GetElementAt( 0 ).Get( resultStartFrame );
685 result->GetElementAt( 1 ).Get( resultEndFrame );
687 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
688 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
690 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
692 application.SendNotification();
693 application.Render();
695 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
697 application.SendNotification();
698 application.Render();
700 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
702 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
703 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
704 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
711 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
712 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
714 application.SendNotification();
715 application.Render();
717 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
719 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
720 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
722 result = value->GetArray();
723 result->GetElementAt( 0 ).Get( resultStartFrame );
724 result->GetElementAt( 1 ).Get( resultEndFrame );
726 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
727 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
729 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
730 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
735 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
737 ToolkitTestApplication application;
738 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
740 Property::Array array;
741 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
743 Property::Map propertyMap;
744 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
745 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
746 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
748 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
749 DALI_TEST_CHECK( visual );
751 DummyControl actor = DummyControl::New( true );
752 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
753 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
755 Vector2 controlSize( 20.f, 30.f );
756 actor.SetProperty( Actor::Property::SIZE, controlSize );
758 application.GetScene().Add( actor );
760 Property::Map attributes;
761 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
763 application.SendNotification();
764 application.Render();
766 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
768 // renderer is added to actor
769 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
770 Renderer renderer = actor.GetRendererAt( 0u );
771 DALI_TEST_CHECK( renderer );
773 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
774 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
776 int resultStartFrame, resultEndFrame;
777 Property::Array* result = value->GetArray();
778 result->GetElementAt( 0 ).Get( resultStartFrame );
779 result->GetElementAt( 1 ).Get( resultEndFrame );
781 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
782 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
786 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
787 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
790 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
791 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
793 application.SendNotification();
794 application.Render();
796 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
798 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
799 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
801 result = value->GetArray();
802 result->GetElementAt( 0 ).Get( resultStartFrame );
803 result->GetElementAt( 1 ).Get( resultEndFrame );
805 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
806 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
808 // Set invalid play range
811 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
814 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
815 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
817 application.SendNotification();
818 application.Render();
820 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
822 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
823 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
825 result = value->GetArray();
826 result->GetElementAt( 0 ).Get( resultStartFrame );
827 result->GetElementAt( 1 ).Get( resultEndFrame );
829 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
830 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
835 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
837 ToolkitTestApplication application;
838 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
840 Property::Map propertyMap;
841 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
842 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
843 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
845 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
846 DALI_TEST_CHECK( visual );
848 DummyControl actor = DummyControl::New( true );
849 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
850 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
852 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
854 Vector2 controlSize( 20.f, 30.f );
855 actor.SetProperty( Actor::Property::SIZE, controlSize );
857 application.GetScene().Add( actor );
859 Property::Map attributes;
860 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
862 application.SendNotification();
863 application.Render();
865 // Wait for animation finish
866 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
868 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
869 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
870 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
872 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
877 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
879 ToolkitTestApplication application;
880 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
882 Property::Map propertyMap;
883 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
884 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
886 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
887 DALI_TEST_CHECK( visual );
889 tet_printf( "1. Visual is created.\n" );
891 DummyControl actor = DummyControl::New( true );
892 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
893 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
895 Vector2 controlSize( 20.f, 30.f );
896 actor.SetProperty( Actor::Property::SIZE, controlSize );
898 application.GetScene().Add( actor );
900 application.SendNotification();
901 application.Render();
903 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
905 application.SendNotification();
906 application.Render();
908 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
910 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
911 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
912 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
914 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
916 Property::Array array;
920 Property::Map attributes;
921 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
922 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
924 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
926 application.SendNotification();
927 application.Render();
929 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
931 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
932 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
933 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
935 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
944 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
945 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
948 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
950 application.SendNotification();
951 application.Render();
953 // Stop and jump to 3
954 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
956 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
958 application.SendNotification();
959 application.Render();
961 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
963 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
964 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
965 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
967 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
969 // Jump to the same position
970 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
972 application.SendNotification();
973 application.Render();
975 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
977 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
978 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
979 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
981 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
986 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
988 ToolkitTestApplication application;
989 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
991 int startFrame = 1, endFrame = 3;
992 Property::Array playRange;
993 playRange.PushBack( startFrame );
994 playRange.PushBack( endFrame );
996 Property::Map propertyMap;
997 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
998 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
999 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1000 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1002 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1003 DALI_TEST_CHECK( visual );
1005 DummyControl actor = DummyControl::New( true );
1006 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1007 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1009 Vector2 controlSize( 20.f, 30.f );
1010 actor.SetProperty( Actor::Property::SIZE, controlSize );
1012 application.GetScene().Add( actor );
1014 application.SendNotification();
1015 application.Render();
1017 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1019 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1020 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1021 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1023 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
1024 DALI_TEST_CHECK( value );
1026 Property::Array* result = value->GetArray();
1027 DALI_TEST_CHECK( result );
1029 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1030 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1033 playRange.PushBack( 0 );
1034 playRange.PushBack( 2 );
1036 Property::Map attributes;
1037 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1038 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1040 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1042 application.SendNotification();
1043 application.Render();
1045 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1047 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1048 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1049 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1051 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1052 result = value->GetArray();
1053 DALI_TEST_CHECK( result );
1055 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1056 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1061 playRange.PushBack( startFrame );
1062 playRange.PushBack( endFrame );
1064 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1066 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1068 application.SendNotification();
1069 application.Render();
1071 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1073 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1074 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1076 result = value->GetArray();
1077 DALI_TEST_CHECK( result );
1079 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1080 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1082 // Play and update property
1084 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1086 application.SendNotification();
1087 application.Render();
1089 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1091 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1093 application.SendNotification();
1094 application.Render();
1096 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1097 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1098 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1103 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1105 ToolkitTestApplication application;
1106 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1108 Property::Map propertyMap;
1109 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1110 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1111 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1112 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1114 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1115 DALI_TEST_CHECK( visual );
1117 DummyControl actor = DummyControl::New( true );
1118 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1119 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1121 Vector2 controlSize( 20.f, 30.f );
1122 actor.SetProperty( Actor::Property::SIZE, controlSize );
1124 application.GetScene().Add( actor );
1126 Property::Map attributes;
1127 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1129 application.SendNotification();
1130 application.Render();
1132 // Trigger count is 1 - animation finished
1133 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1135 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1136 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1137 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1139 // Change stop behavior
1140 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1142 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1147 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1149 application.SendNotification();
1150 application.Render();
1152 // Trigger count is 1 - animation finished
1153 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1155 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1157 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1158 int totalFrameNumber = value1->Get< int >();
1160 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1161 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1163 // Change stop behavior
1164 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1165 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1167 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1172 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1174 application.SendNotification();
1175 application.Render();
1178 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1180 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1181 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1182 int currentFrameNumber = value->Get< int >();
1185 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1187 application.SendNotification();
1188 application.Render( 16 );
1190 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1191 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1192 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1197 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1199 ToolkitTestApplication application;
1200 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1202 Property::Map propertyMap;
1203 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1204 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1205 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1206 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1207 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1209 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1210 DALI_TEST_CHECK( visual );
1212 DummyControl actor = DummyControl::New( true );
1213 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1214 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1216 Vector2 controlSize( 20.f, 30.f );
1217 actor.SetProperty( Actor::Property::SIZE, controlSize );
1219 application.GetScene().Add( actor );
1221 Property::Map attributes;
1222 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1224 application.SendNotification();
1225 application.Render();
1227 // Trigger count is 1 - animation finished
1228 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1230 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1231 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1232 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1234 // Change stop behavior
1235 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1237 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1240 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1242 application.SendNotification();
1243 application.Render();
1245 // Trigger count is 1 - animation finished
1246 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1248 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1249 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1250 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1252 // Change looping mode
1253 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1255 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1258 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1260 application.SendNotification();
1261 application.Render();
1263 // Trigger count is 1 - animation finished
1264 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1266 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1267 int totalFrameNumber = value1->Get< int >();
1269 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1270 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1271 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1276 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1278 ToolkitTestApplication application;
1279 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1281 Property::Map propertyMap;
1282 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1283 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1285 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1286 DALI_TEST_CHECK( visual );
1288 DummyControl actor = DummyControl::New( true );
1289 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1290 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1292 Vector2 controlSize( 20.f, 30.f );
1293 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1294 actor.SetProperty( Actor::Property::SIZE, controlSize );
1295 actor.SetProperty( Actor::Property::SCALE, controlScale );
1297 application.GetScene().Add( actor );
1299 application.SendNotification();
1300 application.Render();
1302 application.SendNotification();
1303 application.Render();
1305 Renderer renderer = actor.GetRendererAt( 0u );
1306 DALI_TEST_CHECK( renderer );
1308 auto textureSet = renderer.GetTextures();
1309 auto texture = textureSet.GetTexture(0);
1311 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1312 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1314 // Change scale and size
1315 controlSize = Vector2( 50.f, 40.f );
1316 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1317 actor.SetProperty( Actor::Property::SIZE, controlSize );
1318 actor.SetProperty( Actor::Property::SCALE, controlScale );
1320 application.SendNotification();
1321 application.Render();
1323 application.SendNotification();
1324 application.Render();
1326 renderer = actor.GetRendererAt( 0u );
1327 DALI_TEST_CHECK( renderer );
1329 textureSet = renderer.GetTextures();
1330 texture = textureSet.GetTexture(0);
1332 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1333 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1338 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1340 ToolkitTestApplication application;
1341 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1343 Property::Map propertyMap;
1344 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1345 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1347 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1348 DALI_TEST_CHECK( visual1 );
1350 DummyControl actor1 = DummyControl::New( true );
1351 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1352 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1354 Vector2 controlSize( 20.f, 30.f );
1355 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1357 application.GetScene().Add( actor1 );
1359 propertyMap.Clear();
1360 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1361 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1363 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1364 DALI_TEST_CHECK( visual2 );
1366 DummyControl actor2 = DummyControl::New( true );
1367 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1368 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1370 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1372 application.GetScene().Add( actor2 );
1374 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1376 application.SendNotification();
1377 application.Render();
1379 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1381 Property::Map attributes;
1382 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1384 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1385 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1387 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1389 // renderer is added to actor
1390 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1391 Renderer renderer1 = actor1.GetRendererAt( 0u );
1392 DALI_TEST_CHECK( renderer1 );
1394 // renderer is added to actor
1395 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1396 Renderer renderer2 = actor2.GetRendererAt( 0u );
1397 DALI_TEST_CHECK( renderer2 );
1402 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1404 ToolkitTestApplication application;
1405 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1407 Property::Map propertyMap;
1408 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1409 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1411 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1412 DALI_TEST_CHECK( visual );
1414 DummyControl actor = DummyControl::New( true );
1415 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1416 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1418 Vector2 controlSize( 20.f, 30.f );
1419 actor.SetProperty( Actor::Property::SIZE, controlSize );
1421 application.GetScene().Add( actor );
1423 application.SendNotification();
1424 application.Render();
1426 Property::Map attributes;
1427 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1429 application.SendNotification();
1430 application.Render();
1432 // Check rendering behavior
1433 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1434 Renderer renderer = actor.GetRendererAt( 0u );
1435 DALI_TEST_CHECK( renderer );
1436 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1438 actor.SetProperty( Actor::Property::VISIBLE, false );
1440 application.SendNotification();
1441 application.Render();
1443 // Check rendering behavior again
1444 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1449 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1451 ToolkitTestApplication application;
1452 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1454 Property::Map propertyMap;
1455 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1456 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1458 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1459 DALI_TEST_CHECK( visual );
1461 DummyControl actor = DummyControl::New( true );
1462 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1463 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1465 Vector2 controlSize( 20.f, 30.f );
1466 actor.SetProperty( Actor::Property::SIZE, controlSize );
1468 application.GetScene().Add( actor );
1470 application.SendNotification();
1471 application.Render();
1473 Property::Map attributes;
1474 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1476 application.SendNotification();
1477 application.Render();
1479 // Check rendering behavior
1480 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1481 Renderer renderer = actor.GetRendererAt( 0u );
1482 DALI_TEST_CHECK( renderer );
1483 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1485 Window window = DevelWindow::Get( actor );
1488 application.SendNotification();
1489 application.Render();
1491 // Check rendering behavior again
1492 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1497 int UtcDaliAnimatedVectorImageVisualInvalidFile(void)
1499 ToolkitTestApplication application;
1500 tet_infoline("Request loading with invalid file - should draw broken image");
1502 TestGlAbstraction& gl = application.GetGlAbstraction();
1503 TraceCallStack& textureTrace = gl.GetTextureTrace();
1504 textureTrace.Enable(true);
1506 Property::Map propertyMap;
1507 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1508 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
1510 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1511 DALI_TEST_CHECK(visual);
1513 DummyControl actor = DummyControl::New(true);
1514 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >(actor.GetImplementation());
1515 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1517 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1519 application.GetScene().Add(actor);
1521 application.SendNotification();
1522 application.Render();
1524 // Check resource status
1525 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1526 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1528 // The broken image should be shown.
1529 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1530 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1535 int UtcDaliAnimatedVectorImageVisualFrameDrops(void)
1537 ToolkitTestApplication application;
1538 tet_infoline("UtcDaliAnimatedVectorImageVisualFrameDrops");
1540 Property::Map propertyMap;
1541 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1542 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP);
1544 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1545 DALI_TEST_CHECK(visual);
1547 DummyControl actor = DummyControl::New(true);
1548 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1549 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1551 Vector2 controlSize(20.f, 30.f);
1552 actor.SetProperty(Actor::Property::SIZE, controlSize);
1554 application.GetScene().Add(actor);
1556 application.SendNotification();
1557 application.Render();
1559 Property::Map attributes;
1560 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1562 application.SendNotification();
1563 application.Render();
1565 // Trigger count is 1 - render the first frame
1566 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1568 // Make delay to drop frames
1569 Test::VectorAnimationRenderer::DelayRendering(170); // longer than 16.6 * 10frames
1571 // Check dropped frame
1572 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1574 uint32_t frames = Test::VectorAnimationRenderer::GetDroppedFrames();
1575 DALI_TEST_CHECK(frames >= 9);