2 * Copyright (c) 2023 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.
20 #include <dali-toolkit-test-suite-utils.h>
22 #include <toolkit-event-thread-callback.h>
23 #include <toolkit-timer.h>
25 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
28 #include <dali-toolkit/devel-api/visuals/animated-image-visual-actions-devel.h>
29 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
32 #include "dummy-control.h"
35 using namespace Dali::Toolkit;
37 void dali_animated_image_visual_startup(void)
39 test_return_value = TET_UNDEF;
42 void dali_animated_image_visual_cleanup(void)
44 test_return_value = TET_PASS;
49 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/application-icon-%02d.png";
50 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
51 const char* TEST_MASK_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/mask.png";
52 const char* TEST_WEBP_FILE_NAME = TEST_RESOURCE_DIR "/dali-logo.webp";
55 void CopyUrlsIntoArray(Property::Array& urls, int startIndex = 0)
57 for(int i = 20 + startIndex; i <= 30; ++i)
60 if(asprintf(&url, TEST_IMAGE_FILE_NAME, i) > 0)
62 Property::Value value(url);
69 int UtcDaliAnimatedImageVisualGetPropertyMap01(void)
71 ToolkitTestApplication application;
72 tet_infoline("UtcDaliAnimatedImageVisualGetPropertyMap");
74 // request AnimatedImageVisual with a property map
75 VisualFactory factory = VisualFactory::Get();
76 Visual::Base animatedImageVisual = factory.CreateVisual(
78 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
79 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
80 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
81 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
82 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
83 .Add(ImageVisual::Property::FITTING_MODE, FittingMode::FIT_WIDTH)
84 .Add(ImageVisual::Property::SAMPLING_MODE, SamplingMode::NEAREST)
85 .Add(ImageVisual::Property::DESIRED_WIDTH, 154)
86 .Add(ImageVisual::Property::DESIRED_HEIGHT, 79)
87 .Add(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME)
88 .Add(ImageVisual::Property::MASK_CONTENT_SCALE, 1.6f)
89 .Add(ImageVisual::Property::CROP_TO_MASK, true)
90 .Add(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING)
91 .Add(DevelVisual::Property::CORNER_RADIUS, 22.2f)
92 .Add(DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::ABSOLUTE)
93 .Add(DevelVisual::Property::BORDERLINE_WIDTH, 33.3f)
94 .Add(DevelVisual::Property::BORDERLINE_COLOR, Color::RED)
95 .Add(DevelVisual::Property::BORDERLINE_OFFSET, 0.3f));
97 Property::Map resultMap;
98 animatedImageVisual.CreatePropertyMap(resultMap);
99 // check the property values from the returned map from a visual
100 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
101 DALI_TEST_CHECK(value);
102 DALI_TEST_CHECK(value->Get<int>() == Visual::ANIMATED_IMAGE);
104 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
105 DALI_TEST_CHECK(value);
106 DALI_TEST_CHECK(value->Get<std::string>() == TEST_GIF_FILE_NAME);
108 value = resultMap.Find(Toolkit::ImageVisual::Property::WRAP_MODE_U, Property::INTEGER);
109 DALI_TEST_CHECK(value);
110 DALI_TEST_CHECK(value->Get<int>() == WrapMode::REPEAT);
112 value = resultMap.Find(Toolkit::ImageVisual::Property::WRAP_MODE_V, Property::INTEGER);
113 DALI_TEST_CHECK(value);
114 DALI_TEST_CHECK(value->Get<int>() == WrapMode::DEFAULT);
116 value = resultMap.Find(Toolkit::ImageVisual::Property::FITTING_MODE, Property::INTEGER);
117 DALI_TEST_CHECK(value);
118 DALI_TEST_CHECK(value->Get<int>() == FittingMode::FIT_WIDTH);
120 value = resultMap.Find(Toolkit::ImageVisual::Property::SAMPLING_MODE, Property::INTEGER);
121 DALI_TEST_CHECK(value);
122 DALI_TEST_CHECK(value->Get<int>() == SamplingMode::NEAREST);
124 value = resultMap.Find(Toolkit::ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER);
125 DALI_TEST_CHECK(value);
126 DALI_TEST_CHECK(value->Get<int>() == 154);
128 value = resultMap.Find(Toolkit::ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER);
129 DALI_TEST_CHECK(value);
130 DALI_TEST_CHECK(value->Get<int>() == 79);
132 value = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
133 DALI_TEST_CHECK(value);
134 DALI_TEST_EQUALS(value->Get<Vector4>(), Vector4(22.2f, 22.2f, 22.2f, 22.2f), TEST_LOCATION);
136 value = resultMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER);
137 DALI_TEST_CHECK(value);
138 DALI_TEST_CHECK(value->Get<int>() == Visual::Transform::Policy::ABSOLUTE);
140 value = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
141 DALI_TEST_CHECK(value);
142 DALI_TEST_EQUALS(value->Get<float>(), 33.3f, TEST_LOCATION);
144 value = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
145 DALI_TEST_CHECK(value);
146 DALI_TEST_EQUALS(value->Get<Vector4>(), Color::RED, TEST_LOCATION);
148 value = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
149 DALI_TEST_CHECK(value);
150 DALI_TEST_EQUALS(value->Get<float>(), 0.3f, TEST_LOCATION);
152 // Check mask properties
153 value = resultMap.Find(ImageVisual::Property::ALPHA_MASK_URL, Property::STRING);
154 DALI_TEST_CHECK(value);
155 DALI_TEST_CHECK(value->Get<std::string>() == TEST_MASK_IMAGE_FILE_NAME);
157 value = resultMap.Find(ImageVisual::Property::MASK_CONTENT_SCALE, Property::FLOAT);
158 DALI_TEST_CHECK(value);
159 DALI_TEST_EQUALS(value->Get<float>(), 1.6f, TEST_LOCATION);
161 value = resultMap.Find(ImageVisual::Property::CROP_TO_MASK, Property::BOOLEAN);
162 DALI_TEST_CHECK(value);
163 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
165 value = resultMap.Find(DevelImageVisual::Property::MASKING_TYPE, Property::INTEGER);
166 DALI_TEST_CHECK(value);
167 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::MaskingType::MASKING_ON_RENDERING);
169 // Natural size getted as desired size
171 animatedImageVisual.GetNaturalSize(naturalSize);
172 DALI_TEST_EQUALS(naturalSize, Vector2(154, 79), TEST_LOCATION);
174 // request AnimatedImageVisual with an URL
175 Visual::Base animatedImageVisual2 = factory.CreateVisual(TEST_GIF_FILE_NAME, ImageDimensions());
177 animatedImageVisual2.CreatePropertyMap(resultMap);
178 // check the property values from the returned map from a visual
179 value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
180 DALI_TEST_CHECK(value);
181 DALI_TEST_CHECK(value->Get<int>() == Visual::ANIMATED_IMAGE);
183 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
184 DALI_TEST_CHECK(value);
185 DALI_TEST_CHECK(value->Get<std::string>() == TEST_GIF_FILE_NAME);
187 // Natural size getted as image size
188 animatedImageVisual2.GetNaturalSize(naturalSize);
189 DALI_TEST_EQUALS(naturalSize, Vector2(50, 50), TEST_LOCATION);
194 int UtcDaliAnimatedImageVisualGetPropertyMap02(void)
196 ToolkitTestApplication application;
197 tet_infoline("UtcDaliAnimatedImageVisualGetPropertyMap for multi image with fixed cache");
199 // request AnimatedImageVisual with a property map
200 VisualFactory factory = VisualFactory::Get();
201 Property::Array urls;
202 CopyUrlsIntoArray(urls);
204 Visual::Base animatedImageVisual = factory.CreateVisual(
206 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
209 .Add("cacheSize", 20)
210 .Add("loopCount", 10)
211 .Add("frameDelay", 200)
212 .Add("pixelArea", Vector4())
213 .Add("wrapModeU", WrapMode::REPEAT)
214 .Add("wrapModeV", WrapMode::DEFAULT)
215 .Add("fittingMode", FittingMode::FIT_WIDTH)
216 .Add("samplingMode", SamplingMode::NEAREST)
217 .Add("desiredWidth", 154)
218 .Add("desiredHeight", 79)
219 .Add("alphaMaskUrl", TEST_MASK_IMAGE_FILE_NAME)
220 .Add("maskContentScale", 1.6f)
221 .Add("cropToMask", true)
222 .Add(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING)
223 .Add("cornerRadius", Vector4(50.0f, 25.0f, 12.5f, 33.0f))
224 .Add("cornerRadiusPolicy", Visual::Transform::Policy::RELATIVE)
225 .Add("borderlineWidth", 20.0f)
226 .Add("borderlineColor", Vector4())
227 .Add("borderlineOffset", -1.0f));
229 Property::Map resultMap;
230 animatedImageVisual.CreatePropertyMap(resultMap);
231 // check the property values from the returned map from a visual
232 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
233 DALI_TEST_CHECK(value);
234 DALI_TEST_CHECK(value->Get<int>() == Visual::ANIMATED_IMAGE);
236 value = resultMap.Find(ImageVisual::Property::URL, "url");
237 DALI_TEST_CHECK(value);
238 Property::Array* resultUrls = value->GetArray();
239 DALI_TEST_CHECK(resultUrls);
240 DALI_TEST_EQUALS(resultUrls->Count(), urls.Count(), TEST_LOCATION);
242 value = resultMap.Find(ImageVisual::Property::BATCH_SIZE, "batchSize");
243 DALI_TEST_CHECK(value);
244 DALI_TEST_EQUALS(value->Get<int>(), 4, TEST_LOCATION);
246 value = resultMap.Find(ImageVisual::Property::CACHE_SIZE, "cacheSize");
247 DALI_TEST_CHECK(value);
248 DALI_TEST_EQUALS(value->Get<int>(), 20, TEST_LOCATION);
250 value = resultMap.Find(Toolkit::DevelImageVisual::Property::LOOP_COUNT, "loopCount");
251 DALI_TEST_CHECK(value);
252 DALI_TEST_EQUALS(value->Get<int>(), 10, TEST_LOCATION);
254 value = resultMap.Find(ImageVisual::Property::FRAME_DELAY, "frameDelay");
255 DALI_TEST_CHECK(value);
256 DALI_TEST_EQUALS(value->Get<int>(), 200, TEST_LOCATION);
258 value = resultMap.Find(Toolkit::DevelImageVisual::Property::TOTAL_FRAME_NUMBER, "totalFrameNumber");
259 DALI_TEST_CHECK(value);
260 DALI_TEST_EQUALS(value->Get<int>(), 11, TEST_LOCATION);
262 value = resultMap.Find(Toolkit::ImageVisual::Property::WRAP_MODE_U, "wrapModeU");
263 DALI_TEST_CHECK(value);
264 DALI_TEST_CHECK(value->Get<int>() == WrapMode::REPEAT);
266 value = resultMap.Find(Toolkit::ImageVisual::Property::WRAP_MODE_V, "wrapModeV");
267 DALI_TEST_CHECK(value);
268 DALI_TEST_CHECK(value->Get<int>() == WrapMode::DEFAULT);
270 value = resultMap.Find(Toolkit::ImageVisual::Property::FITTING_MODE, "fittingMode");
271 DALI_TEST_CHECK(value);
272 DALI_TEST_CHECK(value->Get<int>() == FittingMode::FIT_WIDTH);
274 value = resultMap.Find(Toolkit::ImageVisual::Property::SAMPLING_MODE, "samplingMode");
275 DALI_TEST_CHECK(value);
276 DALI_TEST_CHECK(value->Get<int>() == SamplingMode::NEAREST);
278 value = resultMap.Find(Toolkit::ImageVisual::Property::DESIRED_WIDTH, "desiredWidth");
279 DALI_TEST_CHECK(value);
280 DALI_TEST_CHECK(value->Get<int>() == 154);
282 value = resultMap.Find(Toolkit::ImageVisual::Property::DESIRED_HEIGHT, "desiredHeight");
283 DALI_TEST_CHECK(value);
284 DALI_TEST_CHECK(value->Get<int>() == 79);
286 value = resultMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS, "cornerRadius");
287 DALI_TEST_CHECK(value);
288 DALI_TEST_EQUALS(value->Get<Vector4>(), Vector4(50.0f, 25.0f, 12.5f, 33.0f), TEST_LOCATION);
290 value = resultMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy");
291 DALI_TEST_CHECK(value);
292 DALI_TEST_CHECK(value->Get<int>() == Visual::Transform::Policy::RELATIVE);
294 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_WIDTH, "borderlineWidth");
295 DALI_TEST_CHECK(value);
296 DALI_TEST_EQUALS(value->Get<float>(), 20.0f, TEST_LOCATION);
298 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_COLOR, "borderlineColor");
299 DALI_TEST_CHECK(value);
300 DALI_TEST_EQUALS(value->Get<Vector4>(), Vector4::ZERO, TEST_LOCATION);
302 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_OFFSET, "borderlineOffset");
303 DALI_TEST_CHECK(value);
304 DALI_TEST_EQUALS(value->Get<float>(), -1.0f, TEST_LOCATION);
306 // Check mask properties
307 value = resultMap.Find(ImageVisual::Property::ALPHA_MASK_URL, "alphaMaskUrl");
308 DALI_TEST_CHECK(value);
309 DALI_TEST_CHECK(value->Get<std::string>() == TEST_MASK_IMAGE_FILE_NAME);
311 value = resultMap.Find(ImageVisual::Property::MASK_CONTENT_SCALE, "maskContentScale");
312 DALI_TEST_CHECK(value);
313 DALI_TEST_EQUALS(value->Get<float>(), 1.6f, TEST_LOCATION);
315 value = resultMap.Find(ImageVisual::Property::CROP_TO_MASK, "cropToMask");
316 DALI_TEST_CHECK(value);
317 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
319 value = resultMap.Find(DevelImageVisual::Property::MASKING_TYPE, Property::INTEGER);
320 DALI_TEST_CHECK(value);
321 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::MaskingType::MASKING_ON_RENDERING);
326 int UtcDaliAnimatedImageVisualGetPropertyMap03(void)
328 ToolkitTestApplication application;
329 tet_infoline("UtcDaliAnimatedImageVisualGetPropertyMap for multi image rolling cache");
331 // request AnimatedImageVisual with a property map
332 VisualFactory factory = VisualFactory::Get();
333 Property::Array urls;
334 CopyUrlsIntoArray(urls);
336 Visual::Base animatedImageVisual = factory.CreateVisual(
338 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
342 .Add("loopCount", 10)
343 .Add("frameDelay", 200)
344 .Add("pixelArea", Vector4())
345 .Add("wrapModeU", WrapMode::REPEAT)
346 .Add("wrapModeV", WrapMode::DEFAULT)
347 .Add("alphaMaskUrl", TEST_MASK_IMAGE_FILE_NAME)
348 .Add("maskContentScale", 1.6f)
349 .Add("cropToMask", true)
350 .Add(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING)
351 .Add("cornerRadius", 50.5f));
353 Property::Map resultMap;
354 animatedImageVisual.CreatePropertyMap(resultMap);
355 // check the property values from the returned map from a visual
356 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
357 DALI_TEST_CHECK(value);
358 DALI_TEST_CHECK(value->Get<int>() == Visual::ANIMATED_IMAGE);
360 value = resultMap.Find(ImageVisual::Property::URL, "url");
361 DALI_TEST_CHECK(value);
362 Property::Array* resultUrls = value->GetArray();
363 DALI_TEST_CHECK(resultUrls);
364 DALI_TEST_EQUALS(resultUrls->Count(), urls.Count(), TEST_LOCATION);
366 value = resultMap.Find(ImageVisual::Property::BATCH_SIZE, "batchSize");
367 DALI_TEST_CHECK(value);
368 DALI_TEST_EQUALS(value->Get<int>(), 4, TEST_LOCATION);
370 value = resultMap.Find(ImageVisual::Property::CACHE_SIZE, "cacheSize");
371 DALI_TEST_CHECK(value);
372 DALI_TEST_EQUALS(value->Get<int>(), 8, TEST_LOCATION);
374 value = resultMap.Find(Toolkit::DevelImageVisual::Property::LOOP_COUNT, "loopCount");
375 DALI_TEST_CHECK(value);
376 DALI_TEST_EQUALS(value->Get<int>(), 10, TEST_LOCATION);
378 value = resultMap.Find(ImageVisual::Property::FRAME_DELAY, "frameDelay");
379 DALI_TEST_CHECK(value);
380 DALI_TEST_EQUALS(value->Get<int>(), 200, TEST_LOCATION);
382 value = resultMap.Find(Toolkit::DevelImageVisual::Property::TOTAL_FRAME_NUMBER, "totalFrameNumber");
383 DALI_TEST_CHECK(value);
384 DALI_TEST_EQUALS(value->Get<int>(), 11, TEST_LOCATION);
386 value = resultMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS, "cornerRadius");
387 DALI_TEST_CHECK(value);
388 DALI_TEST_EQUALS(value->Get<Vector4>(), Vector4(50.5f, 50.5f, 50.5f, 50.5f), TEST_LOCATION);
390 value = resultMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy");
391 DALI_TEST_CHECK(value);
392 DALI_TEST_CHECK(value->Get<int>() == Visual::Transform::Policy::ABSOLUTE);
394 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_WIDTH, "borderlineWidth");
395 DALI_TEST_CHECK(value);
396 DALI_TEST_EQUALS(value->Get<float>(), 0.0f, TEST_LOCATION);
398 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_COLOR, "borderlineColor");
399 DALI_TEST_CHECK(value);
400 DALI_TEST_EQUALS(value->Get<Vector4>(), Color::BLACK, TEST_LOCATION);
402 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_OFFSET, "borderlineOffset");
403 DALI_TEST_CHECK(value);
404 DALI_TEST_EQUALS(value->Get<float>(), 0.0f, TEST_LOCATION);
406 // Check mask properties
407 value = resultMap.Find(ImageVisual::Property::ALPHA_MASK_URL, "alphaMaskUrl");
408 DALI_TEST_CHECK(value);
409 DALI_TEST_CHECK(value->Get<std::string>() == TEST_MASK_IMAGE_FILE_NAME);
411 value = resultMap.Find(ImageVisual::Property::MASK_CONTENT_SCALE, "maskContentScale");
412 DALI_TEST_CHECK(value);
413 DALI_TEST_EQUALS(value->Get<float>(), 1.6f, TEST_LOCATION);
415 value = resultMap.Find(ImageVisual::Property::CROP_TO_MASK, "cropToMask");
416 DALI_TEST_CHECK(value);
417 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
419 value = resultMap.Find(DevelImageVisual::Property::MASKING_TYPE, Property::INTEGER);
420 DALI_TEST_CHECK(value);
421 DALI_TEST_CHECK(value->Get<bool>() == DevelImageVisual::MaskingType::MASKING_ON_RENDERING);
423 // Natural size getted as masked image size
425 animatedImageVisual.GetNaturalSize(naturalSize);
426 DALI_TEST_EQUALS(naturalSize, Vector2(100, 100), TEST_LOCATION);
431 int UtcDaliAnimatedImageVisualGetPropertyMap04(void)
433 ToolkitTestApplication application;
434 tet_infoline("UtcDaliAnimatedImageVisualGetPropertyMap");
436 // request AnimatedImageVisual with a property map
437 VisualFactory factory = VisualFactory::Get();
438 Visual::Base animatedImageVisual = factory.CreateVisual(
440 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
441 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
442 .Add(ImageVisual::Property::BATCH_SIZE, 1)
443 .Add(ImageVisual::Property::CACHE_SIZE, 1)
444 .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, true)
445 .Add(ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DETACHED)
446 .Add(ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::ATTACHED)
447 .Add(DevelVisual::Property::BORDERLINE_WIDTH, 0.4f));
449 Property::Map resultMap;
450 animatedImageVisual.CreatePropertyMap(resultMap);
452 // check the property values from the returned map from a visual
453 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
454 DALI_TEST_CHECK(value);
455 DALI_TEST_CHECK(value->Get<int>() == Visual::ANIMATED_IMAGE);
457 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
458 DALI_TEST_CHECK(value);
459 DALI_TEST_CHECK(value->Get<std::string>() == TEST_GIF_FILE_NAME);
461 value = resultMap.Find(ImageVisual::Property::BATCH_SIZE, Property::INTEGER);
462 DALI_TEST_CHECK(value);
463 DALI_TEST_CHECK(value->Get<int>() == 2);
465 value = resultMap.Find(ImageVisual::Property::CACHE_SIZE, Property::INTEGER);
466 DALI_TEST_CHECK(value);
467 DALI_TEST_CHECK(value->Get<int>() == 2);
469 value = resultMap.Find(ImageVisual::Property::SYNCHRONOUS_LOADING, Property::BOOLEAN);
470 DALI_TEST_CHECK(value);
471 DALI_TEST_CHECK(value->Get<bool>() == true);
473 value = resultMap.Find(ImageVisual::Property::RELEASE_POLICY, Property::INTEGER);
474 DALI_TEST_CHECK(value);
475 DALI_TEST_CHECK(value->Get<int>() == ImageVisual::ReleasePolicy::DETACHED);
477 value = resultMap.Find(ImageVisual::Property::LOAD_POLICY, Property::INTEGER);
478 DALI_TEST_CHECK(value);
479 DALI_TEST_CHECK(value->Get<int>() == ImageVisual::LoadPolicy::ATTACHED);
481 value = resultMap.Find(Toolkit::DevelImageVisual::Property::TOTAL_FRAME_NUMBER, "totalFrameNumber");
482 DALI_TEST_CHECK(value);
483 DALI_TEST_EQUALS(value->Get<int>(), 4, TEST_LOCATION);
485 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_WIDTH, "borderlineWidth");
486 DALI_TEST_CHECK(value);
487 DALI_TEST_EQUALS(value->Get<float>(), 0.4f, TEST_LOCATION);
489 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_COLOR, "borderlineColor");
490 DALI_TEST_CHECK(value);
491 DALI_TEST_EQUALS(value->Get<Vector4>(), Vector4(0.0f, 0.0f, 0.0f, 1.0f), TEST_LOCATION);
493 value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_OFFSET, "borderlineOffset");
494 DALI_TEST_CHECK(value);
495 DALI_TEST_EQUALS(value->Get<float>(), 0.0f, TEST_LOCATION);
500 int UtcDaliAnimatedImageVisualImageLoadingFail01(void)
502 ToolkitTestApplication application;
503 TestGlAbstraction& gl = application.GetGlAbstraction();
506 Property::Map propertyMap;
507 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
508 propertyMap.Insert(ImageVisual::Property::URL, "dummy.gif");
509 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
510 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 2);
511 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
512 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true);
513 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 0.23f);
514 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::ABSOLUTE);
516 VisualFactory factory = VisualFactory::Get();
517 Visual::Base visual = factory.CreateVisual(propertyMap);
519 DummyControl dummyControl = DummyControl::New(true);
520 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
521 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
523 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
524 application.GetScene().Add(dummyControl);
526 TraceCallStack& textureTrace = gl.GetTextureTrace();
527 textureTrace.Enable(true);
529 application.SendNotification();
530 application.Render(20);
532 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 1, TEST_LOCATION);
534 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::JUMP_TO, 6);
536 application.SendNotification();
537 application.Render(20);
539 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 1, TEST_LOCATION);
541 dummyControl.Unparent();
547 int UtcDaliAnimatedImageVisualSynchronousLoading(void)
549 ToolkitTestApplication application;
550 TestGlAbstraction& gl = application.GetGlAbstraction();
553 Property::Map propertyMap;
554 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
555 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
556 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
557 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 2);
558 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
559 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true);
560 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 0.23f);
561 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::ABSOLUTE);
563 VisualFactory factory = VisualFactory::Get();
564 Visual::Base visual = factory.CreateVisual(propertyMap);
566 DummyControl dummyControl = DummyControl::New(true);
567 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
568 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
570 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
571 application.GetScene().Add(dummyControl);
573 TraceCallStack& textureTrace = gl.GetTextureTrace();
574 textureTrace.Enable(true);
576 application.SendNotification();
577 application.Render(20);
579 // The first frame is loaded synchronously and load next batch.
580 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
582 application.SendNotification();
583 application.Render();
585 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
586 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_LOCATION);
588 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::JUMP_TO, 3);
590 application.SendNotification();
591 application.Render(20);
593 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
595 application.SendNotification();
596 application.Render();
598 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_LOCATION);
600 dummyControl.Unparent();
602 tet_infoline("Test that removing the visual from stage deletes all textures");
603 application.SendNotification();
604 application.Render(16);
605 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
610 int UtcDaliAnimatedImageVisualSynchronousLoadingWithAlphaMask01(void)
612 ToolkitTestApplication application;
613 tet_infoline("UtcDaliAnimatedImageVisualSynchronousLoadingWithAlphaMask01 for CPU Alpha Masking");
614 TestGlAbstraction& gl = application.GetGlAbstraction();
617 Property::Map propertyMap;
618 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
619 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
620 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
621 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 2);
622 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
623 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true);
624 propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME);
625 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 0.23f);
626 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::ABSOLUTE);
628 VisualFactory factory = VisualFactory::Get();
629 Visual::Base visual = factory.CreateVisual(propertyMap);
631 Property::Map testMap;
632 visual.CreatePropertyMap(testMap);
633 DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION);
635 DummyControl dummyControl = DummyControl::New(true);
636 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
637 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
639 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
640 application.GetScene().Add(dummyControl);
642 TraceCallStack& textureTrace = gl.GetTextureTrace();
643 textureTrace.Enable(true);
645 application.SendNotification();
646 application.Render(20);
648 // The first frame is loaded synchronously and load next batch with masking
649 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
651 application.SendNotification();
652 application.Render();
654 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
655 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_LOCATION);
657 dummyControl.Unparent();
659 tet_infoline("Test that removing the visual from stage deletes all textures");
660 application.SendNotification();
661 application.Render(16);
662 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
667 int UtcDaliAnimatedImageVisualSynchronousLoadingWithAlphaMask02(void)
669 ToolkitTestApplication application;
670 tet_infoline("UtcDaliAnimatedImageVisualSynchronousLoadingWithAlphaMask02 for GPU Alpha Masking");
671 TestGlAbstraction& gl = application.GetGlAbstraction();
674 Property::Map propertyMap;
675 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
676 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
677 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
678 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 2);
679 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
680 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true);
681 propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME);
682 propertyMap.Insert(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING);
683 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 0.23f);
684 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::ABSOLUTE);
686 VisualFactory factory = VisualFactory::Get();
687 Visual::Base visual = factory.CreateVisual(propertyMap);
689 Property::Map testMap;
690 visual.CreatePropertyMap(testMap);
691 DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION);
693 DummyControl dummyControl = DummyControl::New(true);
694 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
695 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
697 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
698 application.GetScene().Add(dummyControl);
700 TraceCallStack& textureTrace = gl.GetTextureTrace();
701 textureTrace.Enable(true);
703 application.SendNotification();
704 application.Render(20);
706 // The first frame is loaded synchronously and load next batch with masking
707 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
709 application.SendNotification();
710 application.Render();
712 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
713 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 4, TEST_LOCATION);
715 dummyControl.Unparent();
717 tet_infoline("Test that removing the visual from stage deletes all textures");
718 application.SendNotification();
719 application.Render(16);
720 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
725 int UtcDaliAnimatedImageVisualJumpToAction(void)
727 ToolkitTestApplication application;
728 TestGlAbstraction& gl = application.GetGlAbstraction();
730 Property::Array urls;
731 CopyUrlsIntoArray(urls);
734 Property::Map propertyMap;
735 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
736 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
737 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 4);
738 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 12);
739 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
741 VisualFactory factory = VisualFactory::Get();
742 Visual::Base visual = factory.CreateVisual(propertyMap);
744 DummyControl dummyControl = DummyControl::New(true);
745 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
746 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
748 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
749 application.GetScene().Add(dummyControl);
750 application.SendNotification();
751 application.Render(20);
753 tet_infoline("Ready the visual after the visual is on stage");
754 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
756 tet_infoline("Test that a timer has been started");
757 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
759 TraceCallStack& textureTrace = gl.GetTextureTrace();
760 textureTrace.Enable(true);
762 application.SendNotification();
763 application.Render(20);
765 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 4, TEST_LOCATION);
767 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::STOP, Property::Map());
769 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 4, TEST_LOCATION);
771 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::JUMP_TO, 20);
773 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 4, TEST_LOCATION);
775 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::JUMP_TO, 6);
777 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(6), true, TEST_LOCATION);
778 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 4, TEST_LOCATION);
780 dummyControl.Unparent();
782 tet_infoline("Test that removing the visual from stage deletes all textures");
783 application.SendNotification();
784 application.Render(16);
785 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
790 int UtcDaliAnimatedImageVisualStopBehavior(void)
792 ToolkitTestApplication application;
793 TestGlAbstraction& gl = application.GetGlAbstraction();
795 Property::Array urls;
796 CopyUrlsIntoArray(urls);
799 Property::Map propertyMap;
800 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
801 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
802 propertyMap.Insert(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME);
803 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 4);
804 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 8);
805 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
807 VisualFactory factory = VisualFactory::Get();
808 Visual::Base visual = factory.CreateVisual(propertyMap);
810 // Expect that a batch of 4 textures has been requested. These will be serially loaded
813 DummyControl dummyControl = DummyControl::New(true);
814 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
815 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
817 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
818 application.GetScene().Add(dummyControl);
819 application.SendNotification();
820 application.Render(20);
822 tet_infoline("Ready the visual after the visual is on stage");
823 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
825 tet_infoline("Test that a timer has been started");
826 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
828 TraceCallStack& textureTrace = gl.GetTextureTrace();
829 textureTrace.Enable(true);
831 application.SendNotification();
832 application.Render(20);
834 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 4, TEST_LOCATION);
836 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::STOP, Property::Map());
838 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 4, TEST_LOCATION);
840 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::JUMP_TO, 1);
842 // Expect the second batch has been requested
843 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
845 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 4, TEST_LOCATION);
847 dummyControl.Unparent();
849 tet_infoline("Test that removing the visual from stage deletes all textures");
850 application.SendNotification();
851 application.Render(16);
852 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
857 int UtcDaliAnimatedImageVisualStopBehavior02(void)
859 ToolkitTestApplication application;
860 TestGlAbstraction& gl = application.GetGlAbstraction();
862 Property::Array urls;
863 CopyUrlsIntoArray(urls);
866 Property::Map propertyMap;
867 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
868 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
869 propertyMap.Insert(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME);
870 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
871 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 2);
872 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
874 VisualFactory factory = VisualFactory::Get();
875 Visual::Base visual = factory.CreateVisual(propertyMap);
877 // Expect that a batch of 4 textures has been requested. These will be serially loaded
880 DummyControl dummyControl = DummyControl::New(true);
881 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
882 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
884 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
885 application.GetScene().Add(dummyControl);
887 tet_infoline("Ready the visual after the visual is on stage");
888 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
890 TraceCallStack& textureTrace = gl.GetTextureTrace();
891 textureTrace.Enable(true);
893 application.SendNotification();
894 application.Render(20);
896 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 2, TEST_LOCATION);
898 Test::EmitGlobalTimerSignal();
900 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
902 application.SendNotification();
903 application.Render(20);
905 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_LOCATION);
907 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::STOP, Property::Map());
909 tet_infoline("Ready the visual after the visual is on stage");
910 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
912 application.SendNotification();
913 application.Render(20);
915 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_LOCATION);
917 dummyControl.Unparent();
919 tet_infoline("Test that removing the visual from stage deletes all textures");
920 application.SendNotification();
921 application.Render(16);
922 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
927 int UtcDaliAnimatedImageVisualAnimatedImage01(void)
929 ToolkitTestApplication application;
930 TestGlAbstraction& gl = application.GetGlAbstraction();
932 tet_infoline("Set cache size same as GIF frame, and try to load same image at another ImageView");
934 Property::Map propertyMap;
935 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
936 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
937 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
938 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 4);
939 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
941 VisualFactory factory = VisualFactory::Get();
942 Visual::Base visual = factory.CreateVisual(propertyMap);
944 // Expect that a batch of 4 textures has been requested. These will be serially loaded
947 DummyControl dummyControl = DummyControl::New(true);
948 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
949 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
951 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
952 application.GetScene().Add(dummyControl);
954 application.SendNotification();
955 application.Render();
957 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
959 // Batch 2 frames. Now frame 0, 1 cached.
960 application.SendNotification();
961 application.Render(20);
963 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 2, TEST_LOCATION);
965 tet_infoline("Test that a timer has been started");
967 TraceCallStack& textureTrace = gl.GetTextureTrace();
968 textureTrace.Enable(true);
970 Test::EmitGlobalTimerSignal();
972 application.SendNotification();
973 application.Render();
975 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
977 // 0 frame removed. and after, batch 2 frames. Now frame 1, 2, 3 cached.
978 application.SendNotification();
979 application.Render(20);
981 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 4, TEST_LOCATION);
983 Visual::Base visual2 = factory.CreateVisual(propertyMap);
984 DummyControl dummyControl2 = DummyControl::New(true);
985 Impl::DummyControl& dummyImpl2 = static_cast<Impl::DummyControl&>(dummyControl2.GetImplementation());
986 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual2);
987 application.GetScene().Add(dummyControl2);
989 tet_infoline("Add new view with same url");
991 application.SendNotification();
992 application.Render();
994 // Note that we only re-load 0 frame.
995 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
997 tet_infoline("Test that we don't try to re-load new image cause it cached");
998 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 1), false, TEST_LOCATION);
1000 // Batch 2 frames. Now visual frame 1, 2, 3 cached and visual2 frame 0, 1 cached.
1001 application.SendNotification();
1002 application.Render(20);
1004 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 5, TEST_LOCATION);
1006 textureTrace.Reset();
1008 tet_infoline("Load some many frames");
1010 const int repeatCount = 10;
1011 for(int repeat = 0; repeat < repeatCount; ++repeat)
1013 Test::EmitGlobalTimerSignal();
1014 application.SendNotification();
1015 application.Render(2000);
1018 DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); // A new texture should NOT be generated.
1019 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 5, TEST_LOCATION);
1021 textureTrace.Reset();
1023 dummyControl.Unparent();
1024 dummyControl2.Unparent();
1026 tet_infoline("Test that removing the visual from stage deletes all textures");
1027 application.SendNotification();
1028 application.Render(20);
1029 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1034 int UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask01(void)
1036 ToolkitTestApplication application;
1037 tet_infoline("UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask01 for CPU Alpha Masking");
1038 TestGlAbstraction& gl = application.GetGlAbstraction();
1041 Property::Map propertyMap;
1042 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
1043 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
1044 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1045 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 4);
1046 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
1047 propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME);
1049 VisualFactory factory = VisualFactory::Get();
1050 Visual::Base visual = factory.CreateVisual(propertyMap);
1052 DummyControl dummyControl = DummyControl::New(true);
1053 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1054 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1056 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1057 application.GetScene().Add(dummyControl);
1059 application.SendNotification();
1060 application.Render();
1062 // load two frame(batch size), load mask image, and request two masking
1063 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(5), true, TEST_LOCATION);
1065 application.SendNotification();
1066 application.Render(20);
1068 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 2, TEST_LOCATION);
1070 dummyControl.Unparent();
1072 tet_infoline("Test that removing the visual from stage deletes all textures");
1073 application.SendNotification();
1074 application.Render(20);
1075 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1080 int UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask02(void)
1082 ToolkitTestApplication application;
1083 tet_infoline("UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask02 for GPU Alpha Masking");
1084 TestGlAbstraction& gl = application.GetGlAbstraction();
1087 Property::Map propertyMap;
1088 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
1089 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
1090 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1091 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 4);
1092 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
1093 propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME);
1094 propertyMap.Insert(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING);
1096 VisualFactory factory = VisualFactory::Get();
1097 Visual::Base visual = factory.CreateVisual(propertyMap);
1099 DummyControl dummyControl = DummyControl::New(true);
1100 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1101 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1103 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1104 application.GetScene().Add(dummyControl);
1106 Property::Map attributes;
1107 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::STOP, attributes);
1109 application.SendNotification();
1110 application.Render();
1112 // load two frame(batch size), load mask image, and request two masking
1113 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1115 application.SendNotification();
1116 application.Render(20);
1118 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1120 dummyControl.Unparent();
1122 tet_infoline("Test that removing the visual from stage deletes all textures");
1123 application.SendNotification();
1124 application.Render(20);
1125 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1130 int UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask03(void)
1132 ToolkitTestApplication application;
1133 tet_infoline("UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask03 for GPU Alpha Masking with broken mask texture");
1134 TestGlAbstraction& gl = application.GetGlAbstraction();
1137 Property::Map propertyMap;
1138 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
1139 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
1140 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1141 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 4);
1142 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
1143 propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, "");
1144 propertyMap.Insert(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING);
1146 VisualFactory factory = VisualFactory::Get();
1147 Visual::Base visual = factory.CreateVisual(propertyMap);
1149 DummyControl dummyControl = DummyControl::New(true);
1150 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1151 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1153 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1154 application.GetScene().Add(dummyControl);
1156 application.SendNotification();
1157 application.Render();
1159 // load two frame(batch size), load mask image, and request two masking
1160 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1162 application.SendNotification();
1163 application.Render(20);
1165 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 3, TEST_LOCATION);
1167 dummyControl.Unparent();
1169 tet_infoline("Test that removing the visual from stage deletes all textures");
1170 application.SendNotification();
1171 application.Render(20);
1172 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1177 int UtcDaliAnimatedImageVisualMultiImage01(void)
1179 ToolkitTestApplication application;
1180 TestGlAbstraction& gl = application.GetGlAbstraction();
1182 Property::Array urls;
1183 CopyUrlsIntoArray(urls);
1186 Property::Map propertyMap;
1187 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1188 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1189 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 4);
1190 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 8);
1191 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1193 VisualFactory factory = VisualFactory::Get();
1194 Visual::Base visual = factory.CreateVisual(propertyMap);
1196 // Expect that a batch of 4 textures has been requested. These will be serially loaded
1199 DummyControl dummyControl = DummyControl::New(true);
1200 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1201 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1203 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1204 application.GetScene().Add(dummyControl);
1205 application.SendNotification();
1206 application.Render(16);
1208 tet_infoline("Ready the visual after the visual is on stage");
1209 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1211 tet_infoline("Test that a timer has been started");
1212 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1214 TraceCallStack& textureTrace = gl.GetTextureTrace();
1215 textureTrace.Enable(true);
1217 application.SendNotification();
1218 application.Render(16);
1220 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 4, TEST_LOCATION);
1221 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1223 tet_infoline("Test that after 1 tick, and file loads completed, that we have 7 textures");
1224 Test::EmitGlobalTimerSignal();
1226 // Expect the second batch has been requested
1227 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1229 application.SendNotification();
1230 application.Render(16);
1231 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1233 tet_infoline("Test that after 2 ticks that we have 6 textures");
1235 Test::EmitGlobalTimerSignal();
1236 application.SendNotification();
1237 application.Render(16);
1238 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 6, TEST_LOCATION);
1240 tet_infoline("And that at least 2 textures were requested");
1241 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1242 application.SendNotification();
1243 application.Render(16);
1244 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 8, TEST_LOCATION);
1246 tet_infoline("Test that after 3rd tick that we have 7 textures and 1 request");
1247 Test::EmitGlobalTimerSignal();
1248 application.SendNotification();
1249 application.Render(16);
1250 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1252 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1253 application.SendNotification();
1254 application.Render(16);
1255 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 8, TEST_LOCATION);
1257 dummyControl.Unparent();
1259 tet_infoline("Test that removing the visual from stage deletes all textures");
1260 application.SendNotification();
1261 application.Render(16);
1262 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1267 int UtcDaliAnimatedImageVisualMultiImage02(void)
1269 ToolkitTestApplication application;
1270 TestGlAbstraction& gl = application.GetGlAbstraction();
1272 tet_infoline("Test that the animated visual has different batch and cache size.");
1275 Property::Array urls;
1276 CopyUrlsIntoArray(urls);
1278 Property::Map propertyMap;
1279 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1280 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1281 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 0);
1282 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 0);
1283 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1285 VisualFactory factory = VisualFactory::Get();
1286 Visual::Base visual = factory.CreateVisual(propertyMap); // TexMgr::Request load tId:0
1288 // Check the batch size and cache size need to have minimum 2.
1289 Property::Map resultMap;
1290 visual.CreatePropertyMap(resultMap);
1291 Property::Value* value = resultMap.Find(ImageVisual::Property::BATCH_SIZE, "batchSize");
1292 DALI_TEST_CHECK(value);
1293 DALI_TEST_EQUALS(value->Get<int>(), 2, TEST_LOCATION);
1294 value = resultMap.Find(ImageVisual::Property::CACHE_SIZE, "cacheSize");
1295 DALI_TEST_CHECK(value);
1296 DALI_TEST_EQUALS(value->Get<int>(), 2, TEST_LOCATION);
1299 // Batch size is 2 and cache size is 3
1300 propertyMap.Clear();
1301 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1302 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1303 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1304 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 3);
1305 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1307 visual = factory.CreateVisual(propertyMap); // TexMgr::Request load tId:0
1309 // Expect that each image is loaded each tick
1310 DummyControl dummyControl = DummyControl::New(true);
1311 Impl::DummyControl& dummyImpl1 = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1312 dummyImpl1.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1315 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1316 application.GetScene().Add(dummyControl);
1317 application.SendNotification();
1318 application.Render(16);
1320 tet_infoline("Ready the visual after the visual is on window");
1321 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1322 application.SendNotification();
1323 application.Render(16); //glGenTextures 1 and 2
1324 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_LOCATION);
1326 tet_infoline("Test that each tick, a new image is requested");
1327 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:0
1328 application.SendNotification();
1329 application.Render(16);
1330 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1331 application.SendNotification();
1332 application.Render(16); //glGenTextures 3
1333 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1335 tet_infoline("Test that each tick, a new image is requested");
1336 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:1
1337 application.SendNotification();
1338 application.Render(16);
1339 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1340 application.SendNotification();
1341 application.Render(16); //glGenTextures 4
1342 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1344 dummyImpl1.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1345 dummyControl.Unparent();
1347 // Ensure to remove cached texture. (Since we support lazy cache removal)
1348 application.SendNotification();
1349 application.Render(16);
1350 application.SendNotification();
1351 application.Render(16);
1353 // Batch size is 9 and cache size is 4
1354 propertyMap.Clear();
1355 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1356 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1357 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 3);
1358 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 7);
1359 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1361 visual = factory.CreateVisual(propertyMap); // TexMgr::Request load tId:0
1363 // Expect that each image is loaded each tick
1364 dummyControl = DummyControl::New(true);
1365 Impl::DummyControl& dummyImpl2 = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1366 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1369 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1370 application.GetScene().Add(dummyControl);
1371 application.SendNotification();
1372 application.Render(16);
1374 tet_infoline("Ready the visual after the visual is on window");
1375 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1376 application.SendNotification();
1377 application.Render(16); //glGenTextures 1, 2, and 3
1378 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1380 tet_infoline("Test that each tick, a new image is requested");
1381 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:0
1382 application.SendNotification();
1383 application.Render(16);
1384 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1385 application.SendNotification();
1386 application.Render(16); //glGenTextures 4, 5, and 6
1387 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 5, TEST_LOCATION);
1389 tet_infoline("Test that each tick, a new image is requested");
1390 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:1
1391 application.SendNotification();
1392 application.Render(16);
1393 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1394 application.SendNotification();
1395 application.Render(16); //glGenTextures 7, 1, and 2
1396 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1398 tet_infoline("Test that each tick, a new image is requested");
1399 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:2
1400 application.SendNotification();
1401 application.Render(16);
1402 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1403 application.SendNotification();
1404 application.Render(16); //glGenTextures 3
1405 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1407 dummyControl.Unparent();
1409 tet_infoline("Test that removing the visual from window deletes all textures");
1410 application.SendNotification();
1411 application.Render(16);
1412 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1417 int UtcDaliAnimatedImageVisualMultiImage03(void)
1419 ToolkitTestApplication application;
1420 TestGlAbstraction& gl = application.GetGlAbstraction();
1423 Property::Array urls1, urls2;
1424 CopyUrlsIntoArray(urls1);
1425 CopyUrlsIntoArray(urls2);
1427 Property::Map animatedImageMap1;
1428 animatedImageMap1.Insert(Visual::Property::TYPE, Visual::IMAGE);
1429 animatedImageMap1.Insert(ImageVisual::Property::URL, Property::Value(urls1));
1430 animatedImageMap1.Insert(ImageVisual::Property::BATCH_SIZE, 3);
1431 animatedImageMap1.Insert(ImageVisual::Property::CACHE_SIZE, 3);
1432 animatedImageMap1.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1434 Property::Map animatedImageMap2;
1435 animatedImageMap2.Insert(Visual::Property::TYPE, Visual::IMAGE);
1436 animatedImageMap2.Insert(ImageVisual::Property::URL, Property::Value(urls2));
1437 animatedImageMap2.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1438 animatedImageMap2.Insert(ImageVisual::Property::CACHE_SIZE, 2);
1439 animatedImageMap2.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1441 VisualFactory factory = VisualFactory::Get();
1442 Visual::Base animatedImageVisual1 = factory.CreateVisual(animatedImageMap1);
1444 tet_infoline("Create two image views with the same URLs, offset by 1 frame.");
1446 DummyControl dummyControl1 = DummyControl::New(true);
1447 Impl::DummyControl& dummyImpl1 = static_cast<Impl::DummyControl&>(dummyControl1.GetImplementation());
1448 dummyImpl1.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual1);
1449 dummyControl1.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1450 application.GetScene().Add(dummyControl1);
1452 application.SendNotification();
1453 application.Render(16);
1455 tet_infoline("Ready the requested image after the first visual is on stage");
1456 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1457 application.SendNotification();
1458 application.Render(16);
1459 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1461 Visual::Base animatedImageVisual2 = factory.CreateVisual(animatedImageMap2);
1462 DummyControl dummyControl2 = DummyControl::New(true);
1463 Impl::DummyControl& dummyImpl2 = static_cast<Impl::DummyControl&>(dummyControl2.GetImplementation());
1464 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual2);
1465 dummyControl2.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1466 application.GetScene().Add(dummyControl2);
1467 application.SendNotification();
1468 application.Render(16);
1470 tet_infoline("The texture cache should be holding the requested images; check that the renderer has a texture");
1471 TextureSet ts = dummyControl2.GetRendererAt(0).GetTextures();
1472 Texture t1 = ts.GetTexture(0);
1473 DALI_TEST_EQUALS(ts.GetTextureCount(), 1, TEST_LOCATION);
1475 tet_infoline("Test that on the first tick, 1 new image is requested");
1476 Test::EmitGlobalTimerSignal(); // Both visuals should tick
1478 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1479 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1481 ts = dummyControl2.GetRendererAt(0).GetTextures();
1482 Texture t2 = ts.GetTexture(0);
1483 DALI_TEST_CHECK(t1 != t2);
1485 dummyControl1.Unparent();
1486 dummyControl2.Unparent();
1488 tet_infoline("Test that removing the visual from stage deletes all textures");
1489 application.SendNotification();
1490 application.Render(16);
1491 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1496 int UtcDaliAnimatedImageVisualMultiImage04(void)
1498 ToolkitTestApplication application;
1499 TestGlAbstraction& gl = application.GetGlAbstraction();
1500 TraceCallStack& textureTrace = gl.GetTextureTrace();
1501 textureTrace.Enable(true);
1503 tet_infoline("Test that if the cache size is the same as the number of urls, that once the cache is full, no new images are loaded");
1505 Property::Array urls;
1506 CopyUrlsIntoArray(urls);
1509 Property::Map propertyMap;
1510 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1511 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1512 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 6);
1513 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 11);
1514 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1516 VisualFactory factory = VisualFactory::Get();
1517 Visual::Base visual = factory.CreateVisual(propertyMap);
1519 tet_infoline("Expect that a batch of 7 textures has been requested.");
1521 DummyControl dummyControl = DummyControl::New(true);
1522 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1523 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1525 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1526 application.GetScene().Add(dummyControl);
1527 application.SendNotification();
1528 application.Render(16);
1530 tet_infoline("Wait for the first batch to complete");
1531 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(6), true, TEST_LOCATION);
1533 tet_infoline("Test that a timer has been started");
1534 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1536 application.SendNotification();
1537 application.Render(16);
1539 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 6, TEST_LOCATION);
1540 tet_infoline("Test that after 1 tick, and 5 file loads completed, that we have 11 textures");
1541 Test::EmitGlobalTimerSignal();
1542 application.SendNotification();
1543 application.Render(16);
1545 // Expect the second batch has been requested
1546 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(5), true, TEST_LOCATION);
1548 application.SendNotification();
1549 application.Render(16);
1550 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1552 tet_infoline("Test that after 2 ticks that we have 11 textures and no requests");
1554 Test::EmitGlobalTimerSignal();
1555 application.SendNotification();
1556 application.Render(16);
1557 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 5), false, TEST_LOCATION);
1558 application.SendNotification();
1559 application.Render(16);
1560 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1562 tet_infoline("Test that after 3rd tick that we have 11 textures and no requests");
1563 Test::EmitGlobalTimerSignal();
1564 application.SendNotification();
1565 application.Render(16);
1567 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 5), false, TEST_LOCATION);
1568 application.SendNotification();
1569 application.Render(16);
1570 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1572 dummyControl.Unparent();
1575 tet_infoline("Test that removing the visual from stage deletes all textures");
1576 application.SendNotification();
1577 application.Render(16);
1578 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1583 int UtcDaliAnimatedImageVisualMultiImage05(void)
1585 ToolkitTestApplication application;
1586 TestGlAbstraction& gl = application.GetGlAbstraction();
1588 tet_infoline("Test that if the cache size is the same as the number of urls, that removing a partially loaded visual removes all textures");
1590 Property::Array urls;
1591 CopyUrlsIntoArray(urls);
1594 Property::Map propertyMap;
1595 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1596 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1597 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 4);
1598 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 11);
1599 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1601 VisualFactory factory = VisualFactory::Get();
1602 Visual::Base visual = factory.CreateVisual(propertyMap);
1604 tet_infoline("Expect that a batch of 4 textures has been requested.");
1606 DummyControl dummyControl = DummyControl::New(true);
1607 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1608 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1610 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1611 application.GetScene().Add(dummyControl);
1612 application.SendNotification();
1613 application.Render(16);
1615 tet_infoline("Wait for the first batch to complete");
1616 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1618 tet_infoline("Test that a timer has been started");
1619 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1621 application.SendNotification();
1622 application.Render(16);
1624 tet_infoline("Test that a timer has been started");
1625 Test::EmitGlobalTimerSignal();
1626 application.SendNotification();
1627 application.Render(16);
1629 dummyControl.Unparent();
1632 application.SendNotification();
1633 application.Render(16);
1634 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1636 tet_infoline("Test that pending batch of image loads are cancelled instead of uploaded");
1637 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1638 application.SendNotification();
1639 application.Render(16);
1640 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1645 void TestLoopCount(ToolkitTestApplication& application, DummyControl& dummyControl, uint16_t frameCount, uint16_t loopCount, const char* location)
1647 TestGlAbstraction& gl = application.GetGlAbstraction();
1648 TraceCallStack& textureTrace = gl.GetTextureTrace();
1650 textureTrace.Enable(true);
1651 application.GetScene().Add(dummyControl);
1653 application.SendNotification();
1654 application.Render(16);
1656 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_INNER_LOCATION(location));
1658 application.SendNotification();
1659 application.Render();
1661 tet_infoline("Test that a timer has been created");
1662 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_INNER_LOCATION(location));
1664 for(uint16_t i = 0; i < loopCount; i++)
1666 for(uint16_t j = 0; j < frameCount; j++)
1668 if(i == 0 && j == 0)
1670 continue; // Because first frame is already showed and we call 2nd frame at the first time of timer animation.
1672 tet_printf("Test that after %u ticks, and we have %u frame \n", j + 1u, j + 1u);
1673 Test::EmitGlobalTimerSignal();
1674 application.SendNotification();
1675 application.Render(16);
1677 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_INNER_LOCATION(location));
1679 application.SendNotification();
1680 application.Render();
1681 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_INNER_LOCATION(location));
1682 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_INNER_LOCATION(location));
1684 tet_printf("Test Loop %u \n\n", i + 1u);
1687 tet_printf("Test that after %u loops, and we have no frame. Timer should stop \n", loopCount);
1688 Test::EmitGlobalTimerSignal();
1689 application.SendNotification();
1690 application.Render(16);
1691 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_INNER_LOCATION(location));
1693 dummyControl.Unparent();
1696 int UtcDaliAnimatedImageVisualLoopCount(void)
1698 ToolkitTestApplication application;
1700 tet_infoline("UtcDaliAnimatedImageVisualLoopCount");
1703 // request AnimatedImageVisual with a property map
1704 // Test with no (0) loop count
1705 VisualFactory factory = VisualFactory::Get();
1706 Visual::Base animatedImageVisual = factory.CreateVisual(
1708 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1709 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1710 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1711 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1712 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1713 .Add(DevelImageVisual::Property::LOOP_COUNT, 0));
1715 DummyControl dummyControl = DummyControl::New(true);
1716 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1717 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1718 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1720 TestLoopCount(application, dummyControl, 4, 0, TEST_LOCATION);
1722 dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1723 animatedImageVisual.Reset();
1725 application.SendNotification();
1726 application.Render(16);
1728 // Test with no (1) loop count. Request AnimatedImageVisual with a property map
1729 animatedImageVisual = factory.CreateVisual(
1731 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1732 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1733 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1734 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1735 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1736 .Add(DevelImageVisual::Property::LOOP_COUNT, 1));
1738 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1740 TestLoopCount(application, dummyControl, 4, 1, TEST_LOCATION);
1742 dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1743 animatedImageVisual.Reset();
1745 application.SendNotification();
1746 application.Render(16);
1748 // Test with no (100) loop count. Request AnimatedImageVisual with a property map
1749 animatedImageVisual = factory.CreateVisual(
1751 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1752 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1753 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1754 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1755 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1756 .Add(DevelImageVisual::Property::LOOP_COUNT, 100));
1758 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1760 TestLoopCount(application, dummyControl, 4, 100, TEST_LOCATION);
1765 int UtcDaliAnimatedImageVisualPlayback(void)
1767 ToolkitTestApplication application;
1768 TestGlAbstraction& gl = application.GetGlAbstraction();
1769 TraceCallStack& textureTrace = gl.GetTextureTrace();
1771 tet_infoline("UtcDaliAnimatedImageVisualPlayback");
1774 // request AnimatedImageVisual with a property map
1775 // Test with forever (-1) loop count
1776 VisualFactory factory = VisualFactory::Get();
1777 Visual::Base animatedImageVisual = factory.CreateVisual(
1779 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1780 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1781 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1782 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1783 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1784 .Add(DevelImageVisual::Property::LOOP_COUNT, -1));
1786 DummyControl dummyControl = DummyControl::New(true);
1787 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1788 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1789 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1791 textureTrace.Enable(true);
1792 application.GetScene().Add(dummyControl);
1793 application.SendNotification();
1794 application.Render(16);
1796 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1798 application.SendNotification();
1799 application.Render();
1801 tet_infoline("Test that a timer has been created");
1802 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1804 Test::EmitGlobalTimerSignal();
1805 application.SendNotification();
1806 application.Render(16);
1808 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1810 application.SendNotification();
1811 application.Render();
1812 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1814 Property::Map attributes;
1815 tet_infoline("Test Pause action. Timer should stop after Pause action");
1816 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PAUSE, attributes);
1817 Test::EmitGlobalTimerSignal();
1818 application.SendNotification();
1819 application.Render(16);
1820 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_LOCATION);
1822 tet_infoline("Test Play action. Timer should Restart after Play action");
1823 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PLAY, attributes);
1824 Test::EmitGlobalTimerSignal();
1825 application.SendNotification();
1826 application.Render(16);
1828 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1830 application.SendNotification();
1831 application.Render();
1832 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1834 tet_infoline("Test Stop action. Timer should stop after Stop action");
1835 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::STOP, attributes);
1836 Test::EmitGlobalTimerSignal();
1837 application.SendNotification();
1838 application.Render(16);
1839 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_LOCATION);
1841 tet_infoline("Test Play action. Timer should Restart after Play action");
1842 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PLAY, attributes);
1843 Test::EmitGlobalTimerSignal();
1844 application.SendNotification();
1845 application.Render(16);
1847 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1849 application.SendNotification();
1850 application.Render();
1851 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1853 dummyControl.Unparent();
1859 int UtcDaliAnimatedImageVisualWrapMode(void)
1861 ToolkitTestApplication application;
1862 tet_infoline("UtcDaliAnimatedImageVisualWrapMode");
1864 VisualFactory factory = VisualFactory::Get();
1865 DALI_TEST_CHECK(factory);
1867 // Test wrap mode in animated image visual.
1868 const int width = 950;
1869 const int height = 1080;
1870 const Vector4 pixelArea(0.0f, 0.0f, 950 / 40, 1.0f);
1872 Property::Map propertyMap;
1873 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE);
1874 propertyMap.Insert(ImageVisual::Property::URL, TEST_WEBP_FILE_NAME);
1875 propertyMap.Insert(ImageVisual::Property::PIXEL_AREA, pixelArea);
1876 propertyMap.Insert(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT);
1878 Visual::Base visual = factory.CreateVisual(propertyMap);
1879 DALI_TEST_CHECK(visual);
1881 TestGlAbstraction& gl = application.GetGlAbstraction();
1882 TraceCallStack& textureTrace = gl.GetTextureTrace();
1883 textureTrace.Enable(true);
1884 textureTrace.EnableLogging(true);
1885 TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
1886 texParameterTrace.Enable(true);
1887 texParameterTrace.EnableLogging(true);
1889 DummyControl actor = DummyControl::New();
1890 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1891 dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual);
1892 actor.SetProperty(Actor::Property::SIZE, Vector2(width, height));
1893 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1895 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
1896 application.GetScene().Add(actor);
1897 application.SendNotification();
1898 application.Render();
1900 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1902 application.SendNotification();
1903 application.Render();
1905 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
1907 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1909 // WITHOUT atlasing, the wrapping is handled by setting gl texture parameters
1910 std::stringstream out;
1911 out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_REPEAT;
1912 DALI_TEST_CHECK(texParameterTrace.FindMethodAndParams("TexParameteri", out.str()));
1914 // test the uniforms which used to handle the wrap mode
1915 Renderer renderer = actor.GetRendererAt(0u);
1916 DALI_TEST_CHECK(renderer);
1918 Property::Value pixelAreaValue = renderer.GetProperty(renderer.GetPropertyIndex("pixelArea"));
1919 DALI_TEST_EQUALS(pixelAreaValue.Get<Vector4>(), pixelArea, TEST_LOCATION);
1922 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
1927 int UtcDaliAnimatedImageVisualDesiredSize(void)
1929 ToolkitTestApplication application;
1930 tet_infoline("UtcDaliAnimatedImageVisualDesiredSize");
1932 TestGlAbstraction& gl = application.GetGlAbstraction();
1933 TraceCallStack& textureTrace = gl.GetTextureTrace();
1935 // Set desiredWidth < 37 and desiredHeight < 50, which is smaller than original image's size.
1936 int desiredWidth = 15;
1937 int desiredHeight = 20;
1939 Visual::Base visual = VisualFactory::Get().CreateVisual(TEST_GIF_FILE_NAME, ImageDimensions(desiredWidth, desiredHeight));
1940 DALI_TEST_CHECK(visual);
1942 DummyControl actor = DummyControl::New(true);
1943 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1944 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1946 application.GetScene().Add(actor);
1948 application.SendNotification();
1949 application.Render();
1951 // Trigger count is 2 - first frame and second frame.
1952 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1954 textureTrace.Enable(true);
1955 textureTrace.EnableLogging(true);
1957 application.SendNotification();
1958 application.Render();
1961 std::stringstream out;
1962 out << GL_TEXTURE_2D << ", " << 0u << ", " << desiredWidth << ", " << desiredHeight;
1963 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str()));
1966 // Unparent to make next trigger
1969 application.SendNotification();
1970 application.Render();
1973 actor.SetProperty(Actor::Property::SIZE, Vector2(300.0f, 300.0f));
1974 application.GetScene().Add(actor);
1976 application.SendNotification();
1977 application.Render();
1979 // Trigger count is 2 - first frame and second frame.
1980 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1982 textureTrace.Reset();
1984 application.SendNotification();
1985 application.Render();
1988 std::stringstream out;
1989 out << GL_TEXTURE_2D << ", " << 0u << ", " << desiredWidth << ", " << desiredHeight;
1990 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str())); // The size should not be changed