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 // Batch size is 9 and cache size is 4
1348 propertyMap.Clear();
1349 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1350 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1351 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 3);
1352 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 7);
1353 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1355 visual = factory.CreateVisual(propertyMap); // TexMgr::Request load tId:0
1357 // Expect that each image is loaded each tick
1358 dummyControl = DummyControl::New(true);
1359 Impl::DummyControl& dummyImpl2 = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1360 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1363 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1364 application.GetScene().Add(dummyControl);
1365 application.SendNotification();
1366 application.Render(16);
1368 tet_infoline("Ready the visual after the visual is on window");
1369 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1370 application.SendNotification();
1371 application.Render(16); //glGenTextures 1, 2, and 3
1372 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1374 tet_infoline("Test that each tick, a new image is requested");
1375 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:0
1376 application.SendNotification();
1377 application.Render(16);
1378 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1379 application.SendNotification();
1380 application.Render(16); //glGenTextures 4, 5, and 6
1381 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 5, TEST_LOCATION);
1383 tet_infoline("Test that each tick, a new image is requested");
1384 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:1
1385 application.SendNotification();
1386 application.Render(16);
1387 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1388 application.SendNotification();
1389 application.Render(16); //glGenTextures 7, 1, and 2
1390 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1392 tet_infoline("Test that each tick, a new image is requested");
1393 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:2
1394 application.SendNotification();
1395 application.Render(16);
1396 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1397 application.SendNotification();
1398 application.Render(16); //glGenTextures 3
1399 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1401 dummyControl.Unparent();
1403 tet_infoline("Test that removing the visual from window deletes all textures");
1404 application.SendNotification();
1405 application.Render(16);
1406 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1411 int UtcDaliAnimatedImageVisualMultiImage03(void)
1413 ToolkitTestApplication application;
1414 TestGlAbstraction& gl = application.GetGlAbstraction();
1417 Property::Array urls1, urls2;
1418 CopyUrlsIntoArray(urls1);
1419 CopyUrlsIntoArray(urls2);
1421 Property::Map animatedImageMap1;
1422 animatedImageMap1.Insert(Visual::Property::TYPE, Visual::IMAGE);
1423 animatedImageMap1.Insert(ImageVisual::Property::URL, Property::Value(urls1));
1424 animatedImageMap1.Insert(ImageVisual::Property::BATCH_SIZE, 3);
1425 animatedImageMap1.Insert(ImageVisual::Property::CACHE_SIZE, 3);
1426 animatedImageMap1.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1428 Property::Map animatedImageMap2;
1429 animatedImageMap2.Insert(Visual::Property::TYPE, Visual::IMAGE);
1430 animatedImageMap2.Insert(ImageVisual::Property::URL, Property::Value(urls2));
1431 animatedImageMap2.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1432 animatedImageMap2.Insert(ImageVisual::Property::CACHE_SIZE, 2);
1433 animatedImageMap2.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1435 VisualFactory factory = VisualFactory::Get();
1436 Visual::Base animatedImageVisual1 = factory.CreateVisual(animatedImageMap1);
1438 tet_infoline("Create two image views with the same URLs, offset by 1 frame.");
1440 DummyControl dummyControl1 = DummyControl::New(true);
1441 Impl::DummyControl& dummyImpl1 = static_cast<Impl::DummyControl&>(dummyControl1.GetImplementation());
1442 dummyImpl1.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual1);
1443 dummyControl1.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1444 application.GetScene().Add(dummyControl1);
1446 application.SendNotification();
1447 application.Render(16);
1449 tet_infoline("Ready the requested image after the first visual is on stage");
1450 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1451 application.SendNotification();
1452 application.Render(16);
1453 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1455 Visual::Base animatedImageVisual2 = factory.CreateVisual(animatedImageMap2);
1456 DummyControl dummyControl2 = DummyControl::New(true);
1457 Impl::DummyControl& dummyImpl2 = static_cast<Impl::DummyControl&>(dummyControl2.GetImplementation());
1458 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual2);
1459 dummyControl2.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1460 application.GetScene().Add(dummyControl2);
1461 application.SendNotification();
1462 application.Render(16);
1464 tet_infoline("The texture cache should be holding the requested images; check that the renderer has a texture");
1465 TextureSet ts = dummyControl2.GetRendererAt(0).GetTextures();
1466 Texture t1 = ts.GetTexture(0);
1467 DALI_TEST_EQUALS(ts.GetTextureCount(), 1, TEST_LOCATION);
1469 tet_infoline("Test that on the first tick, 1 new image is requested");
1470 Test::EmitGlobalTimerSignal(); // Both visuals should tick
1472 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1473 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1475 ts = dummyControl2.GetRendererAt(0).GetTextures();
1476 Texture t2 = ts.GetTexture(0);
1477 DALI_TEST_CHECK(t1 != t2);
1479 dummyControl1.Unparent();
1480 dummyControl2.Unparent();
1482 tet_infoline("Test that removing the visual from stage deletes all textures");
1483 application.SendNotification();
1484 application.Render(16);
1485 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1490 int UtcDaliAnimatedImageVisualMultiImage04(void)
1492 ToolkitTestApplication application;
1493 TestGlAbstraction& gl = application.GetGlAbstraction();
1494 TraceCallStack& textureTrace = gl.GetTextureTrace();
1495 textureTrace.Enable(true);
1497 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");
1499 Property::Array urls;
1500 CopyUrlsIntoArray(urls);
1503 Property::Map propertyMap;
1504 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1505 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1506 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 6);
1507 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 11);
1508 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1510 VisualFactory factory = VisualFactory::Get();
1511 Visual::Base visual = factory.CreateVisual(propertyMap);
1513 tet_infoline("Expect that a batch of 7 textures has been requested.");
1515 DummyControl dummyControl = DummyControl::New(true);
1516 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1517 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1519 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1520 application.GetScene().Add(dummyControl);
1521 application.SendNotification();
1522 application.Render(16);
1524 tet_infoline("Wait for the first batch to complete");
1525 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(6), true, TEST_LOCATION);
1527 tet_infoline("Test that a timer has been started");
1528 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1530 application.SendNotification();
1531 application.Render(16);
1533 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 6, TEST_LOCATION);
1534 tet_infoline("Test that after 1 tick, and 5 file loads completed, that we have 11 textures");
1535 Test::EmitGlobalTimerSignal();
1536 application.SendNotification();
1537 application.Render(16);
1539 // Expect the second batch has been requested
1540 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(5), true, TEST_LOCATION);
1542 application.SendNotification();
1543 application.Render(16);
1544 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1546 tet_infoline("Test that after 2 ticks that we have 11 textures and no requests");
1548 Test::EmitGlobalTimerSignal();
1549 application.SendNotification();
1550 application.Render(16);
1551 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 5), false, TEST_LOCATION);
1552 application.SendNotification();
1553 application.Render(16);
1554 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1556 tet_infoline("Test that after 3rd tick that we have 11 textures and no requests");
1557 Test::EmitGlobalTimerSignal();
1558 application.SendNotification();
1559 application.Render(16);
1561 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 5), false, TEST_LOCATION);
1562 application.SendNotification();
1563 application.Render(16);
1564 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1566 dummyControl.Unparent();
1569 tet_infoline("Test that removing the visual from stage deletes all textures");
1570 application.SendNotification();
1571 application.Render(16);
1572 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1577 int UtcDaliAnimatedImageVisualMultiImage05(void)
1579 ToolkitTestApplication application;
1580 TestGlAbstraction& gl = application.GetGlAbstraction();
1582 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");
1584 Property::Array urls;
1585 CopyUrlsIntoArray(urls);
1588 Property::Map propertyMap;
1589 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1590 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1591 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 4);
1592 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 11);
1593 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1595 VisualFactory factory = VisualFactory::Get();
1596 Visual::Base visual = factory.CreateVisual(propertyMap);
1598 tet_infoline("Expect that a batch of 4 textures has been requested.");
1600 DummyControl dummyControl = DummyControl::New(true);
1601 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1602 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1604 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1605 application.GetScene().Add(dummyControl);
1606 application.SendNotification();
1607 application.Render(16);
1609 tet_infoline("Wait for the first batch to complete");
1610 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1612 tet_infoline("Test that a timer has been started");
1613 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1615 application.SendNotification();
1616 application.Render(16);
1618 tet_infoline("Test that a timer has been started");
1619 Test::EmitGlobalTimerSignal();
1620 application.SendNotification();
1621 application.Render(16);
1623 dummyControl.Unparent();
1626 application.SendNotification();
1627 application.Render(16);
1628 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1630 tet_infoline("Test that pending batch of image loads are cancelled instead of uploaded");
1631 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1632 application.SendNotification();
1633 application.Render(16);
1634 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1639 void TestLoopCount(ToolkitTestApplication& application, DummyControl& dummyControl, uint16_t frameCount, uint16_t loopCount, const char* location)
1641 TestGlAbstraction& gl = application.GetGlAbstraction();
1642 TraceCallStack& textureTrace = gl.GetTextureTrace();
1644 textureTrace.Enable(true);
1645 application.GetScene().Add(dummyControl);
1647 application.SendNotification();
1648 application.Render(16);
1650 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_INNER_LOCATION(location));
1652 application.SendNotification();
1653 application.Render();
1655 tet_infoline("Test that a timer has been created");
1656 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_INNER_LOCATION(location));
1658 for(uint16_t i = 0; i < loopCount; i++)
1660 for(uint16_t j = 0; j < frameCount; j++)
1662 if(i == 0 && j == 0)
1664 continue; // Because first frame is already showed and we call 2nd frame at the first time of timer animation.
1666 tet_printf("Test that after %u ticks, and we have %u frame \n", j + 1u, j + 1u);
1667 Test::EmitGlobalTimerSignal();
1668 application.SendNotification();
1669 application.Render(16);
1671 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_INNER_LOCATION(location));
1673 application.SendNotification();
1674 application.Render();
1675 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_INNER_LOCATION(location));
1676 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_INNER_LOCATION(location));
1678 tet_printf("Test Loop %u \n\n", i + 1u);
1681 tet_printf("Test that after %u loops, and we have no frame. Timer should stop \n", loopCount);
1682 Test::EmitGlobalTimerSignal();
1683 application.SendNotification();
1684 application.Render(16);
1685 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_INNER_LOCATION(location));
1687 dummyControl.Unparent();
1690 int UtcDaliAnimatedImageVisualLoopCount(void)
1692 ToolkitTestApplication application;
1694 tet_infoline("UtcDaliAnimatedImageVisualLoopCount");
1697 // request AnimatedImageVisual with a property map
1698 // Test with no (0) loop count
1699 VisualFactory factory = VisualFactory::Get();
1700 Visual::Base animatedImageVisual = factory.CreateVisual(
1702 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1703 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1704 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1705 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1706 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1707 .Add(DevelImageVisual::Property::LOOP_COUNT, 0));
1709 DummyControl dummyControl = DummyControl::New(true);
1710 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1711 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1712 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1714 TestLoopCount(application, dummyControl, 4, 0, TEST_LOCATION);
1716 dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1717 animatedImageVisual.Reset();
1719 application.SendNotification();
1720 application.Render(16);
1722 // Test with no (1) loop count. Request AnimatedImageVisual with a property map
1723 animatedImageVisual = factory.CreateVisual(
1725 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1726 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1727 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1728 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1729 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1730 .Add(DevelImageVisual::Property::LOOP_COUNT, 1));
1732 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1734 TestLoopCount(application, dummyControl, 4, 1, TEST_LOCATION);
1736 dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1737 animatedImageVisual.Reset();
1739 application.SendNotification();
1740 application.Render(16);
1742 // Test with no (100) loop count. Request AnimatedImageVisual with a property map
1743 animatedImageVisual = factory.CreateVisual(
1745 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1746 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1747 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1748 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1749 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1750 .Add(DevelImageVisual::Property::LOOP_COUNT, 100));
1752 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1754 TestLoopCount(application, dummyControl, 4, 100, TEST_LOCATION);
1759 int UtcDaliAnimatedImageVisualPlayback(void)
1761 ToolkitTestApplication application;
1762 TestGlAbstraction& gl = application.GetGlAbstraction();
1763 TraceCallStack& textureTrace = gl.GetTextureTrace();
1765 tet_infoline("UtcDaliAnimatedImageVisualPlayback");
1768 // request AnimatedImageVisual with a property map
1769 // Test with forever (-1) loop count
1770 VisualFactory factory = VisualFactory::Get();
1771 Visual::Base animatedImageVisual = factory.CreateVisual(
1773 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1774 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1775 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1776 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1777 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1778 .Add(DevelImageVisual::Property::LOOP_COUNT, -1));
1780 DummyControl dummyControl = DummyControl::New(true);
1781 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1782 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1783 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1785 textureTrace.Enable(true);
1786 application.GetScene().Add(dummyControl);
1787 application.SendNotification();
1788 application.Render(16);
1790 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1792 application.SendNotification();
1793 application.Render();
1795 tet_infoline("Test that a timer has been created");
1796 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1798 Test::EmitGlobalTimerSignal();
1799 application.SendNotification();
1800 application.Render(16);
1802 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1804 application.SendNotification();
1805 application.Render();
1806 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1808 Property::Map attributes;
1809 tet_infoline("Test Pause action. Timer should stop after Pause action");
1810 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PAUSE, attributes);
1811 Test::EmitGlobalTimerSignal();
1812 application.SendNotification();
1813 application.Render(16);
1814 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_LOCATION);
1816 tet_infoline("Test Play action. Timer should Restart after Play action");
1817 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PLAY, attributes);
1818 Test::EmitGlobalTimerSignal();
1819 application.SendNotification();
1820 application.Render(16);
1822 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1824 application.SendNotification();
1825 application.Render();
1826 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1828 tet_infoline("Test Stop action. Timer should stop after Stop action");
1829 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::STOP, attributes);
1830 Test::EmitGlobalTimerSignal();
1831 application.SendNotification();
1832 application.Render(16);
1833 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_LOCATION);
1835 tet_infoline("Test Play action. Timer should Restart after Play action");
1836 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PLAY, attributes);
1837 Test::EmitGlobalTimerSignal();
1838 application.SendNotification();
1839 application.Render(16);
1841 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1843 application.SendNotification();
1844 application.Render();
1845 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1847 dummyControl.Unparent();
1853 int UtcDaliAnimatedImageVisualWrapMode(void)
1855 ToolkitTestApplication application;
1856 tet_infoline("UtcDaliAnimatedImageVisualWrapMode");
1858 VisualFactory factory = VisualFactory::Get();
1859 DALI_TEST_CHECK(factory);
1861 // Test wrap mode in animated image visual.
1862 const int width = 950;
1863 const int height = 1080;
1864 const Vector4 pixelArea(0.0f, 0.0f, 950 / 40, 1.0f);
1866 Property::Map propertyMap;
1867 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE);
1868 propertyMap.Insert(ImageVisual::Property::URL, TEST_WEBP_FILE_NAME);
1869 propertyMap.Insert(ImageVisual::Property::PIXEL_AREA, pixelArea);
1870 propertyMap.Insert(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT);
1872 Visual::Base visual = factory.CreateVisual(propertyMap);
1873 DALI_TEST_CHECK(visual);
1875 TestGlAbstraction& gl = application.GetGlAbstraction();
1876 TraceCallStack& textureTrace = gl.GetTextureTrace();
1877 textureTrace.Enable(true);
1878 textureTrace.EnableLogging(true);
1879 TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
1880 texParameterTrace.Enable(true);
1881 texParameterTrace.EnableLogging(true);
1883 DummyControl actor = DummyControl::New();
1884 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1885 dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual);
1886 actor.SetProperty(Actor::Property::SIZE, Vector2(width, height));
1887 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1889 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
1890 application.GetScene().Add(actor);
1891 application.SendNotification();
1892 application.Render();
1894 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1896 application.SendNotification();
1897 application.Render();
1899 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
1901 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1903 // WITHOUT atlasing, the wrapping is handled by setting gl texture parameters
1904 std::stringstream out;
1905 out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_REPEAT;
1906 DALI_TEST_CHECK(texParameterTrace.FindMethodAndParams("TexParameteri", out.str()));
1908 // test the uniforms which used to handle the wrap mode
1909 Renderer renderer = actor.GetRendererAt(0u);
1910 DALI_TEST_CHECK(renderer);
1912 Property::Value pixelAreaValue = renderer.GetProperty(renderer.GetPropertyIndex("pixelArea"));
1913 DALI_TEST_EQUALS(pixelAreaValue.Get<Vector4>(), pixelArea, TEST_LOCATION);
1916 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
1921 int UtcDaliAnimatedImageVisualDesiredSize(void)
1923 ToolkitTestApplication application;
1924 tet_infoline("UtcDaliAnimatedImageVisualDesiredSize");
1926 TestGlAbstraction& gl = application.GetGlAbstraction();
1927 TraceCallStack& textureTrace = gl.GetTextureTrace();
1929 // Set desiredWidth < 37 and desiredHeight < 50, which is smaller than original image's size.
1930 int desiredWidth = 15;
1931 int desiredHeight = 20;
1933 Visual::Base visual = VisualFactory::Get().CreateVisual(TEST_GIF_FILE_NAME, ImageDimensions(desiredWidth, desiredHeight));
1934 DALI_TEST_CHECK(visual);
1936 DummyControl actor = DummyControl::New(true);
1937 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1938 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1940 application.GetScene().Add(actor);
1942 application.SendNotification();
1943 application.Render();
1945 // Trigger count is 2 - first frame and second frame.
1946 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1948 textureTrace.Enable(true);
1949 textureTrace.EnableLogging(true);
1951 application.SendNotification();
1952 application.Render();
1955 std::stringstream out;
1956 out << GL_TEXTURE_2D << ", " << 0u << ", " << desiredWidth << ", " << desiredHeight;
1957 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str()));
1960 // Unparent to make next trigger
1963 application.SendNotification();
1964 application.Render();
1967 actor.SetProperty(Actor::Property::SIZE, Vector2(300.0f, 300.0f));
1968 application.GetScene().Add(actor);
1970 application.SendNotification();
1971 application.Render();
1973 // Trigger count is 2 - first frame and second frame.
1974 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1976 textureTrace.Reset();
1978 application.SendNotification();
1979 application.Render();
1982 std::stringstream out;
1983 out << GL_TEXTURE_2D << ", " << 0u << ", " << desiredWidth << ", " << desiredHeight;
1984 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str())); // The size should not be changed