Support event processing during pause state 66/152166/6
authorHeeyong Song <heeyong.song@samsung.com>
Mon, 25 Sep 2017 07:33:31 +0000 (16:33 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Mon, 23 Oct 2017 02:22:12 +0000 (02:22 +0000)
Change-Id: Iee9b8046bd13da7871ac756569b94a45398ac489

adaptors/common/adaptor-impl.cpp
adaptors/common/adaptor-impl.h
adaptors/common/adaptor.cpp
automated-tests/src/dali-adaptor/dali-test-suite-utils/test-render-controller.cpp
automated-tests/src/dali-adaptor/dali-test-suite-utils/test-render-controller.h

index e9dfd5e..e4b508f 100644 (file)
@@ -303,7 +303,6 @@ void Adaptor::Pause()
     }
 
     mThreadController->Pause();
-    mCore->Suspend();
     mState = PAUSED;
   }
 }
@@ -328,8 +327,8 @@ void Adaptor::Resume()
       (*iter)->OnResume();
     }
 
-    // Resume core so it processes any requests as well
-    mCore->Resume();
+    // trigger processing of events queued up while paused
+    mCore->ProcessEvents();
 
     // Do at end to ensure our first update/render after resumption includes the processed messages as well
     mThreadController->Resume();
@@ -348,7 +347,6 @@ void Adaptor::Stop()
     }
 
     mThreadController->Stop();
-    mCore->Suspend();
 
     // Delete the TTS player
     for(int i =0; i < Dali::TtsPlayer::MODE_NUM; i++)
@@ -440,12 +438,12 @@ Dali::TtsPlayer Adaptor::GetTtsPlayer(Dali::TtsPlayer::Mode mode)
   return mTtsPlayers[mode];
 }
 
-bool Adaptor::AddIdle( CallbackBase* callback )
+bool Adaptor::AddIdle( CallbackBase* callback, bool forceAdd )
 {
   bool idleAdded(false);
 
   // Only add an idle if the Adaptor is actually running
-  if( RUNNING == mState )
+  if( RUNNING == mState || forceAdd )
   {
     idleAdded = mCallbackManager->AddIdleCallback( callback );
   }
@@ -657,24 +655,41 @@ void Adaptor::ProcessCoreEvents()
   }
 }
 
-void Adaptor::RequestUpdate()
+void Adaptor::RequestUpdate( bool forceUpdate )
 {
-  // When Dali applications are partially visible behind the lock-screen,
-  // the indicator must be updated (therefore allow updates in the PAUSED state)
-  if ( PAUSED  == mState ||
-       RUNNING == mState )
+  switch( mState )
   {
-    mThreadController->RequestUpdate();
+    case RUNNING:
+    {
+      mThreadController->RequestUpdate();
+      break;
+    }
+    case PAUSED:
+    case PAUSED_WHILE_HIDDEN:
+    {
+      // When Dali applications are partially visible behind the lock-screen,
+      // the indicator must be updated (therefore allow updates in the PAUSED state)
+      if( forceUpdate )
+      {
+        mThreadController->RequestUpdateOnce();
+      }
+      break;
+    }
+    default:
+    {
+      // Do nothing
+      break;
+    }
   }
 }
 
-void Adaptor::RequestProcessEventsOnIdle()
+void Adaptor::RequestProcessEventsOnIdle( bool forceProcess )
 {
   // Only request a notification if the Adaptor is actually running
   // and we haven't installed the idle notification
-  if( ( ! mNotificationOnIdleInstalled ) && ( RUNNING == mState ) )
+  if( ( ! mNotificationOnIdleInstalled ) && ( RUNNING == mState || forceProcess ) )
   {
-    mNotificationOnIdleInstalled = AddIdle( MakeCallback( this, &Adaptor::ProcessCoreEventsFromIdle ) );
+    mNotificationOnIdleInstalled = AddIdle( MakeCallback( this, &Adaptor::ProcessCoreEventsFromIdle ), forceProcess );
   }
 }
 
@@ -707,7 +722,7 @@ void Adaptor::OnWindowHidden()
 void Adaptor::OnDamaged( const DamageArea& area )
 {
   // This is needed for the case where Dali window is partially obscured
-  RequestUpdate();
+  RequestUpdate( false );
 }
 
 void Adaptor::SurfaceResizePrepare( SurfaceSize surfaceSize )
@@ -751,12 +766,9 @@ void Adaptor::RenderOnce()
 
 void Adaptor::RequestUpdateOnce()
 {
-  if( PAUSED_WHILE_HIDDEN != mState )
+  if( mThreadController )
   {
-    if( mThreadController )
-    {
-      mThreadController->RequestUpdateOnce();
-    }
+    mThreadController->RequestUpdateOnce();
   }
 }
 
index f42b85f..31c577b 100644 (file)
@@ -211,7 +211,7 @@ public: // AdaptorInternalServices implementation
   /**
    * @copydoc Dali::Adaptor::AddIdle()
    */
-  virtual bool AddIdle( CallbackBase* callback );
+  virtual bool AddIdle( CallbackBase* callback, bool forceAdd );
 
   /**
    * @copydoc Dali::Adaptor::RemoveIdle()
@@ -471,15 +471,14 @@ private: // From Dali::Internal::Adaptor::CoreEventInterface
 private: // From Dali::Integration::RenderController
 
   /**
-   * Called by the Dali core when it requires another update
+   * @copydoc Dali::Integration::RenderController::RequestUpdate()
    */
-  virtual void RequestUpdate();
+  virtual void RequestUpdate( bool forceUpdate );
 
   /**
-   * Called by Dali core when it requires an notification event being sent on idle.
-   * Multi-threading note: this method must be called from the main thread only.
+   * @copydoc Dali::Integration::RenderController::RequestProcessEventsOnIdle()
    */
-  virtual void RequestProcessEventsOnIdle();
+  virtual void RequestProcessEventsOnIdle( bool forceProcess );
 
 private: // From Dali::Internal::Adaptor::WindowVisibilityObserver
 
@@ -577,7 +576,7 @@ private: // Data
 
   Any                                   mNativeWindow;                ///< window identifier
   RenderSurface*                        mSurface;                     ///< Current surface
-  TizenPlatform::TizenPlatformAbstraction* mPlatformAbstraction;         ///< Platform abstraction
+  TizenPlatform::TizenPlatformAbstraction* mPlatformAbstraction;      ///< Platform abstraction
 
   EventHandler*                         mEventHandler;                ///< event handler
   CallbackManager*                      mCallbackManager;             ///< Used to install callbacks
index 78c33ab..c6cc3fa 100644 (file)
@@ -81,7 +81,7 @@ void Adaptor::Stop()
 
 bool Adaptor::AddIdle( CallbackBase* callback )
 {
-  return mImpl->AddIdle( callback );
+  return mImpl->AddIdle( callback, false );
 }
 
 void Adaptor::RemoveIdle( CallbackBase* callback )
index f3b04ad..6f845d4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 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.
@@ -29,12 +29,12 @@ TestRenderController::~TestRenderController()
 {
 }
 
-void TestRenderController::RequestUpdate()
+void TestRenderController::RequestUpdate( bool forceUpdate )
 {
   mRequestUpdateCalled = true;
 }
 
-void TestRenderController::RequestProcessEventsOnIdle()
+void TestRenderController::RequestProcessEventsOnIdle( bool forceProcess )
 {
   mRequestProcessEventsOnIdleCalled = true;
 }
index b00fbf0..3ad63d3 100644 (file)
@@ -2,7 +2,7 @@
 #define __TEST_RENDER_CONTROLLER_H__
 
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 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.
@@ -31,8 +31,8 @@ public:
   TestRenderController();
   ~TestRenderController();
 
-  virtual void RequestUpdate();
-  virtual void RequestProcessEventsOnIdle();
+  virtual void RequestUpdate( bool forceUpdate );
+  virtual void RequestProcessEventsOnIdle( bool forceProcess );
 
   typedef enum
   {