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=b2a3fb989e23e5bc062e24ea6e8732d3c84e3971;hp=df3ae2e08b19ae4544ae8b0c0014683d6a31a521;hb=73fdf4933699f5791443149da26e20681ed041cd;hpb=afb47f411d700d2b4be6415b61995cde5c37126c 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 df3ae2e..b2a3fb9 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) 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. @@ -20,37 +20,23 @@ namespace Dali { +bool TestApplication::mLoggingEnabled = true; -TestApplication::TestApplication( size_t surfaceWidth, - size_t surfaceHeight, - float horizontalDpi, - float verticalDpi, - ResourcePolicy::DataRetention policy) +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 ), + mDpi{ horizontalDpi, verticalDpi }, mLastVSyncTime(0u), - mDataRetentionPolicy( policy ) + mPartialUpdateEnabled(enablePartialUpdate) { - Initialize(); -} - -TestApplication::TestApplication( bool initialize, - size_t surfaceWidth, - size_t surfaceHeight, - float horizontalDpi, - float verticalDpi, - ResourcePolicy::DataRetention policy) -: mCore( NULL ), - mSurfaceWidth( surfaceWidth ), - mSurfaceHeight( surfaceHeight ), - mFrame( 0u ), - mDpi( horizontalDpi, verticalDpi ), - mDataRetentionPolicy( policy ) -{ - if ( initialize ) + if( initialize ) { Initialize(); } @@ -58,22 +44,47 @@ TestApplication::TestApplication( bool initialize, void TestApplication::Initialize() { - mCore = Dali::Integration::Core::New( - mRenderController, - mPlatformAbstraction, - mGlAbstraction, - mGlSyncAbstraction, - mGestureManager, - mDataRetentionPolicy); + CreateCore(); + CreateScene(); + InitializeCore(); +} + +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, + mPartialUpdateEnabled ? Integration::PartialUpdateAvailable::TRUE : Integration::PartialUpdateAvailable::FALSE ); mCore->ContextCreated(); - mCore->SurfaceResized( mSurfaceWidth, mSurfaceHeight ); - mCore->SetDpi( mDpi.x, mDpi.y ); Dali::Integration::Log::LogFunction logFunction(&TestApplication::LogMessage); Dali::Integration::Log::InstallLogFunction(logFunction); + Dali::Integration::Trace::LogContextFunction logContextFunction(&TestApplication::LogContext); + Dali::Integration::Trace::InstallLogContextFunction( logContextFunction ); + + 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 ) ) ); +} + +void TestApplication::InitializeCore() +{ mCore->SceneCreated(); + mCore->Initialize(); } TestApplication::~TestApplication() @@ -82,22 +93,37 @@ TestApplication::~TestApplication() delete mCore; } +void TestApplication::LogContext( bool start, const char* tag ) +{ + if( start ) + { + fprintf(stderr, "INFO: Trace Start: %s\n", tag); + } + else + { + fprintf(stderr, "INFO: Trace End: %s\n", tag); + } +} + void TestApplication::LogMessage(Dali::Integration::Log::DebugPriority level, std::string& message) { - switch(level) + if( mLoggingEnabled ) { - case Dali::Integration::Log::DebugInfo: - fprintf(stderr, "INFO: %s", message.c_str()); - break; - case Dali::Integration::Log::DebugWarning: - fprintf(stderr, "WARN: %s", message.c_str()); - break; - case Dali::Integration::Log::DebugError: - fprintf(stderr, "ERROR: %s", message.c_str()); - break; - default: - fprintf(stderr, "DEFAULT: %s", message.c_str()); - break; + switch(level) + { + case Dali::Integration::Log::DebugInfo: + fprintf(stderr, "INFO: %s", message.c_str()); + break; + case Dali::Integration::Log::DebugWarning: + fprintf(stderr, "WARN: %s", message.c_str()); + break; + case Dali::Integration::Log::DebugError: + fprintf(stderr, "ERROR: %s", message.c_str()); + break; + default: + fprintf(stderr, "DEFAULT: %s", message.c_str()); + break; + } } } @@ -126,9 +152,9 @@ TestGlSyncAbstraction& TestApplication::GetGlSyncAbstraction() return mGlSyncAbstraction; } -TestGestureManager& TestApplication::GetGestureManager() +TestGlContextHelperAbstraction& TestApplication::GetGlContextHelperAbstraction() { - return mGestureManager; + return mGlContextHelperAbstraction; } void TestApplication::ProcessEvent(const Integration::Event& event) @@ -142,53 +168,92 @@ void TestApplication::SendNotification() mCore->ProcessEvents(); } -void TestApplication::SetSurfaceWidth( unsigned int width, unsigned height ) +void TestApplication::DoUpdate( uint32_t intervalMilliseconds, const char* location ) { - mSurfaceWidth = width; - mSurfaceHeight = height; + if( GetUpdateStatus() == 0 && + mRenderStatus.NeedsUpdate() == false && + ! GetRenderController().WasCalled(TestRenderController::RequestUpdateFunc) ) + { + fprintf(stderr, "WARNING - Update not required :%s\n", location==NULL?"NULL":location); + } + + uint32_t nextVSyncTime = mLastVSyncTime + intervalMilliseconds; + float elapsedSeconds = static_cast( intervalMilliseconds ) * 0.001f; - mCore->SurfaceResized( mSurfaceWidth, mSurfaceHeight ); + mCore->Update( elapsedSeconds, mLastVSyncTime, nextVSyncTime, mStatus, false, false ); + + GetRenderController().Initialize(); + + mLastVSyncTime = nextVSyncTime; } -void TestApplication::DoUpdate( unsigned int intervalMilliseconds ) +bool TestApplication::Render( uint32_t intervalMilliseconds, const char* location ) { - unsigned int seconds(0u), microseconds(0u); - mPlatformAbstraction.GetTimeMicroseconds( seconds, microseconds ); - mLastVSyncTime = ( seconds * 1e3 ) + ( microseconds / 1e3 ); - unsigned int nextVSyncTime = mLastVSyncTime + 16; + DoUpdate( intervalMilliseconds, location ); - // Update Time values - mPlatformAbstraction.IncrementGetTimeResult( intervalMilliseconds ); + // 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*/ ); - float elapsedSeconds = intervalMilliseconds / 1e3f; - mCore->Update( elapsedSeconds, mLastVSyncTime, nextVSyncTime, mStatus ); + mFrame++; + + return mStatus.KeepUpdating() || mRenderStatus.NeedsUpdate(); } -bool TestApplication::Render( unsigned int intervalMilliseconds ) +bool TestApplication::PreRenderWithPartialUpdate(uint32_t intervalMilliseconds, const char* location, std::vector>& damagedRects) { - DoUpdate( intervalMilliseconds ); - mCore->Render( mRenderStatus ); + 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*/, clippingRect); + mCore->RenderScene(mRenderStatus, mScene, false /*render the surface*/, clippingRect); + mCore->PostRender(false /*do not skip rendering*/); mFrame++; return mStatus.KeepUpdating() || mRenderStatus.NeedsUpdate(); } -unsigned int TestApplication::GetUpdateStatus() +uint32_t TestApplication::GetUpdateStatus() { return mStatus.KeepUpdating(); } -bool TestApplication::UpdateOnly( unsigned int intervalMilliseconds ) +bool TestApplication::UpdateOnly( uint32_t intervalMilliseconds ) { DoUpdate( intervalMilliseconds ); return mStatus.KeepUpdating(); } +bool TestApplication::GetRenderNeedsUpdate() +{ + return mRenderStatus.NeedsUpdate(); +} + +bool TestApplication::GetRenderNeedsPostRender() +{ + return mRenderStatus.NeedsPostRender(); +} + bool TestApplication::RenderOnly( ) { // Update Time values - mCore->Render( mRenderStatus ); + 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++; @@ -198,8 +263,21 @@ bool TestApplication::RenderOnly( ) void TestApplication::ResetContext() { mCore->ContextDestroyed(); + mGlAbstraction.Initialize(); mCore->ContextCreated(); } +uint32_t TestApplication::Wait( uint32_t durationToWait ) +{ + int time = 0; + + for(uint32_t i = 0; i <= ( durationToWait / RENDER_FRAME_INTERVAL); i++) + { + SendNotification(); + Render(RENDER_FRAME_INTERVAL); + time += RENDER_FRAME_INTERVAL; + } + return time; +} } // Namespace dali