X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fcommon%2Fcore-impl.cpp;h=8f07f3594a607ffbf12b27e322a545130b7525b7;hb=40ddb0164aa0c1849826125530fdaca115389a7e;hp=1e9f06c79cf16b475fa43481e08207257b7eb02a;hpb=f2d82acacff4126511c6d8c54c7187181f4f9a95;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/common/core-impl.cpp b/dali/internal/common/core-impl.cpp index 1e9f06c..8f07f35 100644 --- a/dali/internal/common/core-impl.cpp +++ b/dali/internal/common/core-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 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. @@ -22,30 +22,33 @@ #include #include #include -#include +#include #include +#include #include + #include -#include #include -#include #include -#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include + +#include +#include #include #include @@ -54,6 +57,7 @@ using Dali::Internal::SceneGraph::RenderManager; using Dali::Internal::SceneGraph::DiscardQueue; using Dali::Internal::SceneGraph::RenderQueue; using Dali::Internal::SceneGraph::TextureCache; +using Dali::Internal::SceneGraph::TextureCacheDispatcher; namespace { @@ -90,7 +94,7 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform, mUpdateManager(NULL), mRenderManager(NULL), mDiscardQueue(NULL), - mResourcePostProcessQueue(), + mTextureUploadedQueue(), mNotificationManager(NULL), mImageFactory(NULL), mShaderFactory(NULL), @@ -109,35 +113,34 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform, mPropertyNotificationManager = PropertyNotificationManager::New(); - std::vector< ResourcePostProcessRequest> init; - mResourcePostProcessQueue = new ResourcePostProcessList(init); + mTextureUploadedQueue = new LockedResourceQueue; + + mRenderManager = RenderManager::New( glAbstraction, glSyncAbstraction, *mTextureUploadedQueue ); - mRenderManager = RenderManager::New( glAbstraction, *mResourcePostProcessQueue ); + mRenderTaskProcessor = new SceneGraph::RenderTaskProcessor(); RenderQueue& renderQueue = mRenderManager->GetRenderQueue(); TextureCache& textureCache = mRenderManager->GetTextureCache(); - ResourcePolicy::Discardable discardPolicy = ResourcePolicy::DISCARD; + ResourcePolicy::Discardable discardPolicy = ResourcePolicy::OWNED_DISCARD; if( dataRetentionPolicy == ResourcePolicy::DALI_RETAINS_ALL_DATA ) { - discardPolicy = ResourcePolicy::RETAIN; + discardPolicy = ResourcePolicy::OWNED_RETAIN; } textureCache.SetDiscardBitmapsPolicy(discardPolicy); + mTextureCacheDispatcher = new SceneGraph::TextureCacheDispatcher( renderQueue, textureCache ); + mDiscardQueue = new DiscardQueue( renderQueue ); mResourceManager = new ResourceManager( mPlatform, *mNotificationManager, - textureCache, - *mResourcePostProcessQueue, - *mRenderManager, + *mTextureCacheDispatcher, + *mTextureUploadedQueue, *mDiscardQueue, renderQueue ); - mTouchResampler = TouchResampler::New(); - mUpdateManager = new UpdateManager( *mNotificationManager, - glSyncAbstraction, *mAnimationPlaylist, *mPropertyNotificationManager, *mResourceManager, @@ -145,8 +148,8 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform, renderController, *mRenderManager, renderQueue, - textureCache, - *mTouchResampler ); + *mTextureCacheDispatcher, + *mRenderTaskProcessor ); mRenderManager->SetShaderSaver( *mUpdateManager ); @@ -157,7 +160,7 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform, mStage->Initialize(); - mResourceClient = new ResourceClient( *mResourceManager, *mStage, dataRetentionPolicy ); + mResourceClient = new ResourceClient( *mResourceManager, *mStage ); mGestureEventProcessor = new GestureEventProcessor(*mStage, gestureManager, mRenderController); mEventProcessor = new EventProcessor(*mStage, *mNotificationManager, *mGestureEventProcessor); @@ -189,6 +192,7 @@ Core::~Core() if( tls ) { tls->Remove(); + delete tls; } // Stop relayout requests being raised on stage destruction @@ -207,11 +211,12 @@ Core::~Core() delete mShaderFactory; delete mResourceClient; delete mResourceManager; + delete mDiscardQueue; + delete mTextureCacheDispatcher; delete mUpdateManager; - delete mTouchResampler; delete mRenderManager; - delete mDiscardQueue; - delete mResourcePostProcessQueue; + delete mRenderTaskProcessor; + delete mTextureUploadedQueue; } Integration::ContextNotifierInterface* Core::GetContextNotifier() @@ -239,13 +244,24 @@ 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 ) { - mPlatform.SetDpi( dpiHorizontal, dpiVertical ); mStage->SetDpi( Vector2( dpiHorizontal , dpiVertical) ); } @@ -315,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; } @@ -346,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(); @@ -362,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; @@ -455,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); }