2 * Copyright (c) 2022 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 application.SendNotification();
1107 application.Render();
1109 // load two frame(batch size), load mask image, and request two masking
1110 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1112 application.SendNotification();
1113 application.Render(20);
1115 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 3, TEST_LOCATION);
1117 dummyControl.Unparent();
1119 tet_infoline("Test that removing the visual from stage deletes all textures");
1120 application.SendNotification();
1121 application.Render(20);
1122 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1127 int UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask03(void)
1129 ToolkitTestApplication application;
1130 tet_infoline("UtcDaliAnimatedImageVisualAnimatedImageWithAlphaMask03 for GPU Alpha Masking with broken mask texture");
1131 TestGlAbstraction& gl = application.GetGlAbstraction();
1134 Property::Map propertyMap;
1135 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
1136 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
1137 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1138 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 4);
1139 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 20);
1140 propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, "");
1141 propertyMap.Insert(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING);
1143 VisualFactory factory = VisualFactory::Get();
1144 Visual::Base visual = factory.CreateVisual(propertyMap);
1146 DummyControl dummyControl = DummyControl::New(true);
1147 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1148 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1150 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1151 application.GetScene().Add(dummyControl);
1153 application.SendNotification();
1154 application.Render();
1156 // load two frame(batch size), load mask image, and request two masking
1157 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1159 application.SendNotification();
1160 application.Render(20);
1162 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 3, TEST_LOCATION);
1164 dummyControl.Unparent();
1166 tet_infoline("Test that removing the visual from stage deletes all textures");
1167 application.SendNotification();
1168 application.Render(20);
1169 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1174 int UtcDaliAnimatedImageVisualMultiImage01(void)
1176 ToolkitTestApplication application;
1177 TestGlAbstraction& gl = application.GetGlAbstraction();
1179 Property::Array urls;
1180 CopyUrlsIntoArray(urls);
1183 Property::Map propertyMap;
1184 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1185 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1186 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 4);
1187 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 8);
1188 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1190 VisualFactory factory = VisualFactory::Get();
1191 Visual::Base visual = factory.CreateVisual(propertyMap);
1193 // Expect that a batch of 4 textures has been requested. These will be serially loaded
1196 DummyControl dummyControl = DummyControl::New(true);
1197 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1198 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1200 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1201 application.GetScene().Add(dummyControl);
1202 application.SendNotification();
1203 application.Render(16);
1205 tet_infoline("Ready the visual after the visual is on stage");
1206 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1208 tet_infoline("Test that a timer has been started");
1209 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1211 TraceCallStack& textureTrace = gl.GetTextureTrace();
1212 textureTrace.Enable(true);
1214 application.SendNotification();
1215 application.Render(16);
1217 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 4, TEST_LOCATION);
1218 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1220 tet_infoline("Test that after 1 tick, and file loads completed, that we have 7 textures");
1221 Test::EmitGlobalTimerSignal();
1223 // Expect the second batch has been requested
1224 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1226 application.SendNotification();
1227 application.Render(16);
1228 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1230 tet_infoline("Test that after 2 ticks that we have 6 textures");
1232 Test::EmitGlobalTimerSignal();
1233 application.SendNotification();
1234 application.Render(16);
1235 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 6, TEST_LOCATION);
1237 tet_infoline("And that at least 2 textures were requested");
1238 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1239 application.SendNotification();
1240 application.Render(16);
1241 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 8, TEST_LOCATION);
1243 tet_infoline("Test that after 3rd tick that we have 7 textures and 1 request");
1244 Test::EmitGlobalTimerSignal();
1245 application.SendNotification();
1246 application.Render(16);
1247 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1249 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1250 application.SendNotification();
1251 application.Render(16);
1252 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 8, TEST_LOCATION);
1254 dummyControl.Unparent();
1256 tet_infoline("Test that removing the visual from stage deletes all textures");
1257 application.SendNotification();
1258 application.Render(16);
1259 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1264 int UtcDaliAnimatedImageVisualMultiImage02(void)
1266 ToolkitTestApplication application;
1267 TestGlAbstraction& gl = application.GetGlAbstraction();
1269 tet_infoline("Test that the animated visual has different batch and cache size.");
1272 Property::Array urls;
1273 CopyUrlsIntoArray(urls);
1275 Property::Map propertyMap;
1276 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1277 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1278 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 0);
1279 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 0);
1280 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1282 VisualFactory factory = VisualFactory::Get();
1283 Visual::Base visual = factory.CreateVisual(propertyMap); // TexMgr::Request load tId:0
1285 // Check the batch size and cache size need to have minimum 2.
1286 Property::Map resultMap;
1287 visual.CreatePropertyMap(resultMap);
1288 Property::Value* value = resultMap.Find(ImageVisual::Property::BATCH_SIZE, "batchSize");
1289 DALI_TEST_CHECK(value);
1290 DALI_TEST_EQUALS(value->Get<int>(), 2, TEST_LOCATION);
1291 value = resultMap.Find(ImageVisual::Property::CACHE_SIZE, "cacheSize");
1292 DALI_TEST_CHECK(value);
1293 DALI_TEST_EQUALS(value->Get<int>(), 2, TEST_LOCATION);
1296 // Batch size is 2 and cache size is 3
1297 propertyMap.Clear();
1298 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1299 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1300 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1301 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 3);
1302 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1304 visual = factory.CreateVisual(propertyMap); // TexMgr::Request load tId:0
1306 // Expect that each image is loaded each tick
1307 DummyControl dummyControl = DummyControl::New(true);
1308 Impl::DummyControl& dummyImpl1 = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1309 dummyImpl1.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1312 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1313 application.GetScene().Add(dummyControl);
1314 application.SendNotification();
1315 application.Render(16);
1317 tet_infoline("Ready the visual after the visual is on window");
1318 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1319 application.SendNotification();
1320 application.Render(16); //glGenTextures 1 and 2
1321 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_LOCATION);
1323 tet_infoline("Test that each tick, a new image is requested");
1324 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:0
1325 application.SendNotification();
1326 application.Render(16);
1327 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1328 application.SendNotification();
1329 application.Render(16); //glGenTextures 3
1330 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1332 tet_infoline("Test that each tick, a new image is requested");
1333 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:1
1334 application.SendNotification();
1335 application.Render(16);
1336 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1337 application.SendNotification();
1338 application.Render(16); //glGenTextures 4
1339 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1341 dummyImpl1.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1342 dummyControl.Unparent();
1344 // Batch size is 9 and cache size is 4
1345 propertyMap.Clear();
1346 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1347 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1348 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 3);
1349 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 7);
1350 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1352 visual = factory.CreateVisual(propertyMap); // TexMgr::Request load tId:0
1354 // Expect that each image is loaded each tick
1355 dummyControl = DummyControl::New(true);
1356 Impl::DummyControl& dummyImpl2 = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1357 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1360 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1361 application.GetScene().Add(dummyControl);
1362 application.SendNotification();
1363 application.Render(16);
1365 tet_infoline("Ready the visual after the visual is on window");
1366 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1367 application.SendNotification();
1368 application.Render(16); //glGenTextures 1, 2, and 3
1369 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1371 tet_infoline("Test that each tick, a new image is requested");
1372 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:0
1373 application.SendNotification();
1374 application.Render(16);
1375 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1376 application.SendNotification();
1377 application.Render(16); //glGenTextures 4, 5, and 6
1378 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 5, TEST_LOCATION);
1380 tet_infoline("Test that each tick, a new image is requested");
1381 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:1
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 7, 1, and 2
1387 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1389 tet_infoline("Test that each tick, a new image is requested");
1390 Test::EmitGlobalTimerSignal(); // TexMgr::Remove tId:2
1391 application.SendNotification();
1392 application.Render(16);
1393 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1394 application.SendNotification();
1395 application.Render(16); //glGenTextures 3
1396 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 7, TEST_LOCATION);
1398 dummyControl.Unparent();
1400 tet_infoline("Test that removing the visual from window deletes all textures");
1401 application.SendNotification();
1402 application.Render(16);
1403 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1408 int UtcDaliAnimatedImageVisualMultiImage03(void)
1410 ToolkitTestApplication application;
1411 TestGlAbstraction& gl = application.GetGlAbstraction();
1414 Property::Array urls1, urls2;
1415 CopyUrlsIntoArray(urls1);
1416 CopyUrlsIntoArray(urls2);
1418 Property::Map animatedImageMap1;
1419 animatedImageMap1.Insert(Visual::Property::TYPE, Visual::IMAGE);
1420 animatedImageMap1.Insert(ImageVisual::Property::URL, Property::Value(urls1));
1421 animatedImageMap1.Insert(ImageVisual::Property::BATCH_SIZE, 3);
1422 animatedImageMap1.Insert(ImageVisual::Property::CACHE_SIZE, 3);
1423 animatedImageMap1.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1425 Property::Map animatedImageMap2;
1426 animatedImageMap2.Insert(Visual::Property::TYPE, Visual::IMAGE);
1427 animatedImageMap2.Insert(ImageVisual::Property::URL, Property::Value(urls2));
1428 animatedImageMap2.Insert(ImageVisual::Property::BATCH_SIZE, 2);
1429 animatedImageMap2.Insert(ImageVisual::Property::CACHE_SIZE, 2);
1430 animatedImageMap2.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1432 VisualFactory factory = VisualFactory::Get();
1433 Visual::Base animatedImageVisual1 = factory.CreateVisual(animatedImageMap1);
1435 tet_infoline("Create two image views with the same URLs, offset by 1 frame.");
1437 DummyControl dummyControl1 = DummyControl::New(true);
1438 Impl::DummyControl& dummyImpl1 = static_cast<Impl::DummyControl&>(dummyControl1.GetImplementation());
1439 dummyImpl1.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual1);
1440 dummyControl1.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1441 application.GetScene().Add(dummyControl1);
1443 application.SendNotification();
1444 application.Render(16);
1446 tet_infoline("Ready the requested image after the first visual is on stage");
1447 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1448 application.SendNotification();
1449 application.Render(16);
1450 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1452 Visual::Base animatedImageVisual2 = factory.CreateVisual(animatedImageMap2);
1453 DummyControl dummyControl2 = DummyControl::New(true);
1454 Impl::DummyControl& dummyImpl2 = static_cast<Impl::DummyControl&>(dummyControl2.GetImplementation());
1455 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual2);
1456 dummyControl2.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1457 application.GetScene().Add(dummyControl2);
1458 application.SendNotification();
1459 application.Render(16);
1461 tet_infoline("The texture cache should be holding the requested images; check that the renderer has a texture");
1462 TextureSet ts = dummyControl2.GetRendererAt(0).GetTextures();
1463 Texture t1 = ts.GetTexture(0);
1464 DALI_TEST_EQUALS(ts.GetTextureCount(), 1, TEST_LOCATION);
1466 tet_infoline("Test that on the first tick, 1 new image is requested");
1467 Test::EmitGlobalTimerSignal(); // Both visuals should tick
1469 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1470 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 3, TEST_LOCATION);
1472 ts = dummyControl2.GetRendererAt(0).GetTextures();
1473 Texture t2 = ts.GetTexture(0);
1474 DALI_TEST_CHECK(t1 != t2);
1476 dummyControl1.Unparent();
1477 dummyControl2.Unparent();
1479 tet_infoline("Test that removing the visual from stage deletes all textures");
1480 application.SendNotification();
1481 application.Render(16);
1482 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1487 int UtcDaliAnimatedImageVisualMultiImage04(void)
1489 ToolkitTestApplication application;
1490 TestGlAbstraction& gl = application.GetGlAbstraction();
1491 TraceCallStack& textureTrace = gl.GetTextureTrace();
1492 textureTrace.Enable(true);
1494 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");
1496 Property::Array urls;
1497 CopyUrlsIntoArray(urls);
1500 Property::Map propertyMap;
1501 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1502 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1503 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 6);
1504 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 11);
1505 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1507 VisualFactory factory = VisualFactory::Get();
1508 Visual::Base visual = factory.CreateVisual(propertyMap);
1510 tet_infoline("Expect that a batch of 7 textures has been requested.");
1512 DummyControl dummyControl = DummyControl::New(true);
1513 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1514 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1516 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1517 application.GetScene().Add(dummyControl);
1518 application.SendNotification();
1519 application.Render(16);
1521 tet_infoline("Wait for the first batch to complete");
1522 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(6), true, TEST_LOCATION);
1524 tet_infoline("Test that a timer has been started");
1525 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1527 application.SendNotification();
1528 application.Render(16);
1530 DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 6, TEST_LOCATION);
1531 tet_infoline("Test that after 1 tick, and 5 file loads completed, that we have 11 textures");
1532 Test::EmitGlobalTimerSignal();
1533 application.SendNotification();
1534 application.Render(16);
1536 // Expect the second batch has been requested
1537 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(5), true, TEST_LOCATION);
1539 application.SendNotification();
1540 application.Render(16);
1541 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1543 tet_infoline("Test that after 2 ticks that we have 11 textures and no requests");
1545 Test::EmitGlobalTimerSignal();
1546 application.SendNotification();
1547 application.Render(16);
1548 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 5), false, TEST_LOCATION);
1549 application.SendNotification();
1550 application.Render(16);
1551 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1553 tet_infoline("Test that after 3rd tick that we have 11 textures and no requests");
1554 Test::EmitGlobalTimerSignal();
1555 application.SendNotification();
1556 application.Render(16);
1558 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 5), false, TEST_LOCATION);
1559 application.SendNotification();
1560 application.Render(16);
1561 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 11, TEST_LOCATION);
1563 dummyControl.Unparent();
1566 tet_infoline("Test that removing the visual from stage deletes all textures");
1567 application.SendNotification();
1568 application.Render(16);
1569 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1574 int UtcDaliAnimatedImageVisualMultiImage05(void)
1576 ToolkitTestApplication application;
1577 TestGlAbstraction& gl = application.GetGlAbstraction();
1579 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");
1581 Property::Array urls;
1582 CopyUrlsIntoArray(urls);
1585 Property::Map propertyMap;
1586 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
1587 propertyMap.Insert(ImageVisual::Property::URL, Property::Value(urls));
1588 propertyMap.Insert(ImageVisual::Property::BATCH_SIZE, 4);
1589 propertyMap.Insert(ImageVisual::Property::CACHE_SIZE, 11);
1590 propertyMap.Insert(ImageVisual::Property::FRAME_DELAY, 100);
1592 VisualFactory factory = VisualFactory::Get();
1593 Visual::Base visual = factory.CreateVisual(propertyMap);
1595 tet_infoline("Expect that a batch of 4 textures has been requested.");
1597 DummyControl dummyControl = DummyControl::New(true);
1598 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1599 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1601 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1602 application.GetScene().Add(dummyControl);
1603 application.SendNotification();
1604 application.Render(16);
1606 tet_infoline("Wait for the first batch to complete");
1607 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1609 tet_infoline("Test that a timer has been started");
1610 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1612 application.SendNotification();
1613 application.Render(16);
1615 tet_infoline("Test that a timer has been started");
1616 Test::EmitGlobalTimerSignal();
1617 application.SendNotification();
1618 application.Render(16);
1620 dummyControl.Unparent();
1623 application.SendNotification();
1624 application.Render(16);
1625 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1627 tet_infoline("Test that pending batch of image loads are cancelled instead of uploaded");
1628 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1629 application.SendNotification();
1630 application.Render(16);
1631 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 0, TEST_LOCATION);
1636 void TestLoopCount(ToolkitTestApplication& application, DummyControl& dummyControl, uint16_t frameCount, uint16_t loopCount, const char* location)
1638 TestGlAbstraction& gl = application.GetGlAbstraction();
1639 TraceCallStack& textureTrace = gl.GetTextureTrace();
1641 textureTrace.Enable(true);
1642 application.GetScene().Add(dummyControl);
1644 application.SendNotification();
1645 application.Render(16);
1647 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_INNER_LOCATION(location));
1649 application.SendNotification();
1650 application.Render();
1652 tet_infoline("Test that a timer has been created");
1653 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_INNER_LOCATION(location));
1655 for(uint16_t i = 0; i < loopCount; i++)
1657 for(uint16_t j = 0; j < frameCount; j++)
1659 if(i == 0 && j == 0)
1661 continue; // Because first frame is already showed and we call 2nd frame at the first time of timer animation.
1663 tet_printf("Test that after %u ticks, and we have %u frame \n", j + 1u, j + 1u);
1664 Test::EmitGlobalTimerSignal();
1665 application.SendNotification();
1666 application.Render(16);
1668 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_INNER_LOCATION(location));
1670 application.SendNotification();
1671 application.Render();
1672 DALI_TEST_EQUALS(gl.GetNumGeneratedTextures(), 2, TEST_INNER_LOCATION(location));
1673 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_INNER_LOCATION(location));
1675 tet_printf("Test Loop %u \n\n", i + 1u);
1678 tet_printf("Test that after %u loops, and we have no frame. Timer should stop \n", loopCount);
1679 Test::EmitGlobalTimerSignal();
1680 application.SendNotification();
1681 application.Render(16);
1682 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_INNER_LOCATION(location));
1684 dummyControl.Unparent();
1687 int UtcDaliAnimatedImageVisualLoopCount(void)
1689 ToolkitTestApplication application;
1691 tet_infoline("UtcDaliAnimatedImageVisualLoopCount");
1694 // request AnimatedImageVisual with a property map
1695 // Test with no (0) loop count
1696 VisualFactory factory = VisualFactory::Get();
1697 Visual::Base animatedImageVisual = factory.CreateVisual(
1699 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1700 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1701 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1702 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1703 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1704 .Add(DevelImageVisual::Property::LOOP_COUNT, 0));
1706 DummyControl dummyControl = DummyControl::New(true);
1707 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1708 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1709 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1711 TestLoopCount(application, dummyControl, 4, 0, TEST_LOCATION);
1713 dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1714 animatedImageVisual.Reset();
1716 application.SendNotification();
1717 application.Render(16);
1719 // Test with no (1) loop count. Request AnimatedImageVisual with a property map
1720 animatedImageVisual = factory.CreateVisual(
1722 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1723 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1724 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1725 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1726 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1727 .Add(DevelImageVisual::Property::LOOP_COUNT, 1));
1729 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1731 TestLoopCount(application, dummyControl, 4, 1, TEST_LOCATION);
1733 dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL);
1734 animatedImageVisual.Reset();
1736 application.SendNotification();
1737 application.Render(16);
1739 // Test with no (100) loop count. Request AnimatedImageVisual with a property map
1740 animatedImageVisual = factory.CreateVisual(
1742 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1743 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1744 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1745 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1746 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1747 .Add(DevelImageVisual::Property::LOOP_COUNT, 100));
1749 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1751 TestLoopCount(application, dummyControl, 4, 100, TEST_LOCATION);
1756 int UtcDaliAnimatedImageVisualPlayback(void)
1758 ToolkitTestApplication application;
1759 TestGlAbstraction& gl = application.GetGlAbstraction();
1760 TraceCallStack& textureTrace = gl.GetTextureTrace();
1762 tet_infoline("UtcDaliAnimatedImageVisualPlayback");
1765 // request AnimatedImageVisual with a property map
1766 // Test with forever (-1) loop count
1767 VisualFactory factory = VisualFactory::Get();
1768 Visual::Base animatedImageVisual = factory.CreateVisual(
1770 .Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
1771 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
1772 .Add(ImageVisual::Property::PIXEL_AREA, Vector4())
1773 .Add(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT)
1774 .Add(ImageVisual::Property::WRAP_MODE_V, WrapMode::DEFAULT)
1775 .Add(DevelImageVisual::Property::LOOP_COUNT, -1));
1777 DummyControl dummyControl = DummyControl::New(true);
1778 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
1779 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
1780 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
1782 textureTrace.Enable(true);
1783 application.GetScene().Add(dummyControl);
1784 application.SendNotification();
1785 application.Render(16);
1787 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1789 application.SendNotification();
1790 application.Render();
1792 tet_infoline("Test that a timer has been created");
1793 DALI_TEST_EQUALS(Test::GetTimerCount(), 1, TEST_LOCATION);
1795 Test::EmitGlobalTimerSignal();
1796 application.SendNotification();
1797 application.Render(16);
1799 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1801 application.SendNotification();
1802 application.Render();
1803 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1805 Property::Map attributes;
1806 tet_infoline("Test Pause action. Timer should stop after Pause action");
1807 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PAUSE, attributes);
1808 Test::EmitGlobalTimerSignal();
1809 application.SendNotification();
1810 application.Render(16);
1811 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_LOCATION);
1813 tet_infoline("Test Play action. Timer should Restart after Play action");
1814 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PLAY, attributes);
1815 Test::EmitGlobalTimerSignal();
1816 application.SendNotification();
1817 application.Render(16);
1819 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1821 application.SendNotification();
1822 application.Render();
1823 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1825 tet_infoline("Test Stop action. Timer should stop after Stop action");
1826 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::STOP, attributes);
1827 Test::EmitGlobalTimerSignal();
1828 application.SendNotification();
1829 application.Render(16);
1830 DALI_TEST_EQUALS(Test::AreTimersRunning(), false, TEST_LOCATION);
1832 tet_infoline("Test Play action. Timer should Restart after Play action");
1833 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedImageVisual::Action::PLAY, attributes);
1834 Test::EmitGlobalTimerSignal();
1835 application.SendNotification();
1836 application.Render(16);
1838 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1840 application.SendNotification();
1841 application.Render();
1842 DALI_TEST_EQUALS(Test::AreTimersRunning(), true, TEST_LOCATION);
1844 dummyControl.Unparent();
1850 int UtcDaliAnimatedImageVisualWrapMode(void)
1852 ToolkitTestApplication application;
1853 tet_infoline("UtcDaliAnimatedImageVisualWrapMode");
1855 VisualFactory factory = VisualFactory::Get();
1856 DALI_TEST_CHECK(factory);
1858 // Test wrap mode in animated image visual.
1859 const int width = 950;
1860 const int height = 1080;
1861 const Vector4 pixelArea(0.0f, 0.0f, 950 / 40, 1.0f);
1863 Property::Map propertyMap;
1864 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE);
1865 propertyMap.Insert(ImageVisual::Property::URL, TEST_WEBP_FILE_NAME);
1866 propertyMap.Insert(ImageVisual::Property::PIXEL_AREA, pixelArea);
1867 propertyMap.Insert(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT);
1869 Visual::Base visual = factory.CreateVisual(propertyMap);
1870 DALI_TEST_CHECK(visual);
1872 TestGlAbstraction& gl = application.GetGlAbstraction();
1873 TraceCallStack& textureTrace = gl.GetTextureTrace();
1874 textureTrace.Enable(true);
1875 textureTrace.EnableLogging(true);
1876 TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
1877 texParameterTrace.Enable(true);
1878 texParameterTrace.EnableLogging(true);
1880 DummyControl actor = DummyControl::New();
1881 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1882 dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual);
1883 actor.SetProperty(Actor::Property::SIZE, Vector2(width, height));
1884 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1886 DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION);
1887 application.GetScene().Add(actor);
1888 application.SendNotification();
1889 application.Render();
1891 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1893 application.SendNotification();
1894 application.Render();
1896 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
1898 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1900 // WITHOUT atlasing, the wrapping is handled by setting gl texture parameters
1901 std::stringstream out;
1902 out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_REPEAT;
1903 DALI_TEST_CHECK(texParameterTrace.FindMethodAndParams("TexParameteri", out.str()));
1905 // test the uniforms which used to handle the wrap mode
1906 Renderer renderer = actor.GetRendererAt(0u);
1907 DALI_TEST_CHECK(renderer);
1909 Property::Value pixelAreaValue = renderer.GetProperty(renderer.GetPropertyIndex("pixelArea"));
1910 DALI_TEST_EQUALS(pixelAreaValue.Get<Vector4>(), pixelArea, TEST_LOCATION);
1913 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
1918 int UtcDaliAnimatedImageVisualDesiredSize(void)
1920 ToolkitTestApplication application;
1921 tet_infoline("UtcDaliAnimatedImageVisualDesiredSize");
1923 TestGlAbstraction& gl = application.GetGlAbstraction();
1924 TraceCallStack& textureTrace = gl.GetTextureTrace();
1926 // Set desiredWidth < 37 and desiredHeight < 50, which is smaller than original image's size.
1927 int desiredWidth = 15;
1928 int desiredHeight = 20;
1930 Visual::Base visual = VisualFactory::Get().CreateVisual(TEST_GIF_FILE_NAME, ImageDimensions(desiredWidth, desiredHeight));
1931 DALI_TEST_CHECK(visual);
1933 DummyControl actor = DummyControl::New(true);
1934 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1935 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1937 application.GetScene().Add(actor);
1939 application.SendNotification();
1940 application.Render();
1942 // Trigger count is 2 - first frame and second frame.
1943 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1945 textureTrace.Enable(true);
1946 textureTrace.EnableLogging(true);
1948 application.SendNotification();
1949 application.Render();
1952 std::stringstream out;
1953 out << GL_TEXTURE_2D << ", " << 0u << ", " << desiredWidth << ", " << desiredHeight;
1954 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str()));
1957 // Unparent to make next trigger
1960 application.SendNotification();
1961 application.Render();
1964 actor.SetProperty(Actor::Property::SIZE, Vector2(300.0f, 300.0f));
1965 application.GetScene().Add(actor);
1967 application.SendNotification();
1968 application.Render();
1970 // Trigger count is 2 - first frame and second frame.
1971 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1973 textureTrace.Reset();
1975 application.SendNotification();
1976 application.Render();
1979 std::stringstream out;
1980 out << GL_TEXTURE_2D << ", " << 0u << ", " << desiredWidth << ", " << desiredHeight;
1981 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str())); // The size should not be changed