Remove RenderSurface from Core
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-RenderTask.cpp
index 8cc7e8f..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.
  *
  * 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 <iostream>
-
 #include <stdlib.h>
 #include <dali/public-api/dali-core.h>
 #include <dali/devel-api/events/hit-test-algorithm.h>
 #include <stdlib.h>
 #include <dali/public-api/dali-core.h>
 #include <dali/devel-api/events/hit-test-algorithm.h>
@@ -28,6 +27,7 @@
 
 #define BOOLSTR(x) ((x)?"T":"F")
 
 
 #define BOOLSTR(x) ((x)?"T":"F")
 
+//& set: DaliRenderTask
 
 using namespace Dali;
 
 
 using namespace Dali;
 
@@ -169,56 +169,30 @@ bool TestScreenToFrameBufferFunction( Vector2& coordinates )
   return true;
 }
 
   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 );
   actor.SetSize( 80, 80 );
-  application.SendNotification();
-  application.Render(16);
   return actor;
 }
 
   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 );
   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,
 }
 
 RenderTask CreateRenderTask(TestApplication& application,
@@ -254,13 +228,17 @@ RenderTask CreateRenderTask(TestApplication& application,
   newTask.SetExclusive( true );
   newTask.SetRefreshRate( refreshRate );
   newTask.SetTargetFrameBuffer( frameBufferImage );
   newTask.SetExclusive( true );
   newTask.SetRefreshRate( refreshRate );
   newTask.SetTargetFrameBuffer( frameBufferImage );
+  newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, glSync );
   return newTask;
 }
 
   return newTask;
 }
 
-bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished, bool testKeepUpdating )
+bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished, bool testKeepUpdating, int lineNumber )
 {
   finishedSig = false;
   callStack.Reset();
 {
   finishedSig = false;
   callStack.Reset();
+
+  tet_printf("TestApplication::UpdateRender().\n");
+
   application.Render(16);
   application.SendNotification();
 
   application.Render(16);
   application.SendNotification();
 
@@ -299,49 +277,15 @@ bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool
 
   bool result = (sigPassed && drawPassed && keepUpdatingPassed);
 
 
   bool result = (sigPassed && drawPassed && keepUpdatingPassed);
 
-  tet_printf("UpdateRender: Expected: Draw:%s Signal:%s Keep Updating: %s  Actual: Draw:%s  Signal:%s KeepUpdating: %s  %s\n",
+  tet_printf("UpdateRender: Expected: Draw:%s Signal:%s KeepUpdating: %s  Actual: Draw:%s  Signal:%s KeepUpdating: %s  %s, line %d\n",
              BOOLSTR(testDrawn), BOOLSTR(testFinished), BOOLSTR(testKeepUpdating),
              BOOLSTR(drawResult), BOOLSTR(finishedSig), BOOLSTR(keepUpdating),
              BOOLSTR(testDrawn), BOOLSTR(testFinished), BOOLSTR(testKeepUpdating),
              BOOLSTR(drawResult), BOOLSTR(finishedSig), BOOLSTR(keepUpdating),
-             result ? "Passed":"Failed");
+             result ? "Passed":"Failed",
+             lineNumber );
 
   return result;
 }
 
 
   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
 
 
 } // unnamed namespace
 
 
@@ -411,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();
   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();
   RenderTaskList taskList = stage.GetRenderTaskList();
-
   RenderTask task = taskList.GetTask( 0u );
 
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
   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 );
   BufferImage img = BufferImage::New( 1,1 );
-  ImageActor newActor = ImageActor::New( img );
+  Actor newActor = CreateRenderableActor( img );
   newActor.SetSize(1,1);
   stage.Add( newActor );
 
   newActor.SetSize(1,1);
   stage.Add( newActor );
 
@@ -439,13 +375,17 @@ int UtcDaliRenderTaskSetSourceActorP01(void)
   DALI_TEST_CHECK( task.GetSourceActor() != actor );
   DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
 
   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
   // 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;
 }
 
   END_TEST;
 }
@@ -459,8 +399,6 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
 
   Stage stage = Stage::GetCurrent();
 
 
   Stage stage = Stage::GetCurrent();
 
-  const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
-
   RenderTaskList taskList = stage.GetRenderTaskList();
 
   RenderTask task = taskList.GetTask( 0u );
   RenderTaskList taskList = stage.GetRenderTaskList();
 
   RenderTask task = taskList.GetTask( 0u );
@@ -468,18 +406,19 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
   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 );
 
   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 );
 
   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 );
   // Stop the newActor from being rendered by changing the source actor
   DALI_TEST_CHECK( nonRenderableActor );
   task.SetSourceActor( nonRenderableActor );
@@ -492,7 +431,8 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
   application.Render();
 
   // Check that nothing was rendered
   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 );
 
   // Set newActor as the new source Actor
   task.SetSourceActor( newActor );
@@ -505,11 +445,7 @@ int UtcDaliRenderTaskSetSourceActorP02(void)
   application.Render();
 
   // Check that the newActor was rendered
   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;
 }
 
   END_TEST;
 }
 
@@ -520,34 +456,28 @@ int UtcDaliRenderTaskSetSourceActorOffStage(void)
   tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
 
   Stage stage = Stage::GetCurrent();
   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();
   RenderTaskList taskList = stage.GetRenderTaskList();
-
   RenderTask task = taskList.GetTask( 0u );
 
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
   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 );
 
   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
   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
   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 );
 
   // Now add to stage
   stage.Add( newActor );
@@ -558,19 +488,17 @@ int UtcDaliRenderTaskSetSourceActorOffStage(void)
   application.Render();
 
   // Check that the newActor was rendered
   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
 
   // Now remove from stage
   stage.Remove( newActor );
 
   // Update & Render with the actor off-stage
-  application.GetGlAbstraction().ClearBoundTextures();
   application.SendNotification();
   application.Render();
   application.SendNotification();
   application.Render();
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
+
   END_TEST;
 }
 
   END_TEST;
 }
 
@@ -581,23 +509,14 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void)
   tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
 
   Stage stage = Stage::GetCurrent();
   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();
   RenderTaskList taskList = stage.GetRenderTaskList();
-
   RenderTask task = taskList.GetTask( 0u );
 
   Actor actor = task.GetSourceActor();
   DALI_TEST_CHECK( actor );
 
   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 );
   BufferImage img = BufferImage::New( 1,1 );
-  ImageActor newActor = ImageActor::New( img );
+  Actor newActor = CreateRenderableActor( img );
   newActor.SetSize(1,1);
   stage.Add( newActor );
 
   newActor.SetSize(1,1);
   stage.Add( newActor );
 
@@ -608,13 +527,16 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void)
   task.SetSourceActor( Actor() );
   DALI_TEST_CHECK( ! task.GetSourceActor() );
 
   task.SetSourceActor( Actor() );
   DALI_TEST_CHECK( ! task.GetSourceActor() );
 
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+  TraceCallStack& drawTrace = gl.GetDrawTrace();
+  drawTrace.Enable(true);
+
   // Update & Render nothing!
   // Update & Render nothing!
-  application.GetGlAbstraction().ClearBoundTextures();
   application.SendNotification();
   application.Render();
 
   // Check that nothing was rendered
   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 );
 
   // Set with non-empty handle
   task.SetSourceActor( newActor );
@@ -626,11 +548,42 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void)
   application.Render();
 
   // Check that the newActor was rendered
   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;
 }
 
   END_TEST;
 }
 
@@ -681,7 +634,7 @@ int UtcDaliRenderTaskGetSourceActorN(void)
   {
     Actor actor = task.GetSourceActor();
   }
   {
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -698,7 +651,7 @@ int UtcDaliRenderTaskSetExclusive(void)
 
   RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
 
 
   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
 
   std::vector<GLuint> ids;
   ids.push_back( 8 ); // 8 = actor1
@@ -707,7 +660,7 @@ int UtcDaliRenderTaskSetExclusive(void)
   application.GetGlAbstraction().SetNextTextureIds( ids );
 
   BufferImage img1 = BufferImage::New( 1,1 );
   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 );
 
   actor1.SetSize(1,1);
   Stage::GetCurrent().Add( actor1 );
 
@@ -717,15 +670,20 @@ int UtcDaliRenderTaskSetExclusive(void)
 
   // Check that the actor1 was rendered
   const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
 
   // 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() )
   {
 
   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 );
   }
 
   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
   actor2.SetSize(1,1);
 
   // Force actor2 to be rendered before actor1
@@ -740,16 +698,21 @@ int UtcDaliRenderTaskSetExclusive(void)
   application.Render();
 
   // Check that the actors were rendered
   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() )
   {
 
   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 );
   }
 
   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
   actor3.SetSize(1,1);
 
   // Force actor3 to be rendered before actor2
@@ -764,13 +727,18 @@ int UtcDaliRenderTaskSetExclusive(void)
   application.Render();
 
   // Check that the actors were rendered
   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() )
   {
 
   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
   }
 
   // Both actors are now connected to the root node
@@ -824,6 +792,12 @@ int UtcDaliRenderTaskSetExclusive(void)
     // Test that task 2 renders actor2
     DALI_TEST_CHECK( boundTextures[2] == 9u );
   }
     // 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;
 }
 
   END_TEST;
 }
 
@@ -838,7 +812,7 @@ int UtcDaliRenderTaskSetExclusive02(void)
   application.GetGlAbstraction().SetNextTextureIds( ids );
 
   BufferImage img1 = BufferImage::New( 1,1 );
   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 );
 
   actor1.SetSize(1,1);
   Stage::GetCurrent().Add( actor1 );
 
@@ -856,7 +830,7 @@ int UtcDaliRenderTaskSetExclusive02(void)
   application.SendNotification();
   application.Render();
 
   application.SendNotification();
   application.Render();
 
-  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawArrays"), 1, TEST_LOCATION );
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
 
   // Set task to non-exclusive - actor1 should render twice:
   drawTrace.Reset();
 
   // Set task to non-exclusive - actor1 should render twice:
   drawTrace.Reset();
@@ -864,7 +838,7 @@ int UtcDaliRenderTaskSetExclusive02(void)
   application.SendNotification();
   application.Render();
 
   application.SendNotification();
   application.Render();
 
-  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawArrays"), 2, TEST_LOCATION );
+  DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 2, TEST_LOCATION );
 
   END_TEST;
 }
 
   END_TEST;
 }
@@ -880,7 +854,7 @@ int UtcDaliRenderTaskSetExclusiveN(void)
   {
     task.SetExclusive(true);
   }
   {
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -933,9 +907,9 @@ int UtcDaliRenderTaskIsExclusiveN(void)
   try
   {
     bool x = task.IsExclusive();
   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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1028,6 +1002,29 @@ int UtcDaliRenderTaskSetCameraActorN(void)
   END_TEST;
 }
 
   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)
 {
 
 int UtcDaliRenderTaskGetCameraActorP(void)
 {
@@ -1057,7 +1054,7 @@ int UtcDaliRenderTaskGetCameraActorN(void)
   {
     Actor actor = task.GetCameraActor();
   }
   {
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1129,6 +1126,70 @@ int UtcDaliRenderTaskGetTargetFrameBufferN(void)
   END_TEST;
 }
 
   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;
 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionP(void)
 {
   TestApplication application;
@@ -1169,7 +1230,7 @@ int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void)
   {
     task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
   }
   {
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1206,9 +1267,9 @@ int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void)
   try
   {
     RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
   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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1243,7 +1304,7 @@ int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void)
     Actor mappingActor;
     task.SetScreenToFrameBufferMappingActor(mappingActor);
   }
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1309,9 +1370,9 @@ int UtcDaliRenderTaskGetViewportN(void)
   try
   {
     Viewport viewport = task.GetViewport();
   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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1356,7 +1417,7 @@ int UtcDaliRenderTaskSetViewportN(void)
     Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
     task.SetViewport( newViewport );
   }
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1397,21 +1458,47 @@ int UtcDaliRenderTaskSetViewportPosition(void)
   // Set by Property test
   Vector2 newPosition2(32.0f, 32.0f);
   task.SetProperty( RenderTask::Property::VIEWPORT_POSITION, newPosition2 );
   // 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 );
 
   // 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();
 
 
   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 );
   // 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;
 }
 
   END_TEST;
 }
 
@@ -1445,21 +1532,46 @@ int UtcDaliRenderTaskSetViewportSize(void)
   // Set by Property test
   Vector2 newSize2(50.0f, 50.0f);
   task.SetProperty( RenderTask::Property::VIEWPORT_SIZE, newSize2 );
   // 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 );
 
   // 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();
 
 
   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 );
   // 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;
 }
 
   END_TEST;
 }
@@ -1486,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.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 );
 
   // 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;
 }
 
   END_TEST;
 }
 
@@ -1505,7 +1650,7 @@ int UtcDaliRenderTaskSetClearColorN(void)
   {
     task.SetClearColor( Vector4::ZERO );
   }
   {
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1535,9 +1680,9 @@ int UtcDaliRenderTaskGetClearColorN(void)
   try
   {
     Vector4 color = task.GetClearColor();
   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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1554,13 +1699,13 @@ int UtcDaliRenderTaskSetClearEnabledP(void)
   RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
 
   RenderTask task = taskList.GetTask( 0u );
   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( false );
   DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
+
+  task.SetClearEnabled( true );
+  DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
   END_TEST;
 }
 
   END_TEST;
 }
 
@@ -1575,7 +1720,7 @@ int UtcDaliRenderTaskSetClearEnabledN(void)
   {
     task.SetClearEnabled(true);
   }
   {
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1592,7 +1737,7 @@ int UtcDaliRenderTaskGetClearEnabledP(void)
   RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
 
   RenderTask task = taskList.GetTask( 0u );
   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;
 }
 
   END_TEST;
 }
 
@@ -1607,9 +1752,9 @@ int UtcDaliRenderTaskGetClearEnabledN(void)
   try
   {
     bool x = task.GetClearEnabled();
   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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1645,7 +1790,7 @@ int UtcDaliRenderTaskSetCullModeN(void)
   {
     task.SetCullMode( false );
   }
   {
     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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1675,9 +1820,9 @@ int UtcDaliRenderTaskGetCullModeN(void)
   try
   {
     bool x = task.GetCullMode();
   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);
   {
     DALI_TEST_PRINT_ASSERT( e );
     DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
@@ -1737,7 +1882,8 @@ int UtcDaliRenderTaskSignalFinished(void)
   Stage::GetCurrent().Add( offscreenCameraActor );
 
   BufferImage image = BufferImage::New( 10, 10 );
   Stage::GetCurrent().Add( offscreenCameraActor );
 
   BufferImage image = BufferImage::New( 10, 10 );
-  ImageActor rootActor = ImageActor::New( image );
+  image.Update();
+  Actor rootActor = CreateRenderableActor( image );
   rootActor.SetSize( 10, 10 );
   Stage::GetCurrent().Add( rootActor );
 
   rootActor.SetSize( 10, 10 );
   Stage::GetCurrent().Add( rootActor );
 
@@ -1745,10 +1891,6 @@ int UtcDaliRenderTaskSignalFinished(void)
   NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
   FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
 
   NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
   FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
 
-  // Flush all outstanding messages
-  application.SendNotification();
-  application.Render();
-
   RenderTask newTask = taskList.CreateTask();
   newTask.SetCameraActor( offscreenCameraActor );
   newTask.SetSourceActor( rootActor );
   RenderTask newTask = taskList.CreateTask();
   newTask.SetCameraActor( offscreenCameraActor );
   newTask.SetSourceActor( rootActor );
@@ -1758,8 +1900,7 @@ int UtcDaliRenderTaskSignalFinished(void)
   newTask.SetExclusive( true );
   newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
   newTask.SetTargetFrameBuffer( frameBufferImage );
   newTask.SetExclusive( true );
   newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
   newTask.SetTargetFrameBuffer( frameBufferImage );
-
-  // Framebuffer doesn't actually get created until Connected, i.e. by previous line
+  newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
 
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
 
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
@@ -1797,11 +1938,8 @@ int UtcDaliRenderTaskSignalFinished(void)
   application.Render();
   application.SendNotification();
   DALI_TEST_CHECK( finished );
   application.Render();
   application.SendNotification();
   DALI_TEST_CHECK( finished );
-  finished = false;
 
 
-  application.Render(); // Double check no more finished signal
-  application.SendNotification();
-  DALI_TEST_CHECK( ! finished );
+  DALI_TEST_EQUALS( application.GetUpdateStatus(), 0, TEST_LOCATION );
   END_TEST;
 }
 
   END_TEST;
 }
 
@@ -1820,23 +1958,18 @@ int UtcDaliRenderTaskContinuous01(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
 
   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 );
 
   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
   application.SendNotification();
 
   // START PROCESS/RENDER                     Input,    Expected  Input, Expected, KeepUpdating
-  DALI_TEST_CHECK( UpdateRender(application,  drawTrace, false,   finished, false, false ) );
+  DALI_TEST_CHECK( UpdateRender(application,  drawTrace, false,   finished, false, false, __LINE__ ) );
   application.GetPlatform().ClearReadyResources();
 
   // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
   application.GetPlatform().ClearReadyResources();
 
   // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
@@ -1844,7 +1977,7 @@ int UtcDaliRenderTaskContinuous01(void)
   application.SendNotification();
 
   // CONTINUE PROCESS/RENDER                  Input,    Expected  Input,    Expected
   application.SendNotification();
 
   // CONTINUE PROCESS/RENDER                  Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application,  drawTrace, true,    finished, false, false ) );
+  DALI_TEST_CHECK( UpdateRender(application,  drawTrace, true,    finished, false, false, __LINE__ ) );
   END_TEST;
 }
 
   END_TEST;
 }
 
@@ -1863,13 +1996,10 @@ int UtcDaliRenderTaskContinuous02(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
 
   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);
 
   Stage::GetCurrent().Add(secondRootActor);
   secondRootActor.SetVisible(false);
 
@@ -1877,11 +2007,10 @@ int UtcDaliRenderTaskContinuous02(void)
   bool finished = false;
   RenderTaskFinished renderTaskFinished( finished );
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   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
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,    Expected  Input,    Expected, KeepUpdating
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, false ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, false, __LINE__ ) );
   application.GetPlatform().ClearReadyResources();
 
   // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
   application.GetPlatform().ClearReadyResources();
 
   // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
@@ -1889,7 +2018,7 @@ int UtcDaliRenderTaskContinuous02(void)
   application.SendNotification();
 
   // CONTINUE PROCESS/RENDER                 Input,    Expected  Input,    Expected
   application.SendNotification();
 
   // CONTINUE PROCESS/RENDER                 Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
   END_TEST;
 }
 
   END_TEST;
 }
 
@@ -1907,22 +2036,18 @@ int UtcDaliRenderTaskContinuous03(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
   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
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, false ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, false, __LINE__ ) );
   application.GetPlatform().ClearReadyResources();
 
   // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
   application.GetPlatform().ClearReadyResources();
 
   // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
@@ -1930,7 +2055,7 @@ int UtcDaliRenderTaskContinuous03(void)
   application.SendNotification();
 
   // CONTINUE PROCESS/RENDER                 Input,    Expected  Input,    Expected
   application.SendNotification();
 
   // CONTINUE PROCESS/RENDER                 Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
   END_TEST;
 }
 
   END_TEST;
 }
 
@@ -1939,7 +2064,7 @@ int UtcDaliRenderTaskContinuous04(void)
 {
   TestApplication application;
 
 {
   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 );
 
   // 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 );
 
   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 );
   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);
   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
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  // 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 ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, false, __LINE__ ) );
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliRenderTaskContinous05(void)
+int UtcDaliRenderTaskOnce01(void)
 {
   TestApplication application;
 
 {
   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 );
 
   // 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 );
 
   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 );
   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);
 
   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();
 
   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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
+  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 ) );
+  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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  // MAKE SOURCE VISIBLE
-  secondRootActor.SetVisible(true);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  // 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 ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  application.GetPlatform().ClearReadyResources();
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
   END_TEST;
 }
 
   END_TEST;
 }
 
@@ -2081,8 +2132,7 @@ int UtcDaliRenderTaskOnce02(void)
 {
   TestApplication application;
 
 {
   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 );
 
   // 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 );
 
   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 );
 
   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();
 
   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);
   Actor secondRootActor = Actor::New();
   secondRootActor.AddRenderer(renderer);
   secondRootActor.SetSize(100, 100);
@@ -2116,500 +2164,23 @@ int UtcDaliRenderTaskOnce02(void)
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-   // 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 ) );
-   Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-   DALI_TEST_CHECK( lastSyncObj != NULL );
-
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-   application.GetPlatform().ClearReadyResources();
-   sync.SetObjectSynced( lastSyncObj, true );
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   finished, false, true  ) );
-   DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-
-   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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-
-  // 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 ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false ) );
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-
-  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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-
-  // 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 ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false ) );
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-
-  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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-
-  // 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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-
-  // 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 ) );
-  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  ) );
-
-  // 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  ) );
-
-  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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-
-  // 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 ) );
-  DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   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 ) );
-  application.GetPlatform().ClearReadyResources();
   Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
   DALI_TEST_CHECK( lastSyncObj != NULL );
   Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
   DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
   sync.SetObjectSynced( lastSyncObj, true );
   sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, true  ) );
-
-  // Finished rendering - expect no more renders, no more signals:
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  END_TEST;
-}
-#endif
-
-int UtcDaliRenderTaskOnce07(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)");
 
 
-  // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
-  TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
-  TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
-  drawTrace.Enable(true);
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
 
 
-  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 ) );
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false  ) );
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-  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();
-  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;
-
-  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 ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj == NULL );
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-  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 ) );
-  lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-  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 ) );
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
-  DALI_TEST_CHECK( lastSyncObj != NULL );
-
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  sync.SetObjectSynced( lastSyncObj, true );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-
-  END_TEST;
+   END_TEST;
 }
 
 }
 
-int UtcDaliRenderTaskOnce10(void)
+int UtcDaliRenderTaskOnce03(void)
 {
   TestApplication application;
 
 {
   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.");
+  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 );
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -2620,11 +2191,9 @@ int UtcDaliRenderTaskOnce10(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
   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 = CreateRenderableActorSuccess(application, "aFile.jpg");
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
@@ -2633,291 +2202,85 @@ int UtcDaliRenderTaskOnce10(void)
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
   newTask.FinishedSignal().Connect( &application, renderTaskFinished );
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
 
-  // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
   application.SendNotification();
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
   application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
 
 
-  tet_printf("  FailImageLoad\n");
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,   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 ) ); // nothing to draw
-  application.SendNotification();
-
-  // Drawing empty framebuffer, so will still get a GL sync
   Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
   DALI_TEST_CHECK( lastSyncObj != NULL );
   Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
   DALI_TEST_CHECK( lastSyncObj != NULL );
-
   sync.SetObjectSynced( lastSyncObj, true );
 
   sync.SetObjectSynced( lastSyncObj, true );
 
-  // Expect finished signal, as all resources are complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true, __LINE__  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false, __LINE__  ) );
 
   END_TEST;
 }
 
 
   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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  // 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 ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false ) );
-  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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  // 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 ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false ) );
-
-  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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  // 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 ) );
-  application.GetPlatform().ClearReadyResources();
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnceNoSync04(void)
+int UtcDaliRenderTaskOnce04(void)
 {
   TestApplication application;
 {
   TestApplication application;
-
-  tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
+  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"
                "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
+  // SETUP AN OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
   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 );
 
   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 );
 
   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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-
-  // 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 ) );
-  application.GetPlatform().ClearReadyResources();
-
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
-  END_TEST;
-}
-
-int UtcDaliRenderTaskOnceNoSync05(void)
-{
-  TestApplication application;
-
-  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
-  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;
+  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);
 
   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();
 
   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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
 
-  // CHANGE TO RENDER ONCE
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification(); //         Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
+  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 ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true, false  ) );
   END_TEST;
 }
 
   END_TEST;
 }
 
-#if 0
-//int UtcDaliRenderTaskOnceNoSync06(void)
+int UtcDaliRenderTaskOnceNoSync01(void)
 {
   TestApplication application;
 
 {
   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);
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
   TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
   drawTrace.Enable(true);
@@ -2925,61 +2288,29 @@ int UtcDaliRenderTaskOnceNoSync05(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
   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);
 
   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();
 
   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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false ) );
-
-  // 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 ) );
-  DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-
-  // 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 ) );
-  application.GetPlatform().ClearReadyResources();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true  ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, false, 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;
 }
   END_TEST;
 }
-#endif
 
 
-int UtcDaliRenderTaskOnceNoSync07(void)
+int UtcDaliRenderTaskOnceNoSync02(void)
 {
   TestApplication application;
 
 {
   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);
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
   TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
   drawTrace.Enable(true);
@@ -2987,50 +2318,41 @@ int UtcDaliRenderTaskOnceNoSync07(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
   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);
 
   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();
 
   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 ) );
-
-  // CHANGE TO RENDER ONCE,
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false ) );
+  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__ ) );
 
 
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false ) );
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliRenderTaskOnceNoSync08(void)
+int UtcDaliRenderTaskOnceNoSync03(void)
 {
   TestApplication application;
 
 {
   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 );
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -3040,56 +2362,34 @@ int UtcDaliRenderTaskOnceNoSync08(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
   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;
   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();
 
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
 
-  // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false ) );
-
-  // 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 ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false ) );
+  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;
 }
 
   END_TEST;
 }
 
-
-int UtcDaliRenderTaskOnceNoSync09(void)
+int UtcDaliRenderTaskOnceNoSync04(void)
 {
   TestApplication application;
 
 {
   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 );
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -3099,48 +2399,52 @@ int UtcDaliRenderTaskOnceNoSync09(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
   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);
 
   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();
 
   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 ) );
+  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);
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false ) );
+  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 );
 
 
-  newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,   finished, true,  false ) );
   END_TEST;
 }
 
   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"
 {
   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 );
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
@@ -3150,11 +2454,9 @@ int UtcDaliRenderTaskOnceNoSync10(void)
   Actor rootActor = Actor::New();
   Stage::GetCurrent().Add( rootActor );
 
   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 );
   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);
   Stage::GetCurrent().Add(secondRootActor);
 
   RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
@@ -3164,19 +2466,11 @@ int UtcDaliRenderTaskOnceNoSync10(void)
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,     Expected  Input,    Expected
   application.SendNotification();
 
   // START PROCESS/RENDER                    Input,     Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
   // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
 
   // CHANGE TO RENDER ONCE,
   newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
-  application.SendNotification();
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) );
-
-  FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, false, true ) ); // nothing to draw
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,    finished, true,  false  ) );
+  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,    finished, false, false, __LINE__ ) );
 
   END_TEST;
 }
 
   END_TEST;
 }
@@ -3189,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"
 
   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
                "POST: 2 finished signals sent.");
 
   // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
@@ -3200,12 +2494,9 @@ int UtcDaliRenderTaskOnceChain01(void)
   Actor defaultRootActor = Actor::New(); // Root for default RT
   Stage::GetCurrent().Add( defaultRootActor );
 
   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 );
   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
   Stage::GetCurrent().Add(firstRootActor);
 
   // first render task
@@ -3216,7 +2507,7 @@ int UtcDaliRenderTaskOnceChain01(void)
 
   // Second render task
   FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
 
   // 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;
   Stage::GetCurrent().Add(secondRootActor);
   RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
   bool secondFinished = false;
@@ -3225,18 +2516,14 @@ int UtcDaliRenderTaskOnceChain01(void)
 
   application.SendNotification();
 
 
   application.SendNotification();
 
-  // START PROCESS/RENDER                    Input,    Expected  Input,    Expected
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  firstFinished, false, true ) );
-  DALI_TEST_CHECK( secondFinished == false );
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  firstFinished, false, true ) );
-  DALI_TEST_CHECK( secondFinished == false );
-
-  CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, true,  firstFinished, false, true ) );
+  //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( secondFinished == false );
-  application.GetPlatform().ClearReadyResources();
 
 
-  DALI_TEST_CHECK( UpdateRender(application, drawTrace, false,  firstFinished, true,  false ) );
+  //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 == true );
 
   END_TEST;
   DALI_TEST_CHECK( secondFinished == true );
 
   END_TEST;
@@ -3255,83 +2542,11 @@ int UtcDaliRenderTaskProperties(void)
   END_TEST;
 }
 
   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;
 
 int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
 {
   TestApplication application;
 
-  tet_infoline("Testing RenderTask::SignalFinished()");
+  tet_infoline("Testing RenderTask::FinishInvisibleSourceActor()");
 
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
   TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
 
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
   TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
@@ -3341,7 +2556,7 @@ int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
   Stage::GetCurrent().Add( offscreenCameraActor );
 
   BufferImage image = BufferImage::New( 10, 10 );
   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 );
   rootActor.SetSize( 10, 10 );
   rootActor.SetVisible(false);
   Stage::GetCurrent().Add( rootActor );
@@ -3363,6 +2578,7 @@ int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
   newTask.SetExclusive( true );
   newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
   newTask.SetTargetFrameBuffer( frameBufferImage );
   newTask.SetExclusive( true );
   newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
   newTask.SetTargetFrameBuffer( frameBufferImage );
+  newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
 
   // Framebuffer doesn't actually get created until Connected, i.e. by previous line
 
 
   // Framebuffer doesn't actually get created until Connected, i.e. by previous line
 
@@ -3416,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
   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 );
 
   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 );
 
   rootActor.SetSize( 10, 10 );
   stage.Add( rootActor );
 
-  ImageActor actorWithMissingImage = ImageActor::New( Image() );
+  Actor actorWithMissingImage = CreateRenderableActor( Image() );
   actorWithMissingImage.SetSize( 10, 10 );
   stage.Add( actorWithMissingImage );
 
   actorWithMissingImage.SetSize( 10, 10 );
   stage.Add( actorWithMissingImage );
 
@@ -3451,3 +2667,206 @@ int UtcDaliRenderTaskFinishMissingImage(void)
 
   END_TEST;
 }
 
   END_TEST;
 }
+
+int UtcDaliRenderTaskWorldToViewport(void)
+{
+  TestApplication application( 400u, 400u ); // square surface
+
+  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
+
+  Actor actor = Actor::New();
+  actor.SetSize(100.0f, 100.0f);
+  actor.SetPosition( Vector3(0.0, 0.0, 0.0) );
+
+  actor.SetParentOrigin( Vector3(0.5, 0.5, 0.5) );
+  actor.SetAnchorPoint( Vector3(0.5, 0.5, 0.5) );
+
+  Stage::GetCurrent().Add(actor);
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+
+  RenderTask task = taskList.GetTask( 0u );
+
+  CameraActor camera = task.GetCameraActor();
+
+  Vector2 screenSize = task.GetCurrentViewportSize();
+
+  float screenX = 0.0;
+  float screenY = 0.0;
+
+  bool ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
+  DALI_TEST_CHECK(ok == true);
+
+  DALI_TEST_EQUALS(screenX, screenSize.x/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+  DALI_TEST_EQUALS(screenY, screenSize.y/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+
+  Actor actor2 = Actor::New();
+  float actor2Size = 100.f;
+  actor2.SetSize( actor2Size, actor2Size );
+  actor2.SetPosition( Vector3(0.0, 0.0, 0.0) );
+  actor2.SetParentOrigin( Vector3(0.5, 0.5, 0.0) );
+  actor2.SetAnchorPoint( Vector3(0.5, 0.5, 0.0) );
+  Stage::GetCurrent().Add( actor2 );
+  actor2.Add(actor);
+  actor.SetParentOrigin( Vector3(0,0,0) );
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+
+  ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
+  DALI_TEST_CHECK(ok == true);
+
+  DALI_TEST_EQUALS(screenX, screenSize.x/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+  DALI_TEST_EQUALS(screenY, screenSize.y/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+
+  END_TEST;
+}
+
+
+int UtcDaliRenderTaskViewportToLocal(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.GetTask( 0u );
+
+  // 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 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;
+}