[3.0] Delete ThreadLocalStorage on shutdown
[platform/core/uifw/dali-core.git] / dali / internal / common / core-impl.cpp
index 8b72856..8f07f35 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -44,8 +44,8 @@
 #include <dali/internal/update/common/discard-queue.h>
 #include <dali/internal/update/common/texture-cache-dispatcher.h>
 #include <dali/internal/update/manager/update-manager.h>
+#include <dali/internal/update/manager/render-task-processor.h>
 #include <dali/internal/update/resources/resource-manager.h>
-#include <dali/internal/update/touch/touch-resampler.h>
 
 #include <dali/internal/render/common/performance-monitor.h>
 #include <dali/internal/render/common/render-manager.h>
@@ -117,6 +117,8 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform,
 
   mRenderManager = RenderManager::New( glAbstraction, glSyncAbstraction, *mTextureUploadedQueue );
 
+  mRenderTaskProcessor = new SceneGraph::RenderTaskProcessor();
+
   RenderQueue& renderQueue = mRenderManager->GetRenderQueue();
   TextureCache& textureCache = mRenderManager->GetTextureCache();
 
@@ -138,8 +140,6 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform,
                                           *mDiscardQueue,
                                            renderQueue );
 
-  mTouchResampler = TouchResampler::New();
-
   mUpdateManager = new UpdateManager( *mNotificationManager,
                                       *mAnimationPlaylist,
                                       *mPropertyNotificationManager,
@@ -149,7 +149,7 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform,
                                       *mRenderManager,
                                        renderQueue,
                                       *mTextureCacheDispatcher,
-                                      *mTouchResampler );
+                                      *mRenderTaskProcessor );
 
   mRenderManager->SetShaderSaver( *mUpdateManager );
 
@@ -192,6 +192,7 @@ Core::~Core()
   if( tls )
   {
     tls->Remove();
+    delete tls;
   }
 
   // Stop relayout requests being raised on stage destruction
@@ -213,8 +214,8 @@ Core::~Core()
   delete mDiscardQueue;
   delete mTextureCacheDispatcher;
   delete mUpdateManager;
-  delete mTouchResampler;
   delete mRenderManager;
+  delete mRenderTaskProcessor;
   delete mTextureUploadedQueue;
 }
 
@@ -243,8 +244,20 @@ void Core::ContextDestroyed()
 
 void Core::SurfaceResized( unsigned int width, unsigned int height )
 {
-  mStage->SetSize( width, height );
-  mRelayoutController->SetStageSize( width, height );
+  mStage->SurfaceResized( width, height );
+
+  // The stage-size may be less than surface-size (reduced by top-margin)
+  Vector2 size = mStage->GetSize();
+  mRelayoutController->SetStageSize( size.width, size.height );
+}
+
+void Core::SetTopMargin( unsigned int margin )
+{
+  mStage->SetTopMargin( margin );
+
+  // The stage-size may be less than surface-size (reduced by top-margin)
+  Vector2 size = mStage->GetSize();
+  mRelayoutController->SetStageSize( size.width, size.height );
 }
 
 void Core::SetDpi( unsigned int dpiHorizontal, unsigned int dpiVertical )
@@ -318,7 +331,7 @@ void Core::ProcessEvents()
   // Guard against calls to ProcessEvents() during ProcessEvents()
   if( mProcessingEvent )
   {
-    DALI_LOG_ERROR( "ProcessEvents should not be called from within ProcessEvents!" );
+    DALI_LOG_ERROR( "ProcessEvents should not be called from within ProcessEvents!\n" );
     mRenderController.RequestProcessEventsOnIdle();
     return;
   }
@@ -349,10 +362,9 @@ void Core::ProcessEvents()
     const bool messagesToProcess = mUpdateManager->FlushQueue();
 
     // Check if the touch or gestures require updates.
-    const bool touchNeedsUpdate = mTouchResampler->NeedsUpdate();
     const bool gestureNeedsUpdate = mGestureEventProcessor->NeedsUpdate();
 
-    if( messagesToProcess || touchNeedsUpdate || gestureNeedsUpdate )
+    if( messagesToProcess || gestureNeedsUpdate )
     {
       // tell the render controller to keep update thread running
       mRenderController.RequestUpdate();
@@ -365,11 +377,6 @@ void Core::ProcessEvents()
   mProcessingEvent = false;
 }
 
-void Core::UpdateTouchData(const Integration::TouchData& touch)
-{
-  mTouchResampler->SendTouchData( touch );
-}
-
 unsigned int Core::GetMaximumUpdateCount() const
 {
   return MAXIMUM_UPDATE_COUNT;
@@ -458,7 +465,7 @@ RelayoutController& Core::GetRelayoutController()
 void Core::CreateThreadLocalStorage()
 {
   // a pointer to the ThreadLocalStorage object will be stored in TLS
-  // and automatically deleted when the thread is killed
+  // The ThreadLocalStorage object should be deleted by the Core destructor
   new ThreadLocalStorage(this);
 }