Index: ash/rotator/screen_rotation_animator.h |
diff --git a/ash/rotator/screen_rotation_animator.h b/ash/rotator/screen_rotation_animator.h |
index b541106e88030c68a5217cc03451e46268688eae..1852033b9e6b5c8aff54bd83d0a14275daf44adf 100644 |
--- a/ash/rotator/screen_rotation_animator.h |
+++ b/ash/rotator/screen_rotation_animator.h |
@@ -8,11 +8,16 @@ |
#include <stdint.h> |
#include "ash/ash_export.h" |
+#include "base/callback_forward.h" |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
#include "base/observer_list.h" |
#include "ui/display/display.h" |
+namespace cc { |
+class CopyOutputResult; |
+} // namespace cc |
+ |
namespace ui { |
class AnimationMetricsReporter; |
class Layer; |
@@ -30,7 +35,7 @@ class ScreenRotationAnimatorObserver; |
class ASH_EXPORT ScreenRotationAnimator { |
public: |
explicit ScreenRotationAnimator(int64_t display_id); |
- ~ScreenRotationAnimator(); |
+ virtual ~ScreenRotationAnimator(); |
// Rotates the display::Display specified by |display_id_| to the |
// |new_rotation| orientation, for the given |source|. The rotation will also |
@@ -55,11 +60,46 @@ class ASH_EXPORT ScreenRotationAnimator { |
// notifies |screen_rotation_animator_observer_|. |
void ProcessAnimationQueue(); |
+ protected: |
+ using CopyCallback = |
+ base::Callback<void(std::unique_ptr<cc::CopyOutputResult> result)>; |
+ struct ScreenRotationRequest { |
+ ScreenRotationRequest(display::Display::Rotation to_rotation, |
+ display::Display::RotationSource from_source) |
+ : new_rotation(to_rotation), source(from_source) {} |
+ display::Display::Rotation new_rotation; |
+ display::Display::RotationSource source; |
+ }; |
+ |
+ // This function can be overridden in unit test to test removing external |
+ // display. |
+ virtual CopyCallback CreateAfterCopyCallback( |
+ std::unique_ptr<ScreenRotationRequest> rotation_request); |
+ |
private: |
friend class ash::test::ScreenRotationAnimatorTestApi; |
- struct ScreenRotationRequest; |
- // Set the screen orientation to |new_rotation| and animate the change. The |
+ void StartRotationAnimation( |
+ std::unique_ptr<ScreenRotationRequest> rotation_request); |
+ |
+ // This is an asynchronous call to request copy output of root layer. |
+ void RequestCopyRootLayerAndAnimateRotation( |
+ std::unique_ptr<ScreenRotationRequest> rotation_request); |
+ |
+ // The callback in |RequestCopyRootLayerAndAnimateRotation()|. |
+ void OnRootLayerCopiedBeforeRotation( |
+ std::unique_ptr<ScreenRotationRequest> rotation_request, |
+ std::unique_ptr<cc::CopyOutputResult> result); |
+ |
+ // Recreates all |root_window| layers. |
+ void CreateOldLayerTree(); |
+ |
+ // Requests a copy of |root_window| root layer output. |
+ void CopyOldLayerTree(std::unique_ptr<cc::CopyOutputResult> result); |
+ |
+ // Note: Only call this function when the |old_layer_tree_owner_| is set up |
+ // properly. |
+ // Sets the screen orientation to |new_rotation| and animate the change. The |
// animation will rotate the initial orientation's layer towards the new |
// orientation through |rotation_degrees| while fading out, and the new |
// orientation's layer will be rotated in to the |new_orientation| through |