Remove RenderSurface from Core
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-RenderTask.cpp
index 37f7535..e5ea26b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
  */
 
 #include <iostream>
-
 #include <stdlib.h>
 #include <dali/public-api/dali-core.h>
 #include <dali/devel-api/events/hit-test-algorithm.h>
@@ -170,56 +169,30 @@ bool TestScreenToFrameBufferFunction( Vector2& coordinates )
   return true;
 }
 
-ImageActor CreateLoadingImageActor(TestApplication& application, std::string filename, ResourceImage::LoadPolicy loadPolicy, Image::ReleasePolicy releasePolicy)
+Actor CreateRenderableActorSuccess(TestApplication& application, std::string filename)
 {
-  Image image = ResourceImage::New(filename, loadPolicy, releasePolicy);
-  DALI_TEST_CHECK( image );
-  application.SendNotification();
-  application.Render(16);
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-  ImageActor actor = ImageActor::New(image);
+  PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 );
+  Image image = ResourceImage::New(filename);
+  Actor actor = CreateRenderableActor(image);
   actor.SetSize( 80, 80 );
-  application.SendNotification();
-  application.Render(16);
   return actor;
 }
 
-Image CreateLoadingImage(TestApplication& application, std::string filename, ResourceImage::LoadPolicy loadPolicy, Image::ReleasePolicy releasePolicy)
+Actor CreateRenderableActorFailed(TestApplication& application, std::string filename)
 {
-  Image image = ResourceImage::New(filename, loadPolicy, releasePolicy);
+  Image image = ResourceImage::New(filename);
   DALI_TEST_CHECK( image );
-  application.SendNotification();
-  application.Render(16);
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  return image;
-}
-
-void CompleteImageLoad(TestApplication& application, Integration::ResourceId resourceId, Integration::ResourceTypeId requestType)
-{
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  application.GetPlatform().SetResourceLoaded(resourceId, requestType, resource);
-}
-
-void FailImageLoad(TestApplication& application, Integration::ResourceId resourceId )
-{
-  application.GetPlatform().SetResourceLoadFailed(resourceId, Integration::FailureUnknown);
+  Actor actor = CreateRenderableActor(image);
+  actor.SetSize( 80, 80 );
+  return actor;
 }
 
-void ReloadImage(TestApplication& application, ResourceImage image)
+Image CreateResourceImage(TestApplication& application, std::string filename)
 {
-  application.GetPlatform().ClearReadyResources();
-  application.GetPlatform().DiscardRequest();
-  application.GetPlatform().ResetTrace();
-  application.GetPlatform().SetClosestImageSize(Vector2(80.0f, 80.0f)); // Ensure reload is called.
-  image.Reload();
+  PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 );
+  Image image = ResourceImage::New(filename);
+  DALI_TEST_CHECK( image );
+  return image;
 }
 
 RenderTask CreateRenderTask(TestApplication& application,
@@ -313,41 +286,6 @@ bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool
   return result;
 }
 
-// The functor to be used in the hit-test algorithm to check whether the actor is hittable.
-bool IsActorHittableFunction(Actor actor, Dali::HitTestAlgorithm::TraverseType type)
-{
-  bool hittable = false;
-
-  switch (type)
-  {
-    case Dali::HitTestAlgorithm::CHECK_ACTOR:
-    {
-      // Check whether the actor is visible and not fully transparent.
-      if( actor.IsVisible()
-          && actor.GetCurrentWorldColor().a > 0.01f) // not FULLY_TRANSPARENT
-      {
-
-        hittable = true;
-      }
-      break;
-    }
-    case Dali::HitTestAlgorithm::DESCEND_ACTOR_TREE:
-    {
-      if( actor.IsVisible() ) // Actor is visible, if not visible then none of its children are visible.
-      {
-        hittable = true;
-      }
-      break;
-    }
-    default:
-    {
-      break;
-    }
-  }
-
-  return hittable;
-}
-
 } // unnamed namespace
 
 
@@ -417,22 +355,14 @@ int UtcDaliRenderTaskSetSourceActorP01(void)
   tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that setting a non-renderable actor stops existing source actor being rendered ");
 
   Stage stage = Stage::GetCurrent();
-
-  const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
-
   RenderTaskList taskList = stage.GetRenderTaskList();
-
   RenderTask task = taskList.GetTask( 0u );
 
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
-  std::vector<GLuint> ids;
-  ids.push_back( 7 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-
   BufferImage img = BufferImage::New( 1,1 );
-  ImageActor newActor = ImageActor::New( img );
+  Actor newActor = CreateRenderableActor( img );
   newActor.SetSize(1,1);
   stage.Add( newActor );
 
@@ -445,13 +375,17 @@ int UtcDaliRenderTaskSetSourceActorP01(void)
   DALI_TEST_CHECK( task.GetSourceActor() != actor );
   DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
 
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+  TraceCallStack& drawTrace = gl.GetDrawTrace();
+  drawTrace.Enable(true);
+
   // Update & Render nothing!
   application.GetGlAbstraction().ClearBoundTextures();
   application.SendNotification();
   application.Render();
 
   // Check that nothing was rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
 
   END_TEST;
 }
@@ -465,8 +399,6 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
 
   Stage stage = Stage::GetCurrent();
 
-  const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
-
   RenderTaskList taskList = stage.GetRenderTaskList();
 
   RenderTask task = taskList.GetTask( 0u );
@@ -474,18 +406,19 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
-  std::vector<GLuint> ids;
-  ids.push_back( 7 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
 
   BufferImage img = BufferImage::New( 1,1 );
-  ImageActor newActor = ImageActor::New( img );
+  Actor newActor = CreateRenderableActor( img );
   newActor.SetSize(1,1);
   stage.Add( newActor );
 
   Actor nonRenderableActor = Actor::New();
   stage.Add( nonRenderableActor );
 
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+  TraceCallStack& drawTrace = gl.GetDrawTrace();
+  drawTrace.Enable(true);
+
   // Stop the newActor from being rendered by changing the source actor
   DALI_TEST_CHECK( nonRenderableActor );
   task.SetSourceActor( nonRenderableActor );
@@ -498,7 +431,8 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
   application.Render();
 
   // Check that nothing was rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
+  drawTrace.Reset();
 
   // Set newActor as the new source Actor
   task.SetSourceActor( newActor );
@@ -511,11 +445,7 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
   application.Render();
 
   // Check that the newActor was rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
-  if ( boundTextures.size() )
-  {
-    DALI_TEST_EQUALS( boundTextures[0], 7u, TEST_LOCATION );
-  }
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
   END_TEST;
 }
 
@@ -526,34 +456,28 @@ int UtcDaliRenderTaskSetSourceActorOffStage(void)
   tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
 
   Stage stage = Stage::GetCurrent();
-
-  const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
-
   RenderTaskList taskList = stage.GetRenderTaskList();
-
   RenderTask task = taskList.GetTask( 0u );
 
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
-  std::vector<GLuint> ids;
-  GLuint expectedTextureId( 3 );
-  ids.push_back( expectedTextureId );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+  TraceCallStack& drawTrace = gl.GetDrawTrace();
+  drawTrace.Enable(true);
 
   BufferImage img = BufferImage::New( 1,1 );
-  ImageActor newActor = ImageActor::New( img );
+  Actor newActor = CreateRenderableActor( img );
   newActor.SetSize(1,1);
   task.SetSourceActor( newActor );
   // Don't add newActor to stage yet   //'
 
   // Update & Render with the actor initially off-stage
-  application.GetGlAbstraction().ClearBoundTextures();
   application.SendNotification();
   application.Render();
 
   // Check that nothing was rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
 
   // Now add to stage
   stage.Add( newActor );
@@ -564,19 +488,17 @@ int UtcDaliRenderTaskSetSourceActorOffStage(void)
   application.Render();
 
   // Check that the newActor was rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
-  if ( boundTextures.size() )
-  {
-    DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
-  }
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
+  drawTrace.Reset();
 
   // Now remove from stage
   stage.Remove( newActor );
 
   // Update & Render with the actor off-stage
-  application.GetGlAbstraction().ClearBoundTextures();
   application.SendNotification();
   application.Render();
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
+
   END_TEST;
 }
 
@@ -587,23 +509,14 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void)
   tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
 
   Stage stage = Stage::GetCurrent();
-
-  const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
-
   RenderTaskList taskList = stage.GetRenderTaskList();
-
   RenderTask task = taskList.GetTask( 0u );
 
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
-  std::vector<GLuint> ids;
-  GLuint expectedTextureId( 5 );
-  ids.push_back( expectedTextureId );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-
   BufferImage img = BufferImage::New( 1,1 );
-  ImageActor newActor = ImageActor::New( img );
+  Actor newActor = CreateRenderableActor( img );
   newActor.SetSize(1,1);
   stage.Add( newActor );
 
@@ -614,13 +527,16 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void)
   task.SetSourceActor( Actor() );
   DALI_TEST_CHECK( ! task.GetSourceActor() );
 
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+  TraceCallStack& drawTrace = gl.GetDrawTrace();
+  drawTrace.Enable(true);
+
   // Update & Render nothing!
-  application.GetGlAbstraction().ClearBoundTextures();
   application.SendNotification();
   application.Render();
 
   // Check that nothing was rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
 
   // Set with non-empty handle
   task.SetSourceActor( newActor );
@@ -632,11 +548,42 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void)
   application.Render();
 
   // Check that the newActor was rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
-  if ( boundTextures.size() )
-  {
-    DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
-  }
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliRenderTaskSetSourceActorDestroyed(void)
+{
+  TestApplication application;
+
+  tet_infoline( "Testing RenderTask::SetSourceActor - Set a source actor and destroy the source actor" );
+
+  Stage stage = Stage::GetCurrent();
+  RenderTaskList taskList = stage.GetRenderTaskList();
+  RenderTask task = taskList.GetTask( 0u );
+
+  Actor actor = task.GetSourceActor();
+  DALI_TEST_CHECK( actor );
+
+  BufferImage img = BufferImage::New( 1,1 );
+  Actor newActor = CreateRenderableActor( img );
+  newActor.SetSize(1,1);
+  stage.Add( newActor );
+
+  task.SetSourceActor( newActor );
+
+  DALI_TEST_CHECK( task.GetSourceActor() != actor );
+  DALI_TEST_CHECK( task.GetSourceActor() == newActor );
+
+  application.SendNotification();
+  application.Render();
+
+  // Destroy the source actor
+  stage.Remove( newActor );
+  newActor.Reset();
+
+  DALI_TEST_CHECK( !task.GetSourceActor() );  // The source actor should be an empty handle.
+
   END_TEST;
 }
 
@@ -687,7 +634,7 @@ int UtcDaliRenderTaskGetSourceActorN(void)
   {
     Actor actor = task.GetSourceActor();
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -704,7 +651,7 @@ int UtcDaliRenderTaskSetExclusive(void)
 
   RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
 
-  // Manipulate the GenTextures behaviour, to identify different ImageActors
+  // Manipulate the GenTextures behaviour, to identify different actors
 
   std::vector<GLuint> ids;
   ids.push_back( 8 ); // 8 = actor1
@@ -713,7 +660,7 @@ int UtcDaliRenderTaskSetExclusive(void)
   application.GetGlAbstraction().SetNextTextureIds( ids );
 
   BufferImage img1 = BufferImage::New( 1,1 );
-  ImageActor actor1 = ImageActor::New( img1 );
+  Actor actor1 = CreateRenderableActor( img1 );
   actor1.SetSize(1,1);
   Stage::GetCurrent().Add( actor1 );
 
@@ -723,15 +670,20 @@ int UtcDaliRenderTaskSetExclusive(void)
 
   // Check that the actor1 was rendered
   const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
-  DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
+  DALI_TEST_GREATER( boundTextures.size(), static_cast<std::vector<GLuint>::size_type>( 0 ), TEST_LOCATION );
 
   if ( boundTextures.size() )
   {
-    DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
+    int c = 0;
+    DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION );
+    if( boundTextures.size() > 1 )
+    {
+      DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION );
+    }
   }
 
   BufferImage img2 = BufferImage::New( 1,1 );
-  ImageActor actor2 = ImageActor::New( img2 );
+  Actor actor2 = CreateRenderableActor( img2 );
   actor2.SetSize(1,1);
 
   // Force actor2 to be rendered before actor1
@@ -746,16 +698,21 @@ int UtcDaliRenderTaskSetExclusive(void)
   application.Render();
 
   // Check that the actors were rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
+  DALI_TEST_GREATER( boundTextures.size(), static_cast<std::vector<GLuint>::size_type>( 1 ), TEST_LOCATION );
 
   if ( boundTextures.size() )
   {
-    DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
-    DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
+    int c = 0;
+    DALI_TEST_EQUALS( boundTextures[c++], 9u/*unique to actor2*/, TEST_LOCATION );
+    if( boundTextures.size() > 2 )
+    {
+      DALI_TEST_EQUALS( boundTextures[c++], 9u/*unique to actor1*/, TEST_LOCATION );
+    }
+    DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION );
   }
 
   BufferImage img3 = BufferImage::New( 1,1 );
-  ImageActor actor3 = ImageActor::New( img3 );
+  Actor actor3 = CreateRenderableActor( img3 );
   actor3.SetSize(1,1);
 
   // Force actor3 to be rendered before actor2
@@ -770,13 +727,18 @@ int UtcDaliRenderTaskSetExclusive(void)
   application.Render();
 
   // Check that the actors were rendered
-  DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
+  DALI_TEST_GREATER( boundTextures.size(), static_cast<std::vector<GLuint>::size_type>( 2 ), TEST_LOCATION );
 
   if ( boundTextures.size() )
   {
-    DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
-    DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
-    DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
+    int c = 0;
+    DALI_TEST_EQUALS( boundTextures[c++], 10u/*unique to actor3*/, TEST_LOCATION );
+    if( boundTextures.size() > 3 )
+    {
+      DALI_TEST_EQUALS( boundTextures[c++], 10u/*unique to actor2*/, TEST_LOCATION );
+    }
+    DALI_TEST_EQUALS( boundTextures[c++], 9u/*unique to actor2*/, TEST_LOCATION );
+    DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION );
   }
 
   // Both actors are now connected to the root node
@@ -830,6 +792,12 @@ int UtcDaliRenderTaskSetExclusive(void)
     // Test that task 2 renders actor2
     DALI_TEST_CHECK( boundTextures[2] == 9u );
   }
+
+  // Create a renderable actor and replace the source actor in task2
+  auto actor4 = CreateRenderableActor();
+  task2.SetSourceActor( actor3 );
+  DALI_TEST_EQUALS( actor3, task2.GetSourceActor(), TEST_LOCATION );
+
   END_TEST;
 }
 
@@ -844,7 +812,7 @@ int UtcDaliRenderTaskSetExclusive02(void)
   application.GetGlAbstraction().SetNextTextureIds( ids );
 
   BufferImage img1 = BufferImage::New( 1,1 );
-  ImageActor actor1 = ImageActor::New( img1 );
+  Actor actor1 = CreateRenderableActor( img1 );
   actor1.SetSize(1,1);
   Stage::GetCurrent().Add( actor1 );
 
@@ -886,7 +854,7 @@ int UtcDaliRenderTaskSetExclusiveN(void)
   {
     task.SetExclusive(true);
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -939,9 +907,9 @@ int UtcDaliRenderTaskIsExclusiveN(void)
   try
   {
     bool x = task.IsExclusive();
-    x=x;
+    (void) x;
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1034,6 +1002,29 @@ int UtcDaliRenderTaskSetCameraActorN(void)
   END_TEST;
 }
 
+int UtcDaliRenderTaskSetCameraActorDestroyed(void)
+{
+  TestApplication application;
+
+  tet_infoline( "Testing RenderTask::SetCameraActor - Set a camera actor and destroy the camera actor" );
+
+  Stage stage = Stage::GetCurrent();
+  RenderTaskList taskList = stage.GetRenderTaskList();
+  RenderTask task = taskList.GetTask( 0u );
+
+  CameraActor newCameraActor = CameraActor::New();
+  task.SetCameraActor( newCameraActor );
+
+  DALI_TEST_EQUALS( task.GetCameraActor(), newCameraActor, TEST_LOCATION );
+
+  // Destroy the camera actor
+  newCameraActor.Reset();
+
+  CameraActor camera = task.GetCameraActor();
+  DALI_TEST_CHECK( !camera );  // The camera actor should be an empty handle.
+
+  END_TEST;
+}
 
 int UtcDaliRenderTaskGetCameraActorP(void)
 {
@@ -1063,7 +1054,7 @@ int UtcDaliRenderTaskGetCameraActorN(void)
   {
     Actor actor = task.GetCameraActor();
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1135,6 +1126,70 @@ int UtcDaliRenderTaskGetTargetFrameBufferN(void)
   END_TEST;
 }
 
+int UtcDaliRenderTaskSetFrameBufferP(void)
+{
+  TestApplication application;
+
+  tet_infoline("Testing RenderTask::SetFrameBuffer()");
+
+  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
+
+  RenderTask task = taskList.GetTask( 0u );
+
+  FrameBuffer newFrameBuffer = FrameBuffer::New( 128u, 128u, FrameBuffer::Attachment::NONE );
+  task.SetFrameBuffer( newFrameBuffer );
+  DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
+  END_TEST;
+}
+
+int UtcDaliRenderTaskSetFrameBufferN(void)
+{
+  TestApplication application;
+
+  tet_infoline("Testing RenderTask::SetFrameBuffer()");
+
+  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
+
+  RenderTask task = taskList.GetTask( 0u );
+  FrameBuffer newFrameBuffer; // Empty handle
+  task.SetFrameBuffer( newFrameBuffer );
+  DALI_TEST_EQUALS( (bool)task.GetFrameBuffer(), false, TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliRenderTaskGetFrameBufferP(void)
+{
+  TestApplication application;
+
+  tet_infoline("Testing RenderTask::GetFrameBuffer()");
+
+  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
+
+  RenderTask task = taskList.GetTask( 0u );
+
+  FrameBuffer newFrameBuffer = FrameBuffer::New( 1u, 1u, FrameBuffer::Attachment::NONE  );
+  task.SetFrameBuffer( newFrameBuffer );
+  DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
+  END_TEST;
+}
+
+int UtcDaliRenderTaskGetFrameBufferN(void)
+{
+  TestApplication application;
+
+  tet_infoline("Testing RenderTask::GetFrameBuffer()");
+
+  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
+
+  RenderTask task = taskList.GetTask( 0u );
+
+  // By default render-tasks do not render off-screen
+  FrameBuffer frameBuffer = task.GetFrameBuffer();
+  DALI_TEST_CHECK( !frameBuffer );
+
+  END_TEST;
+}
+
 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionP(void)
 {
   TestApplication application;
@@ -1175,7 +1230,7 @@ int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void)
   {
     task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1212,9 +1267,9 @@ int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void)
   try
   {
     RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
-    func=func;
+    (void) func;
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1249,7 +1304,7 @@ int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void)
     Actor mappingActor;
     task.SetScreenToFrameBufferMappingActor(mappingActor);
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1315,9 +1370,9 @@ int UtcDaliRenderTaskGetViewportN(void)
   try
   {
     Viewport viewport = task.GetViewport();
-    viewport = viewport;
+    (void) viewport;
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1362,7 +1417,7 @@ int UtcDaliRenderTaskSetViewportN(void)
     Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
     task.SetViewport( newViewport );
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1403,21 +1458,47 @@ int UtcDaliRenderTaskSetViewportPosition(void)
   // Set by Property test
   Vector2 newPosition2(32.0f, 32.0f);
   task.SetProperty( RenderTask::Property::VIEWPORT_POSITION, newPosition2 );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition, TEST_LOCATION ); // still the old position
 
   // Update
   application.SendNotification();
   application.Render();
 
   DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
 
   Vector2 newPosition3(64.0f, 0.0f);
   Animation animation = Animation::New(1.0f);
   animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition3, AlphaFunction::LINEAR );
   animation.Play();
 
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
+
   // Perform 1000ms worth of updates at which point animation should have completed.
   Wait(application, 1000);
   DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+
+  // Create another animation which animates by a certain value
+  const Vector2 newPosition4( 75.0f, 45.0f );
+  const Vector2 relativePosition( newPosition4 - newPosition3 );
+  animation = Animation::New( 1.0f );
+  animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_POSITION ), relativePosition );
+  animation.Play();
+
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, TEST_LOCATION );
+
+  // Perform 1000ms worth of updates at which point animation should have completed.
+  Wait(application, 1000);
+  DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+
   END_TEST;
 }
 
@@ -1451,21 +1532,46 @@ int UtcDaliRenderTaskSetViewportSize(void)
   // Set by Property test
   Vector2 newSize2(50.0f, 50.0f);
   task.SetProperty( RenderTask::Property::VIEWPORT_SIZE, newSize2 );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize, TEST_LOCATION ); // still the old position
 
   // Update
   application.SendNotification();
   application.Render();
 
   DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
 
   Vector2 newSize3(10.0f, 10.0f);
   Animation animation = Animation::New(1.0f);
   animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_SIZE ), newSize3, AlphaFunction::LINEAR );
   animation.Play();
 
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE  ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
+
   // Perform 1000ms worth of updates at which point animation should have completed.
   Wait(application, 1000);
   DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE  ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+
+  // Create another animation which animates by a certain value
+  const Vector2 newSize4( 75.0f, 45.0f );
+  const Vector2 relativeSize( newSize4 - newSize3 );
+  animation = Animation::New( 1.0f );
+  animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_SIZE ), relativeSize );
+  animation.Play();
+
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, TEST_LOCATION );
+
+  // Perform 1000ms worth of updates at which point animation should have completed.
+  Wait(application, 1000);
+  DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
 
   END_TEST;
 }
@@ -1492,11 +1598,44 @@ int UtcDaliRenderTaskSetClearColorP(void)
   DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
 
   task.SetProperty( RenderTask::Property::CLEAR_COLOR, testColor2 );
+  DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor, TEST_LOCATION ); // still the old color
 
   // Wait a frame.
   Wait(application);
 
   DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
+
+  Vector4 newColor3(10.0f, 10.0f, 20.0f, 30.0f);
+  Animation animation = Animation::New(1.0f);
+  animation.AnimateTo( Property( task, RenderTask::Property::CLEAR_COLOR ), newColor3, AlphaFunction::LINEAR );
+  animation.Play();
+
+  DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR  ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
+
+  // Perform 1000ms worth of updates at which point animation should have completed.
+  Wait(application, 1000);
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR  ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+
+  // Create another animation which animates by a certain value
+  const Vector4 newColor4( 0.45f, 0.35f, 0.25f, 0.1f );
+  const Vector4 relativeColor( newColor4 - newColor3 );
+  animation = Animation::New( 1.0f );
+  animation.AnimateBy( Property( task, RenderTask::Property::CLEAR_COLOR ), relativeColor );
+  animation.Play();
+
+  DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_10, TEST_LOCATION );
+
+  // Perform 1000ms worth of updates at which point animation should have completed.
+  Wait(application, 1000);
+  DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
+  DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
+
   END_TEST;
 }
 
@@ -1511,7 +1650,7 @@ int UtcDaliRenderTaskSetClearColorN(void)
   {
     task.SetClearColor( Vector4::ZERO );
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1541,9 +1680,9 @@ int UtcDaliRenderTaskGetClearColorN(void)
   try
   {
     Vector4 color = task.GetClearColor();
-    color = color;
+    (void) color;
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1560,13 +1699,13 @@ int UtcDaliRenderTaskSetClearEnabledP(void)
   RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
 
   RenderTask task = taskList.GetTask( 0u );
-  DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
-
-  task.SetClearEnabled( true );
-  DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
+  DALI_TEST_CHECK( task.GetClearEnabled() ); // defaults to true
 
   task.SetClearEnabled( false );
   DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
+
+  task.SetClearEnabled( true );
+  DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
   END_TEST;
 }
 
@@ -1581,7 +1720,7 @@ int UtcDaliRenderTaskSetClearEnabledN(void)
   {
     task.SetClearEnabled(true);
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1598,7 +1737,7 @@ int UtcDaliRenderTaskGetClearEnabledP(void)
   RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
 
   RenderTask task = taskList.GetTask( 0u );
-  DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
+  DALI_TEST_CHECK( task.GetClearEnabled() ); // defaults to true
   END_TEST;
 }
 
@@ -1613,9 +1752,9 @@ int UtcDaliRenderTaskGetClearEnabledN(void)
   try
   {
     bool x = task.GetClearEnabled();
-    x=x;
+    (void) x;
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1651,7 +1790,7 @@ int UtcDaliRenderTaskSetCullModeN(void)
   {
     task.SetCullMode( false );
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1681,9 +1820,9 @@ int UtcDaliRenderTaskGetCullModeN(void)
   try
   {
     bool x = task.GetCullMode();
-    x=x;
+    (void) x;
   }
-  catch (Dali::DaliException(e))
+  catch (Dali::DaliException& e)
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1744,7 +1883,7 @@ int UtcDaliRenderTaskSignalFinished(void)
 
   BufferImage image = BufferImage::New( 10, 10 );
   image.Update();
-  ImageActor rootActor = ImageActor::New( image );
+  Actor rootActor = CreateRenderableActor( image );
   rootActor.SetSize( 10, 10 );
   Stage::GetCurrent().Add( rootActor );
 
@@ -1799,7 +1938,6 @@ int UtcDaliRenderTaskSignalFinished(void)
   application.Render();
   application.SendNotification();
   DALI_TEST_CHECK( finished );
-  finished = false;
 
   DALI_TEST_EQUALS( application.GetUpdateStatus(), 0, TEST_LOCATION );
   END_TEST;
@@ -1820,19 +1958,14 @@ int UtcDaliRenderTaskContinuous01(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
 
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
+  Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
   application.SendNotification();
 
   // START PROCESS/RENDER                     Input,    Expected  Input, Expected, KeepUpdating
@@ -1863,13 +1996,10 @@ int UtcDaliRenderTaskContinuous02(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
 
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
+  Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
   secondRootActor.SetVisible(false);
 
@@ -1877,7 +2007,6 @@ int UtcDaliRenderTaskContinuous02(void)
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,    Expected  Input,    Expected, KeepUpdating
@@ -1907,18 +2036,14 @@ int UtcDaliRenderTaskContinuous03(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
+  Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
@@ -1939,7 +2064,7 @@ int UtcDaliRenderTaskContinuous04(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: Resource not ready\nPOST:continuous renders, no Finished signal");
+  tet_infoline("Testing RenderTask Render Continuous using loaded image");
 
   // SETUP AN OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -1949,12 +2074,9 @@ int UtcDaliRenderTaskContinuous04(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
+  Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
@@ -1964,116 +2086,45 @@ int UtcDaliRenderTaskContinuous04(void)
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING - expect 'continuous' renders to start, no finished signal
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, false, __LINE__ ) );
   END_TEST;
 }
 
-int UtcDaliRenderTaskContinous05(void)
+int UtcDaliRenderTaskOnce01(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Continuous using Mesh which accesses texture through sampler with loading image\n"
-               "PRE: Resource not ready\nPOST:continuous renders, no Finished signal");
+  tet_infoline("Testing RenderTask Render Once GlSync, using loaded image");
 
   // SETUP AN OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
   TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
   drawTrace.Enable(true);
 
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
+  Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
 
-  Material material = CreateMaterial();
-  Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  material.AddTexture( image, "sTexture" );
-
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New(geometry, material);
-  Actor secondRootActor = Actor::New();
-  secondRootActor.AddRenderer(renderer);
-  secondRootActor.SetSize(100, 100);
   Stage::GetCurrent().Add(secondRootActor);
 
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
+  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true, __LINE__  ) );
 
-  // FINISH RESOURCE LOADING - expect 'continuous' renders to start, no finished signal
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
+  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
+  DALI_TEST_CHECK( lastSyncObj != NULL );
+  sync.SetObjectSynced( lastSyncObj, true );
 
-  END_TEST;
-}
-
-
-int UtcDaliRenderTaskOnce01(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once GlSync, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
-
-  // SETUP AN OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  // MAKE SOURCE VISIBLE
-  secondRootActor.SetVisible(true);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING - expect no rendering yet
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true, __LINE__  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
   END_TEST;
 }
 
@@ -2081,8 +2132,7 @@ int UtcDaliRenderTaskOnce02(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loading image.\n"
-               "PRE: Resources not ready\nPOST: Finished signal sent once only");
+  tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n");
 
   // SETUP AN OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -2093,18 +2143,16 @@ int UtcDaliRenderTaskOnce02(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
 
-  Material material = CreateMaterial();
-  Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  material.AddTexture( image, "sTexture");
+  Shader shader = CreateShader();
+  Image image = CreateResourceImage(application, "aFile.jpg");
+  TextureSet textureSet = CreateTextureSet( image );
 
   Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New(geometry, material);
+  Renderer renderer = Renderer::New(geometry, shader);
+  renderer.SetTextures( textureSet );
   Actor secondRootActor = Actor::New();
   secondRootActor.AddRenderer(renderer);
   secondRootActor.SetSize(100, 100);
@@ -2116,297 +2164,23 @@ int UtcDaliRenderTaskOnce02(void)
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-   // FINISH RESOURCE LOADING - expect no rendering yet
-   CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-   Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-   DALI_TEST_CHECK( lastSyncObj != NULL );
-
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-   application.GetPlatform().ClearReadyResources();
-   sync.SetObjectSynced( lastSyncObj, true );
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true, __LINE__  ) );
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
-
-   END_TEST;
-}
-
-int UtcDaliRenderTaskOnce03(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once GlSync, using loading image. Switch from render always after ready to render once\n"
-               "PRE: Render task ready, Image not loaded\n"
-               "POST: Finished signal sent only once");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true, __LINE__  ) );
 
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
   Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
   DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
   sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
-
-  END_TEST;
-}
-
-
-int UtcDaliRenderTaskOnce04(void)
-{
-  TestApplication application;
-  tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loading image.\n"
-               "Switch from render always after ready to render once\n"
-               "PRE: Render task ready, Image not loaded\n"
-               "POST: Finished signal sent only once");
-
-  // SETUP AN OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-
-  Material material = CreateMaterial();
-  Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  material.AddTexture( image, "sTexture" );
-
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New(geometry, material);
-  Actor secondRootActor = Actor::New();
-  secondRootActor.AddRenderer(renderer);
-  secondRootActor.SetSize(100, 100);
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  sync.SetObjectSynced( lastSyncObj, true );
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
 
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnce05(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once GlSync\n"
-               "Switch from Render always after ready to render once with resources unready\n"
-               "PRE: Everything ready to render\n"
-               "POST: Finished signal sent once");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  // CHANGE TO RENDER ONCE
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-  application.GetPlatform().ClearReadyResources();
-
-  sync.SetObjectSynced( lastSyncObj, true );
-
-  // Expect: No draw - we've just drawn our render task once, above. No finished signal -
-  // we won't read the gl sync until the next frame. Continue rendering - we're waiting for
-  // the sync
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  // Expect: 1 final draw - this Update doesn't update the scene, hence render instructions
-  // from last frame but 1 are still present.
-  // Finished signal should be true - we've just done the sync.
-  // Should now stop rendering and updating - nothing left to do.
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, true, false, __LINE__ ) );
-
-  END_TEST;
-}
-
-#if 0
-//int UtcDaliRenderTaskOnce06(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once GlSync\n"
-               "During RenderOnce, make ready resources unready before sending first finished signal\n"
-               "PRE: Everything ready.\n"
-               "POST: Finished signal sent only once");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-
-  Stage::GetCurrent().Add(secondRootActor);
-  application.GetPlatform().ClearReadyResources();
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-
-  // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-
-  // Doesn't work...
-  ReloadImage(application, secondRootActor.GetImage());
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, true, __LINE__  ) );
-
-  // Finished rendering - expect no more renders, no more signals:
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  END_TEST;
+   END_TEST;
 }
-#endif
 
-int UtcDaliRenderTaskOnce07(void)
+int UtcDaliRenderTaskOnce03(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Once GLSync\n"
-               "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
-               "PRE: Everything ready\n"
-               "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
+  tet_infoline("Testing RenderTask Render Once GlSync, using loaded image. Switch from render always after ready to render once\n");
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -2417,16 +2191,9 @@ int UtcDaliRenderTaskOnce07(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-  application.GetPlatform().ClearReadyResources();
-
+  Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
@@ -2435,510 +2202,85 @@ int UtcDaliRenderTaskOnce07(void)
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
-  // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
   application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
 
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true, __LINE__  ) );
 
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  lastSyncObj = sync.GetLastSyncObject();
+  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
   DALI_TEST_CHECK( lastSyncObj != NULL );
+  sync.SetObjectSynced( lastSyncObj, true );
 
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnce08(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once GLSync\n"
-               "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers "
-               "another render & another finished signal\n"
-               "PRE: Everything ready\n"
-               "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
-
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  sync.GetTrace().Enable(true);
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-  application.GetPlatform().ClearReadyResources();
-
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, /*GL-SYNC*/ true);
-  bool finished = false;
-
-  ConnectionTracker connectionTracker;
-  RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
-  newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
-
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj == NULL );
-  DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 0, TEST_LOCATION );
-
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-  DALI_TEST_EQUALS( sync.GetNumberOfSyncObjects(), 1, TEST_LOCATION );
-  DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 1, TEST_LOCATION );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-
-  DALI_TEST_EQUALS( sync.GetNumberOfSyncObjects(), 1, TEST_LOCATION );
-  DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 1, TEST_LOCATION );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  DALI_TEST_EQUALS( sync.GetNumberOfSyncObjects(), 1, TEST_LOCATION );
-  DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 1, TEST_LOCATION );
-
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-  application.SendNotification();
-
-  // Expect SetRefreshRate to have been called again
-  // Prevent next finished signal calling refresh once again
-  RenderTaskFinished renderTaskFinished( finished );
-  connectionTracker.DisconnectAll();
-  newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-  END_TEST;
-}
-
-
-int UtcDaliRenderTaskOnce09(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once GlSync\n"
-               "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
-               "PRE: resources ready\n"
-               "POST: Only 1 finished signal sent.");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-  application.GetPlatform().ClearReadyResources();
-
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
-
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnce10(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once GlSync\n"
-               "SetRefreshRate(ONCE), resource load failed completes render task.\n"
-               "PRE: resources not ready\n"
-               "POST: Only 1 finished signal sent.");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  tet_printf("  FailImageLoad\n");
-
-  FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) ); // nothing to draw
-  application.SendNotification();
-
-  // load is now failed so there's nothing more to render in the render task
-  // Expect finished signal, as all resources are complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnceNoSync01(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
-
-  // SETUP AN OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING - expect immediate rendering yet
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnceNoSync02(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
-               "PRE: Resources not ready\nPOST: Finished signal sent once only");
-  // SETUP AN OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-
-  Material material = CreateMaterial();
-  Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  material.AddTexture( image, "sTexture");
-
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New(geometry, material);
-  Actor secondRootActor = Actor::New();
-  secondRootActor.AddRenderer(renderer);
-  secondRootActor.SetSize(100, 100);
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING - expect immediate rendering yet
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnceNoSync03(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once, using loading image. Switch from render always after ready to render once\n"
-               "PRE: Render task ready, Image not loaded\n"
-               "POST: Finished signal sent only once");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  Stage::GetCurrent().Add(secondRootActor);
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnceNoSync04(void)
-{
-  TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
-               "Switch from render always after ready to render once\n"
-               "PRE: Render task ready, Image not loaded\n"
-               "POST: Finished signal sent only once");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
-
-  Actor rootActor = Actor::New();
-  Stage::GetCurrent().Add( rootActor );
-
-  CameraActor offscreenCameraActor = CameraActor::New();
-  Stage::GetCurrent().Add( offscreenCameraActor );
-
-  Material material = CreateMaterial();
-  Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  material.AddTexture( image, "sTexture" );
-
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New(geometry, material);
-  Actor secondRootActor = Actor::New();
-  secondRootActor.AddRenderer(renderer);
-  secondRootActor.SetSize(100, 100);
-  Stage::GetCurrent().Add(secondRootActor);
-
-
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
-  bool finished = false;
-  RenderTaskFinished renderTaskFinished( finished );
-  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
-  application.SendNotification();
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj == NULL );
-
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-
-  lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj == NULL );
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
-
-  lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj == NULL );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
 
   END_TEST;
 }
 
-int UtcDaliRenderTaskOnceNoSync05(void)
+
+int UtcDaliRenderTaskOnce04(void)
 {
   TestApplication application;
+  tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n"
+               "Switch from render always after ready to render once\n"
+              );
 
-  tet_infoline("Testing RenderTask Render Once\n"
-               "Switch from Render always after ready to render once with resources unready\n"
-               "PRE: Everything ready to render\n"
-               "POST: Finished signal sent once");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
+  // SETUP AN OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
   TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
   drawTrace.Enable(true);
 
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
+
+  Shader shader = CreateShader();
+  Image image = CreateResourceImage(application, "aFile.jpg");
+  TextureSet textureSet = CreateTextureSet( image );
+
+  Geometry geometry = CreateQuadGeometry();
+  Renderer renderer = Renderer::New(geometry, shader);
+  renderer.SetTextures( textureSet );
+  Actor secondRootActor = Actor::New();
+  secondRootActor.AddRenderer(renderer);
+  secondRootActor.SetSize(100, 100);
   Stage::GetCurrent().Add(secondRootActor);
 
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
+  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj == NULL );
-
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
-  // CHANGE TO RENDER ONCE
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
+  application.SendNotification();
+
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true, __LINE__  ) );
+
+  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
+  DALI_TEST_CHECK( lastSyncObj != NULL );
+  sync.SetObjectSynced( lastSyncObj, true );
+
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
 
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
   END_TEST;
 }
 
-#if 0
-//int UtcDaliRenderTaskOnceNoSync06(void)
+int UtcDaliRenderTaskOnceNoSync01(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Once\n"
-               "During RenderOnce, make ready resources unready before sending first finished signal\n"
-               "PRE: Everything ready.\n"
-               "POST: Finished signal sent only once");
+  tet_infoline("Testing RenderTask Render Once, \nPRE: Resources ready\nPOST: Finished signal sent once only");
 
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
+  // SETUP AN OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
   TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
   drawTrace.Enable(true);
@@ -2946,61 +2288,29 @@ int UtcDaliRenderTaskOnceNoSync05(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-  application.GetPlatform().ClearReadyResources();
-
+  Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
 
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
+  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-
-  // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-
-  // Doesn't work...
-  ReloadImage(application, secondRootActor.GetImage());
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  // FINISH RESOURCE LOADING
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, true, true, __LINE__ ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
   END_TEST;
 }
-#endif
 
-int UtcDaliRenderTaskOnceNoSync07(void)
+int UtcDaliRenderTaskOnceNoSync02(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Once\n"
-               "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
-               "PRE: Everything ready\n"
-               "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
-
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
+  tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loaded image.\n"
+               "PRE: Resources ready\nPOST: Finished signal sent once only");
+  // SETUP AN OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
   TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
   drawTrace.Enable(true);
@@ -3008,50 +2318,41 @@ int UtcDaliRenderTaskOnceNoSync07(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-  application.GetPlatform().ClearReadyResources();
 
+  Shader shader = CreateShader();
+  Image image = CreateResourceImage(application, "aFile.jpg");
+  TextureSet textureSet = CreateTextureSet( image );
+
+  Geometry geometry = CreateQuadGeometry();
+  Renderer renderer = Renderer::New(geometry, shader);
+  renderer.SetTextures( textureSet );
+  Actor secondRootActor = Actor::New();
+  secondRootActor.AddRenderer(renderer);
+  secondRootActor.SetSize(100, 100);
   Stage::GetCurrent().Add(secondRootActor);
 
-  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
+  RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false, __LINE__ ) );
+  application.GetPlatform().ClearReadyResources();
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
 
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false, __LINE__ ) );
   END_TEST;
 }
 
-int UtcDaliRenderTaskOnceNoSync08(void)
+int UtcDaliRenderTaskOnceNoSync03(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Once\n"
-               "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers\n"
-               "another render & another finished signal\n"
-               "PRE: Everything ready\n"
-               "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
-
+  tet_infoline("Testing RenderTask Render Once, using loaded image. Switch from render always after ready to render once\n"
+               "PRE: Render task ready, Image loaded\n"
+               "POST: Finished signal sent only once");
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -3061,56 +2362,34 @@ int UtcDaliRenderTaskOnceNoSync08(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-  application.GetPlatform().ClearReadyResources();
-
+  Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
   bool finished = false;
-
-  ConnectionTracker connectionTracker;
-  RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
-  newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
-
+  RenderTaskFinished renderTaskFinished( finished );
+  newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
-  // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false, __LINE__ ) );
-
-  // Expect SetRefreshRate to have been called again
-  // Prevent next finished signal calling refresh once again
-  RenderTaskFinished renderTaskFinished( finished );
-  connectionTracker.DisconnectAll();
-  newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
-
+  application.SendNotification(); //         Input,    Expected  Input,    Expected
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
   END_TEST;
 }
 
-
-int UtcDaliRenderTaskOnceNoSync09(void)
+int UtcDaliRenderTaskOnceNoSync04(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask Render Once\n"
-               "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
-               "PRE: resources ready\n"
-               "POST: Only 1 finished signal sent.");
+  tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
+               "Switch from render always after ready to render once\n"
+               "PRE: Render task ready, Image not loaded\n"
+               "POST: Finished signal sent only once");
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -3120,48 +2399,52 @@ int UtcDaliRenderTaskOnceNoSync09(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  application.Render();
-  application.GetPlatform().ClearReadyResources();
 
+  Shader shader = CreateShader();
+  Image image = CreateResourceImage(application, "aFile.jpg");
+  TextureSet textureSet = CreateTextureSet( image );
+
+  Geometry geometry = CreateQuadGeometry();
+  Renderer renderer = Renderer::New(geometry, shader);
+  renderer.SetTextures( textureSet );
+  Actor secondRootActor = Actor::New();
+  secondRootActor.AddRenderer(renderer);
+  secondRootActor.SetSize(100, 100);
   Stage::GetCurrent().Add(secondRootActor);
 
+
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
+  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
+  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
+  DALI_TEST_CHECK( lastSyncObj == NULL );
 
-  // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
+  application.SendNotification(); //         Input,    Expected  Input,    Expected
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__ ) );
+
+  lastSyncObj = sync.GetLastSyncObject();
+  DALI_TEST_CHECK( lastSyncObj == NULL );
 
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false, __LINE__ ) );
   END_TEST;
 }
 
-int UtcDaliRenderTaskOnceNoSync10(void)
+int UtcDaliRenderTaskOnceNoSync05(void)
 {
   TestApplication application;
 
   tet_infoline("Testing RenderTask Render Once\n"
                "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
-               "PRE: resources not ready\n"
-               "POST: Only 1 finished signal sent.");
+               "PRE: resources failed to load\n"
+               "POST: No finished signal sent.");
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -3171,11 +2454,9 @@ int UtcDaliRenderTaskOnceNoSync10(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor secondRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
+  Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
@@ -3185,19 +2466,11 @@ int UtcDaliRenderTaskOnceNoSync10(void)
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,     Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
   // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) );
-
-  FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true, __LINE__ ) ); // nothing to draw
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, true,  false, __LINE__ ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
   END_TEST;
 }
@@ -3210,7 +2483,7 @@ int UtcDaliRenderTaskOnceChain01(void)
 
   tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
                "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
-               "PRE: resources not ready\n"
+               "PRE: resources ready\n"
                "POST: 2 finished signals sent.");
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
@@ -3221,12 +2494,9 @@ int UtcDaliRenderTaskOnceChain01(void)
   Actor defaultRootActor = Actor::New(); // Root for default RT
   Stage::GetCurrent().Add( defaultRootActor );
 
-  CameraActor offscreenCameraActor = CameraActor::New();
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
   Stage::GetCurrent().Add( offscreenCameraActor );
-  ImageActor firstRootActor = CreateLoadingImageActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED);
-  Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
-  Integration::ResourceId imageRequestId = imageRequest->GetId();
-  Integration::ResourceTypeId imageType  = imageRequest->GetType()->id;
+  Actor firstRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
   Stage::GetCurrent().Add(firstRootActor);
 
   // first render task
@@ -3237,7 +2507,7 @@ int UtcDaliRenderTaskOnceChain01(void)
 
   // Second render task
   FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
-  ImageActor secondRootActor = ImageActor::New( fbo );
+  Actor secondRootActor = CreateRenderableActor( fbo );
   Stage::GetCurrent().Add(secondRootActor);
   RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
   bool secondFinished = false;
@@ -3246,24 +2516,14 @@ int UtcDaliRenderTaskOnceChain01(void)
 
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  firstFinished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( firstFinished == false );
-  DALI_TEST_CHECK( secondFinished == false );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  firstFinished, false, true, __LINE__ ) );
-  DALI_TEST_CHECK( firstFinished == false );
-  DALI_TEST_CHECK( secondFinished == false );
-
-  CompleteImageLoad(application, imageRequestId, imageType);
+  //Both render tasks are executed.
   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  firstFinished, false, true, __LINE__ ) );
   DALI_TEST_CHECK( firstFinished == false );
   DALI_TEST_CHECK( secondFinished == false );
 
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  firstFinished, true, true, __LINE__ ) );
+  //Nothing else to render and both render task should have finished now
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,  firstFinished, true, false, __LINE__ ) );
   DALI_TEST_CHECK( firstFinished == true );
-  DALI_TEST_CHECK( secondFinished == false );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  secondFinished, true, false, __LINE__ ) );
   DALI_TEST_CHECK( secondFinished == true );
 
   END_TEST;
@@ -3282,78 +2542,6 @@ int UtcDaliRenderTaskProperties(void)
   END_TEST;
 }
 
-int UtcDaliRenderTaskSetScreenToFrameBufferMappingActor(void)
-{
-  TestApplication application;
-  tet_infoline("Testing RenderTask::SetScreenToFrameBufferMappingActor ");
-
-  Stage stage = Stage::GetCurrent();
-  Size stageSize = stage.GetSize();
-  Actor mappingActor = Actor::New();
-  Vector2 scale( 0.6f, 0.75f);
-  Vector2 offset( stageSize.x*0.1f, stageSize.y*0.15f);
-  mappingActor.SetSize( stageSize * scale );
-  mappingActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  mappingActor.SetPosition( offset.x, offset.y );
-  stage.Add( mappingActor );
-
-  Actor offscreenActor = Actor::New();
-  offscreenActor.SetSize( stageSize );
-  offscreenActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  stage.Add( offscreenActor );
-
-  RenderTaskList taskList = stage.GetRenderTaskList();
-  RenderTask renderTask = taskList.CreateTask();
-  FrameBufferImage frameBufferImage =  FrameBufferImage::New(stageSize.width*scale.x, stageSize.height*scale.y, Pixel::A8, Image::NEVER);
-  renderTask.SetSourceActor( offscreenActor );
-  renderTask.SetExclusive( true );
-  renderTask.SetInputEnabled( true );
-  renderTask.SetTargetFrameBuffer( frameBufferImage );
-  renderTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
-  renderTask.SetScreenToFrameBufferMappingActor( mappingActor );
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-
-  // Render and notify
-  application.SendNotification();
-  application.Render();
-  application.Render();
-  application.SendNotification();
-
-  Vector2 screenCoordinates( stageSize.x * 0.05f, stageSize.y * 0.05f );
-  Dali::HitTestAlgorithm::Results results;
-  DALI_TEST_CHECK( !results.actor );
-  DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
-  // miss expected, results not changed
-  DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
-  DALI_TEST_CHECK( !results.actor );
-  DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
-
-  screenCoordinates.x = stageSize.x * 0.265f;
-  screenCoordinates.y = stageSize.y * 0.33f;
-  results.actor = Actor();
-  results.actorCoordinates = Vector2::ZERO;
-  // hit expected, results changed
-  DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
-  DALI_TEST_CHECK( results.actor  == offscreenActor );
-  DALI_TEST_EQUALS( (screenCoordinates-offset)/scale , results.actorCoordinates, 0.1f, TEST_LOCATION );
-
-  screenCoordinates.x = stageSize.x * 0.435f;
-  screenCoordinates.y = stageSize.y * 0.52f;
-  // hit expected, results changed
-  DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
-  DALI_TEST_CHECK( results.actor  == offscreenActor );
-  const Vector2 expectedCoordinates = (screenCoordinates-offset)/scale;
-  DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
-
-  screenCoordinates.x = stageSize.x * 0.65f;
-  screenCoordinates.y = stageSize.y * 0.95f;
-  // miss expected, results not changed
-  DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
-  DALI_TEST_CHECK( results.actor  == offscreenActor );
-  DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
-  END_TEST;
-}
-
 int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
 {
   TestApplication application;
@@ -3368,7 +2556,7 @@ int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
   Stage::GetCurrent().Add( offscreenCameraActor );
 
   BufferImage image = BufferImage::New( 10, 10 );
-  ImageActor rootActor = ImageActor::New( image );
+  Actor rootActor = CreateRenderableActor( image );
   rootActor.SetSize( 10, 10 );
   rootActor.SetVisible(false);
   Stage::GetCurrent().Add( rootActor );
@@ -3444,16 +2632,16 @@ int UtcDaliRenderTaskFinishMissingImage(void)
   TestApplication application;
 
   // Previously we had bugs where not having a resource ID would cause render-tasks to wait forever
-  tet_infoline("Testing RenderTask::SignalFinished() when an ImageActor has no Image set");
+  tet_infoline("Testing RenderTask::SignalFinished() when an Actor has no Image set");
 
   Stage stage = Stage::GetCurrent();
 
   BufferImage image = BufferImage::New( 10, 10 );
-  ImageActor rootActor = ImageActor::New( image );
+  Actor rootActor = CreateRenderableActor( image );
   rootActor.SetSize( 10, 10 );
   stage.Add( rootActor );
 
-  ImageActor actorWithMissingImage = ImageActor::New( Image() );
+  Actor actorWithMissingImage = CreateRenderableActor( Image() );
   actorWithMissingImage.SetSize( 10, 10 );
   stage.Add( actorWithMissingImage );
 
@@ -3482,7 +2670,7 @@ int UtcDaliRenderTaskFinishMissingImage(void)
 
 int UtcDaliRenderTaskWorldToViewport(void)
 {
-  TestApplication application( static_cast<size_t>(400), static_cast<size_t>(400) ); // square surface
+  TestApplication application( 400u, 400u ); // square surface
 
   RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
 
@@ -3575,3 +2763,110 @@ int UtcDaliRenderTaskViewportToLocal(void)
   END_TEST;
 
 }
+
+int UtcDaliRenderTaskOffscreenViewportToLocal(void)
+{
+  TestApplication application;
+  Actor actor = Actor::New();
+  actor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+  actor.SetSize( 100.0f, 100.0f );
+  actor.SetPosition( 10.0f, 10.0f );
+  Stage::GetCurrent().Add( actor );
+
+  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
+  RenderTask task = taskList.CreateTask();
+
+  FrameBufferImage newFrameBuffer = FrameBufferImage::New( 10, 10 );
+  task.SetTargetFrameBuffer( newFrameBuffer );
+  task.SetSourceActor( actor );
+  task.SetScreenToFrameBufferMappingActor( actor );
+
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
+  Stage::GetCurrent().Add( offscreenCameraActor );
+  task.SetCameraActor( offscreenCameraActor );
+
+  // flush the queue and render once
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  float localX;
+  float localY;
+
+  float rtLocalX;
+  float rtLocalY;
+
+  float screenX = 50.0f;
+  float screenY = 50.0f;
+
+  DALI_TEST_CHECK( actor.ScreenToLocal(localX, localY, screenX, screenY) );
+
+  DALI_TEST_CHECK( task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY ) );
+
+  DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION);
+  DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION);
+
+  END_TEST;
+}
+
+int UtcDaliRenderTaskRequiresSync(void)
+{
+  TestApplication application;
+  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
+
+  RenderTask newTask = taskList.CreateTask();
+  newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, false );
+
+  DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
+  DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
+
+  newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
+
+  DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );
+  DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliRenderTaskSetClearEnabled(void)
+{
+  TestApplication application;
+
+  tet_infoline("UtcDaliRenderTaskSetClearEnabled");
+
+  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+
+  Actor renderableActor = CreateRenderableActorSuccess( application, "aFile.jpg" );
+  Stage::GetCurrent().Add( renderableActor );
+
+  Actor rootActor = Actor::New();
+  Stage::GetCurrent().Add( rootActor );
+
+  CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
+  Stage::GetCurrent().Add( offscreenCameraActor );
+
+  Actor sourceActor = CreateRenderableActorSuccess( application, "aFile.jpg" );
+  Stage::GetCurrent().Add( sourceActor );
+
+  RenderTask newTask = CreateRenderTask( application, offscreenCameraActor, rootActor, sourceActor, RenderTask::REFRESH_ALWAYS, false );
+
+  DALI_TEST_EQUALS( gl.GetClearCountCalled(), 0, TEST_LOCATION );
+
+  application.SendNotification();
+  application.Render();
+
+  // glClear should be called twice - default task and the new task.
+  DALI_TEST_EQUALS( gl.GetClearCountCalled(), 2, TEST_LOCATION );
+
+  newTask.SetClearEnabled( false );
+
+  application.SendNotification();
+  application.Render();
+
+  // The count should increase by 1 - default task only.
+  DALI_TEST_EQUALS( gl.GetClearCountCalled(), 3, TEST_LOCATION );
+
+  END_TEST;
+}