occlusion_tracker_pauser.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef ASH_UTILITY_OCCLUSION_TRACKER_PAUSER_H_
  5. #define ASH_UTILITY_OCCLUSION_TRACKER_PAUSER_H_
  6. #include <memory>
  7. #include "ash/ash_export.h"
  8. #include "base/scoped_multi_source_observation.h"
  9. #include "base/time/time.h"
  10. #include "base/timer/timer.h"
  11. #include "ui/aura/window_occlusion_tracker.h"
  12. #include "ui/compositor/compositor.h"
  13. #include "ui/compositor/compositor_observer.h"
  14. namespace ash {
  15. // A utility class to pause aura's WindowOcclusionTracker until animations are
  16. // finished on all compositors.
  17. class ASH_EXPORT OcclusionTrackerPauser : public ui::CompositorObserver {
  18. public:
  19. OcclusionTrackerPauser();
  20. OcclusionTrackerPauser(const OcclusionTrackerPauser&) = delete;
  21. OcclusionTrackerPauser& operator=(const OcclusionTrackerPauser&) = delete;
  22. ~OcclusionTrackerPauser() override;
  23. // Pause the occlusion tracker until all new animations added after this
  24. // are finished. If the timeout is elapsed before all new animations are
  25. // finished, the pause will be unpaused.
  26. void PauseUntilAnimationsEnd(base::TimeDelta timeout);
  27. // ui::CompositorObserver:
  28. void OnFirstAnimationStarted(ui::Compositor* compositor) override {}
  29. void OnLastAnimationEnded(ui::Compositor* compositor) override;
  30. void OnCompositingShuttingDown(ui::Compositor* compositor) override;
  31. private:
  32. void Pause(ui::Compositor* compositor);
  33. void OnFinish(ui::Compositor* compositor);
  34. void Timeout();
  35. base::OneShotTimer timer_;
  36. base::ScopedMultiSourceObservation<ui::Compositor, ui::CompositorObserver>
  37. observations_{this};
  38. std::unique_ptr<aura::WindowOcclusionTracker::ScopedPause> scoped_pause_;
  39. };
  40. } // namespace ash
  41. #endif // ASH_UTILITY_OCCLUSION_TRACKER_PAUSER_H_