X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Fdali-toolkit-test-utils%2Ftest-application.cpp;h=440270aec9adb9013716cb23d379b7d1cd0edc80;hp=f85f14d058f14873d4f949305eda91b0b06d0173;hb=7ace342f1bd46209834eef608f2d5d8e11ed801c;hpb=a00bbe499550a054e6692eb46b32f8c1548f3647 diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-application.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-application.cpp index f85f14d..440270a 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-application.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-application.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -19,22 +19,25 @@ namespace Dali { +const Rect TestApplication::DEFAULT_SURFACE_RECT = Rect(0, 0, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT); bool TestApplication::mLoggingEnabled = true; -TestApplication::TestApplication( uint32_t surfaceWidth, - uint32_t surfaceHeight, - uint32_t horizontalDpi, - uint32_t verticalDpi, - bool initialize ) -: mCore( NULL ), - mSurfaceWidth( surfaceWidth ), - mSurfaceHeight( surfaceHeight ), - mFrame( 0u ), - mDpi{ horizontalDpi, verticalDpi }, - mLastVSyncTime(0u) -{ - if( initialize ) +TestApplication::TestApplication(uint32_t surfaceWidth, + uint32_t surfaceHeight, + uint32_t horizontalDpi, + uint32_t verticalDpi, + bool initialize, + bool enablePartialUpdate) +: mCore(NULL), + mSurfaceWidth(surfaceWidth), + mSurfaceHeight(surfaceHeight), + mFrame(0u), + mDpi{horizontalDpi, verticalDpi}, + mLastVSyncTime(0u), + mPartialUpdateEnabled(enablePartialUpdate) +{ + if(initialize) { Initialize(); } @@ -52,14 +55,13 @@ void TestApplication::CreateCore() // We always need the first update! mStatus.keepUpdating = Integration::KeepUpdating::STAGE_KEEP_RENDERING; - mCore = Dali::Integration::Core::New( mRenderController, - mPlatformAbstraction, - mGlAbstraction, - mGlSyncAbstraction, - mGlContextHelperAbstraction, - Integration::RenderToFrameBuffer::FALSE, - Integration::DepthBufferAvailable::TRUE, - Integration::StencilBufferAvailable::TRUE ); + mCore = Dali::Integration::Core::New(mRenderController, + mPlatformAbstraction, + mGraphicsController, + Integration::RenderToFrameBuffer::FALSE, + Integration::DepthBufferAvailable::TRUE, + Integration::StencilBufferAvailable::TRUE, + mPartialUpdateEnabled ? Integration::PartialUpdateAvailable::TRUE : Integration::PartialUpdateAvailable::FALSE); mCore->ContextCreated(); @@ -67,15 +69,21 @@ void TestApplication::CreateCore() Dali::Integration::Log::InstallLogFunction(logFunction); Dali::Integration::Trace::LogContextFunction logContextFunction(&TestApplication::LogContext); - Dali::Integration::Trace::InstallLogContextFunction( logContextFunction ); + Dali::Integration::Trace::InstallLogContextFunction(logContextFunction); - Dali::Integration::Trace::LogContext( true, "Test" ); + Dali::Integration::Trace::LogContext(true, "Test"); } void TestApplication::CreateScene() { - mScene = Dali::Integration::Scene::New( Size( static_cast( mSurfaceWidth ), static_cast( mSurfaceHeight ) ) ); - mScene.SetDpi( Vector2( static_cast( mDpi.x ), static_cast( mDpi.y ) ) ); + mScene = Dali::Integration::Scene::New(Size(static_cast(mSurfaceWidth), static_cast(mSurfaceHeight))); + mScene.SetDpi(Vector2(static_cast(mDpi.x), static_cast(mDpi.y))); + + // Create render target for the scene + Graphics::RenderTargetCreateInfo rtInfo{}; + rtInfo.SetExtent({mSurfaceWidth, mSurfaceHeight}); + mRenderTarget = mGraphicsController.CreateRenderTarget(rtInfo, nullptr); + mScene.SetSurfaceRenderTarget(mRenderTarget.get()); } void TestApplication::InitializeCore() @@ -90,9 +98,9 @@ TestApplication::~TestApplication() delete mCore; } -void TestApplication::LogContext( bool start, const char* tag ) +void TestApplication::LogContext(bool start, const char* tag) { - if( start ) + if(start) { fprintf(stderr, "INFO: Trace Start: %s\n", tag); } @@ -104,7 +112,7 @@ void TestApplication::LogContext( bool start, const char* tag ) void TestApplication::LogMessage(Dali::Integration::Log::DebugPriority level, std::string& message) { - if( mLoggingEnabled ) + if(mLoggingEnabled) { switch(level) { @@ -139,19 +147,24 @@ TestRenderController& TestApplication::GetRenderController() return mRenderController; } -TestGlAbstraction& TestApplication::GetGlAbstraction() +TestGraphicsController& TestApplication::GetGraphicsController() { - return mGlAbstraction; + return mGraphicsController; } -TestGlSyncAbstraction& TestApplication::GetGlSyncAbstraction() +TestGlAbstraction& TestApplication::GetGlAbstraction() { - return mGlSyncAbstraction; + return static_cast(mGraphicsController.GetGlAbstraction()); } TestGlContextHelperAbstraction& TestApplication::GetGlContextHelperAbstraction() { - return mGlContextHelperAbstraction; + return static_cast(mGraphicsController.GetGlContextHelperAbstraction()); +} + +TestGraphicsSyncImplementation& TestApplication::GetGraphicsSyncImpl() +{ + return static_cast(mGraphicsController.GetGraphicsSyncImpl()); } void TestApplication::ProcessEvent(const Integration::Event& event) @@ -165,33 +178,58 @@ void TestApplication::SendNotification() mCore->ProcessEvents(); } -void TestApplication::DoUpdate( uint32_t intervalMilliseconds, const char* location ) +void TestApplication::DoUpdate(uint32_t intervalMilliseconds, const char* location) { - if( GetUpdateStatus() == 0 && - mRenderStatus.NeedsUpdate() == false && - ! GetRenderController().WasCalled(TestRenderController::RequestUpdateFunc) ) + if(GetUpdateStatus() == 0 && + mRenderStatus.NeedsUpdate() == false && + !GetRenderController().WasCalled(TestRenderController::RequestUpdateFunc)) { - fprintf(stderr, "WARNING - Update not required :%s\n", location==NULL?"NULL":location); + fprintf(stderr, "WARNING - Update not required :%s\n", location == NULL ? "NULL" : location); } - uint32_t nextVSyncTime = mLastVSyncTime + intervalMilliseconds; - float elapsedSeconds = static_cast( intervalMilliseconds ) * 0.001f; + uint32_t nextVSyncTime = mLastVSyncTime + intervalMilliseconds; + float elapsedSeconds = static_cast(intervalMilliseconds) * 0.001f; - mCore->Update( elapsedSeconds, mLastVSyncTime, nextVSyncTime, mStatus, false, false ); + mCore->Update(elapsedSeconds, mLastVSyncTime, nextVSyncTime, mStatus, false, false); GetRenderController().Initialize(); mLastVSyncTime = nextVSyncTime; } -bool TestApplication::Render( uint32_t intervalMilliseconds, const char* location ) +bool TestApplication::Render(uint32_t intervalMilliseconds, const char* location) { - DoUpdate( intervalMilliseconds, location ); + DoUpdate(intervalMilliseconds, location); - mCore->PreRender( mRenderStatus, false /*do not force clear*/, false /*do not skip rendering*/ ); - mCore->RenderScene( mScene, true /*render the off-screen buffers*/); - mCore->RenderScene( mScene, false /*render the surface*/); - mCore->PostRender( false /*do not skip rendering*/ ); + // Reset the status + mRenderStatus.SetNeedsUpdate(false); + mRenderStatus.SetNeedsPostRender(false); + + mCore->PreRender(mRenderStatus, false /*do not force clear*/, false /*do not skip rendering*/); + mCore->RenderScene(mRenderStatus, mScene, true /*render the off-screen buffers*/); + mCore->RenderScene(mRenderStatus, mScene, false /*render the surface*/); + mCore->PostRender(false /*do not skip rendering*/); + + mFrame++; + + return mStatus.KeepUpdating() || mRenderStatus.NeedsUpdate(); +} + +bool TestApplication::PreRenderWithPartialUpdate(uint32_t intervalMilliseconds, const char* location, std::vector>& damagedRects) +{ + DoUpdate(intervalMilliseconds, location); + + mCore->PreRender(mRenderStatus, false /*do not force clear*/, false /*do not skip rendering*/); + mCore->PreRender(mScene, damagedRects); + + return mStatus.KeepUpdating() || mRenderStatus.NeedsUpdate(); +} + +bool TestApplication::RenderWithPartialUpdate(std::vector>& damagedRects, Rect& clippingRect) +{ + mCore->RenderScene(mRenderStatus, mScene, true /*render the off-screen buffers*/); + mCore->RenderScene(mRenderStatus, mScene, false /*render the surface*/, clippingRect); + mCore->PostRender(false /*do not skip rendering*/); mFrame++; @@ -203,9 +241,9 @@ uint32_t TestApplication::GetUpdateStatus() return mStatus.KeepUpdating(); } -bool TestApplication::UpdateOnly( uint32_t intervalMilliseconds ) +bool TestApplication::UpdateOnly(uint32_t intervalMilliseconds) { - DoUpdate( intervalMilliseconds ); + DoUpdate(intervalMilliseconds); return mStatus.KeepUpdating(); } @@ -214,13 +252,18 @@ bool TestApplication::GetRenderNeedsUpdate() return mRenderStatus.NeedsUpdate(); } -bool TestApplication::RenderOnly( ) +bool TestApplication::GetRenderNeedsPostRender() +{ + return mRenderStatus.NeedsPostRender(); +} + +bool TestApplication::RenderOnly() { // Update Time values - mCore->PreRender( mRenderStatus, false /*do not force clear*/, false /*do not skip rendering*/ ); - mCore->RenderScene( mScene, true /*render the off-screen buffers*/); - mCore->RenderScene( mScene, false /*render the surface*/); - mCore->PostRender( false /*do not skip rendering*/ ); + mCore->PreRender(mRenderStatus, false /*do not force clear*/, false /*do not skip rendering*/); + mCore->RenderScene(mRenderStatus, mScene, true /*render the off-screen buffers*/); + mCore->RenderScene(mRenderStatus, mScene, false /*render the surface*/); + mCore->PostRender(false /*do not skip rendering*/); mFrame++; @@ -230,15 +273,15 @@ bool TestApplication::RenderOnly( ) void TestApplication::ResetContext() { mCore->ContextDestroyed(); - mGlAbstraction.Initialize(); + mGraphicsController.Initialize(); mCore->ContextCreated(); } -uint32_t TestApplication::Wait( uint32_t durationToWait ) +uint32_t TestApplication::Wait(uint32_t durationToWait) { int time = 0; - for(uint32_t i = 0; i <= ( durationToWait / RENDER_FRAME_INTERVAL); i++) + for(uint32_t i = 0; i <= (durationToWait / RENDER_FRAME_INTERVAL); i++) { SendNotification(); Render(RENDER_FRAME_INTERVAL); @@ -247,4 +290,4 @@ uint32_t TestApplication::Wait( uint32_t durationToWait ) return time; } -} // Namespace dali +} // namespace Dali