From 6ceffb860771033ecbec13e51e0c356927b2959a Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Wed, 28 Jun 2017 15:03:40 +0100 Subject: [PATCH] Performance Improvements: Remove unnecessary SwapBuffer calls Change-Id: I156fd428fa16de10ea2de1839893c2470da614e7 --- .../combined-update-render-controller.cpp | 5 +++- .../base/separate-update-render/render-thread.cpp | 7 +++-- .../single-threaded/single-thread-controller.cpp | 33 +++++++++++++--------- .../single-threaded/single-thread-controller.h | 6 ++++ 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/adaptors/base/combined-update-render/combined-update-render-controller.cpp b/adaptors/base/combined-update-render/combined-update-render-controller.cpp index 5f9e700..432e1ba 100644 --- a/adaptors/base/combined-update-render/combined-update-render-controller.cpp +++ b/adaptors/base/combined-update-render/combined-update-render-controller.cpp @@ -459,7 +459,10 @@ void CombinedUpdateRenderController::UpdateRenderThread() mCore.Render( renderStatus ); AddPerformanceMarker( PerformanceInterface::RENDER_END ); - mRenderHelper.PostRender(); + if( renderStatus.NeedsPostRender() ) + { + mRenderHelper.PostRender(); + } // Trigger event thread to request Update/Render thread to sleep if update not required if( ( Integration::KeepUpdating::NOT_REQUESTED == keepUpdatingStatus ) && diff --git a/adaptors/base/separate-update-render/render-thread.cpp b/adaptors/base/separate-update-render/render-thread.cpp index e31a98b..5d57c9e 100644 --- a/adaptors/base/separate-update-render/render-thread.cpp +++ b/adaptors/base/separate-update-render/render-thread.cpp @@ -139,8 +139,11 @@ bool RenderThread::Run() mThreadSynchronization.RenderFinished(); // Perform any post-render operations - DALI_LOG_INFO( gRenderLogFilter, Debug::Verbose, "RenderThread::Run. 4 - PostRender()\n"); - mRenderHelper.PostRender(); + if( renderStatus.NeedsPostRender() ) + { + DALI_LOG_INFO( gRenderLogFilter, Debug::Verbose, "RenderThread::Run. 4 - PostRender()\n"); + mRenderHelper.PostRender(); + } } } diff --git a/adaptors/base/single-threaded/single-thread-controller.cpp b/adaptors/base/single-threaded/single-thread-controller.cpp index b5905b6..e24429a 100644 --- a/adaptors/base/single-threaded/single-thread-controller.cpp +++ b/adaptors/base/single-threaded/single-thread-controller.cpp @@ -176,10 +176,7 @@ void SingleThreadController::RequestUpdateOnce() Integration::UpdateStatus status; mCore.Update( 0.0f, mLastUpdateRenderTime, mLastUpdateRenderTime + mRefreshRate * MILLISECONDS_PER_FRAME, status ); - Integration::RenderStatus renderStatus; - mRenderHelper.PreRender(); - mCore.Render( renderStatus ); - mRenderHelper.PostRender(); + Render(); } } @@ -258,17 +255,10 @@ void SingleThreadController::UpdateRender( bool incrementTime ) if( mState != State::STOPPED ) { mRenderHelper.ConsumeEvents(); - mRenderHelper.PreRender(); - - Integration::RenderStatus renderStatus; - AddPerformanceMarker( PerformanceInterface::RENDER_START ); - mCore.Render( renderStatus ); - AddPerformanceMarker( PerformanceInterface::RENDER_END ); - mRenderHelper.PostRender(); + const bool needsUpdate = Render(); - if( ! keepUpdatingStatus && - ! renderStatus.NeedsUpdate() ) + if( !keepUpdatingStatus && !needsUpdate ) { ChangeState( State::SLEEPING ); } @@ -337,6 +327,23 @@ void SingleThreadController::StopRendering() mRenderHelper.ShutdownEgl(); } +bool SingleThreadController::Render() +{ + mRenderHelper.PreRender(); + + Integration::RenderStatus renderStatus; + AddPerformanceMarker( PerformanceInterface::RENDER_START ); + mCore.Render( renderStatus ); + AddPerformanceMarker( PerformanceInterface::RENDER_END ); + + if( renderStatus.NeedsPostRender() ) + { + mRenderHelper.PostRender(); + } + + return renderStatus.NeedsUpdate(); +} + } // namespace Adaptor } // namespace Internal diff --git a/adaptors/base/single-threaded/single-thread-controller.h b/adaptors/base/single-threaded/single-thread-controller.h index e5bf676..01dbdb1 100644 --- a/adaptors/base/single-threaded/single-thread-controller.h +++ b/adaptors/base/single-threaded/single-thread-controller.h @@ -166,6 +166,12 @@ private: */ void StopRendering(); + /** + * Runs render (along with pre & post steps as required). + * @return True if an update is required. + */ + bool Render(); + private: Dali::Timer mTimer; ///< Ensures an update & render is run every frame. -- 2.7.4