Merge "Merge branch 'devel/new_mesh' into devel/master" into devel/master
[platform/core/uifw/dali-core.git] / automated-tests / src / dali-internal / utc-Dali-Internal-ImageFactory.cpp
index fe2a488..4d28e20 100644 (file)
 #include <dali/internal/event/common/thread-local-storage.h>
 #include <dali/internal/event/images/image-factory.h>
 #include <dali/internal/event/resources/resource-ticket.h>
+#include <dali/internal/common/image-attributes.h>
 
 using namespace Dali;
 
 using Internal::ResourceTicketPtr;
 using Internal::ImageFactory;
 using Internal::ImageFactoryCache::RequestPtr;
-
+using Internal::ImageAttributes;
 
 namespace
 {
@@ -67,14 +68,14 @@ int UtcDaliImageFactoryUseCachedRequest01(void)
 
   tet_infoline( "UtcDaliImageFactoryCachedRequest01 - Request same image more than once" );
 
-  Image image = Image::New( gTestImageFilename );
+  Image image = ResourceImage::New( gTestImageFilename );
 
   application.SendNotification();
   application.Render();
   DALI_TEST_CHECK( application.GetPlatform().WasCalled( TestPlatformAbstraction::LoadResourceFunc ) );
   application.GetPlatform().ResetTrace();
 
-  Image image2 = Image::New( gTestImageFilename );
+  Image image2 = ResourceImage::New( gTestImageFilename );
 
   application.SendNotification();
   application.Render();
@@ -83,7 +84,7 @@ int UtcDaliImageFactoryUseCachedRequest01(void)
   DALI_TEST_CHECK( !application.GetPlatform().WasCalled( TestPlatformAbstraction::LoadResourceFunc ) );
   application.GetPlatform().ResetTrace();
 
-  Image image3 = Image::New( gTestImageFilename );
+  Image image3 = ResourceImage::New( gTestImageFilename );
 
   application.SendNotification();
   application.Render();
@@ -99,7 +100,7 @@ int UtcDaliImageFactoryUseCachedRequest02(void)
   // testing resource deletion when taken off stage
   tet_infoline( "UtcDaliImageFactoryCachedRequest02 - Discard previously requested resource" );
 
-  Image image = Image::New( gTestImageFilename, Image::Immediate, Image::Unused );
+  Image image = ResourceImage::New( gTestImageFilename, ResourceImage::IMMEDIATE, Image::UNUSED );
   ImageActor actor = ImageActor::New( image );
 
   application.SendNotification();
@@ -124,7 +125,7 @@ int UtcDaliImageFactoryUseCachedRequest02(void)
   application.SendNotification();
 
   // Should find stale request in cache, so load image from filesystem
-  Image image2 = Image::New( gTestImageFilename );
+  Image image2 = ResourceImage::New( gTestImageFilename );
 
   application.SendNotification();
   application.Render();
@@ -133,7 +134,7 @@ int UtcDaliImageFactoryUseCachedRequest02(void)
   application.GetPlatform().ResetTrace();
 
   // Resource is reloaded
-  Image image3 = Image::New( gTestImageFilename );
+  Image image3 = ResourceImage::New( gTestImageFilename );
 
   application.SendNotification();
   application.Render();
@@ -166,7 +167,7 @@ int UtcDaliImageFactoryUseCachedRequest03(void)
   DALI_TEST_EQUALS( ticket, ticket3, TEST_LOCATION );
 
   // request differs in scaled size - not default size
-  ImageAttributes attr = ImageAttributes::New( 80, 160, Pixel::BGR8888 );
+  ImageAttributes attr = ImageAttributes::New( 80, 160);
   req2 = imageFactory.RegisterRequest( gTestImageFilename, &attr );
   ResourceTicketPtr ticket4 = imageFactory.Load( *req2.Get() );
   DALI_TEST_CHECK( req != req2 );
@@ -181,10 +182,10 @@ int UtcDaliImageFactoryUseCachedRequest04(void)
 
   ImageFactory& imageFactory  = Internal::ThreadLocalStorage::Get().GetImageFactory();
 
-  ImageAttributes attr = ImageAttributes::New( 80, 160, Pixel::BGR8888 );
+  ImageAttributes attr = ImageAttributes::New( 80, 160 );
   RequestPtr req = imageFactory.RegisterRequest( gTestImageFilename, &attr );
 
-  ImageAttributes attr2 = ImageAttributes::New( 80, 160, Pixel::BGR8888 );
+  ImageAttributes attr2 = ImageAttributes::New( 80, 160 );
   RequestPtr req2 = imageFactory.RegisterRequest( gTestImageFilename, &attr2 );
   DALI_TEST_EQUALS( req, req2, TEST_LOCATION );
   END_TEST;
@@ -213,6 +214,7 @@ int UtcDaliImageFactoryCompatibleResource01(void)
   // emulate load success
   EmulateImageLoaded( application, 80, 80 );
 
+  // Request a second load using exact-match image size:
   ImageAttributes attr = ImageAttributes::New();
   attr.SetSize( 80, 80 );
   RequestPtr req2 = imageFactory.RegisterRequest( gTestImageFilename, &attr );
@@ -231,8 +233,8 @@ int UtcDaliImageFactoryCompatibleResource02(void)
 
   ImageFactory& imageFactory  = Internal::ThreadLocalStorage::Get().GetImageFactory();
 
-  Vector2 testSize(80.0f, 80.0f);
-  application.GetPlatform().SetClosestImageSize(testSize);
+  Vector2 testSize( 2048.0f, 2048.0f );
+  application.GetPlatform().SetClosestImageSize( testSize );
 
   // request with default attributes ( size is 0,0 )
   RequestPtr req = imageFactory.RegisterRequest( gTestImageFilename, NULL );
@@ -244,15 +246,13 @@ int UtcDaliImageFactoryCompatibleResource02(void)
   application.Render();
 
   // emulate load success
-  EmulateImageLoaded( application, 80, 80 );
+  EmulateImageLoaded( application, testSize.x, testSize.y );
 
-  // Request bigger size than actual image.
-  // This will load the same resource.
-  // However if image size changes later on to eg. 512*512 (file is overwritten),
-  // reissuing these two requests will load different resources.
+  // Request slightly bigger size than actual image.
+  // This will load the same resource as the ImageFactory cache uses a small fudge factor in matching.
   // See UtcDaliImageFactoryReload06
   ImageAttributes attr = ImageAttributes::New();
-  attr.SetSize( 92, 92 );
+  attr.SetSize( testSize.x + 1, testSize.y + 1 );
   RequestPtr req2 = imageFactory.RegisterRequest( gTestImageFilename, &attr );
   ResourceTicketPtr ticket2 = imageFactory.Load( *req2.Get() );
 
@@ -261,6 +261,42 @@ int UtcDaliImageFactoryCompatibleResource02(void)
   END_TEST;
 }
 
+// Different requests, incompatible resource, so two loads result:
+int UtcDaliImageFactoryInCompatibleResource(void)
+{
+  TestApplication application;
+  tet_infoline( "UtcDaliImageFactoryCompatibleResource02 - Two requests mapping to same resource." );
+
+  ImageFactory& imageFactory  = Internal::ThreadLocalStorage::Get().GetImageFactory();
+
+  Vector2 testSize(2048.0f, 2048.0f);
+  application.GetPlatform().SetClosestImageSize(testSize);
+
+  // request with default attributes ( size is 0,0 )
+  RequestPtr req = imageFactory.RegisterRequest( gTestImageFilename, NULL );
+  ResourceTicketPtr ticket = imageFactory.Load( *req.Get() );
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  // emulate load success
+  EmulateImageLoaded( application, testSize.x, testSize.y );
+
+  // Request substantially different size than actual image.
+  // This will issue a second resource load as difference in sizes is greater than
+  // the small fudge factor used in the ImageFactory cache.
+  ImageAttributes attr = ImageAttributes::New();
+  attr.SetSize( testSize.x - 16, testSize.y - 16 );
+  RequestPtr req2 = imageFactory.RegisterRequest( gTestImageFilename, &attr );
+  ResourceTicketPtr ticket2 = imageFactory.Load( *req2.Get() );
+
+  DALI_TEST_CHECK( req != req2 ); // different requests
+  DALI_TEST_CHECK( ticket->GetId() != ticket2->GetId() ); // differnet resources
+  END_TEST;
+}
+
 // Different requests, compatible resource
 int UtcDaliImageFactoryCompatibleResource03(void)
 {
@@ -540,8 +576,8 @@ int UtcDaliImageFactoryReload06(void)
 
   ImageFactory& imageFactory  = Internal::ThreadLocalStorage::Get().GetImageFactory();
 
-  Vector2 testSize(80.0f, 80.0f);
-  application.GetPlatform().SetClosestImageSize(testSize);
+  Vector2 testSize(2048.0f, 2048.0f);
+    application.GetPlatform().SetClosestImageSize( testSize );
 
   // request with default attributes ( size is 0,0 )
   RequestPtr req = imageFactory.RegisterRequest( gTestImageFilename, NULL );
@@ -553,14 +589,14 @@ int UtcDaliImageFactoryReload06(void)
   application.Render();
 
   // emulate load success
-  EmulateImageLoaded( application, 80, 80 );
+  EmulateImageLoaded( application, testSize.x, testSize.y );
 
   // Request bigger size than actual image.
   // This will load the same resource.
   // However if image size changes later on to eg. 512*512 (file is overwritten),
   // reissuing these two requests will load different resources.
   ImageAttributes attr = ImageAttributes::New();
-  attr.SetSize( 92, 92 );
+  attr.SetSize( testSize.x + 1, testSize.y + 1 );
   RequestPtr req2 = imageFactory.RegisterRequest( gTestImageFilename, &attr );
   ResourceTicketPtr ticket2 = imageFactory.Load( *req2.Get() );
 
@@ -575,7 +611,7 @@ int UtcDaliImageFactoryReload06(void)
 
   // emulate load success
   // note: this is the only way to emulate what size is loaded by platform abstraction
-  EmulateImageLoaded( application, 92, 92 );
+  EmulateImageLoaded( application, testSize.x + 1, testSize.y + 1 );
 
   // reload default size request
   ticket = imageFactory.Reload( *req.Get() );