Avi Drissman | 8ba1bad | 2022-09-13 19:22:36 | [diff] [blame] | 1 | // Copyright 2022 The Chromium Authors |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef COMPONENTS_EXO_SURFACE_TEST_UTIL_H_ |
| 6 | #define COMPONENTS_EXO_SURFACE_TEST_UTIL_H_ |
| 7 | |
Eliot Courtney | fec8a30d | 2024-01-16 01:25:51 | [diff] [blame] | 8 | #include "components/exo/surface.h" |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 9 | #include "components/exo/surface_observer.h" |
| 10 | #include "testing/gmock/include/gmock/gmock.h" |
Eliot Courtney | fec8a30d | 2024-01-16 01:25:51 | [diff] [blame] | 11 | #include "ui/aura/window.h" |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 12 | |
| 13 | namespace exo { |
| 14 | |
| 15 | class SurfaceObserverForTest : public SurfaceObserver { |
| 16 | public: |
Eliot Courtney | fec8a30d | 2024-01-16 01:25:51 | [diff] [blame] | 17 | explicit SurfaceObserverForTest( |
| 18 | aura::Window::OcclusionState last_occlusion_state); |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 19 | SurfaceObserverForTest(const SurfaceObserverForTest&) = delete; |
| 20 | SurfaceObserverForTest& operator=(const SurfaceObserverForTest&) = delete; |
Arthur Eubanks | b34721e | 2022-08-24 17:47:20 | [diff] [blame] | 21 | ~SurfaceObserverForTest() override; |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 22 | |
| 23 | // SurfaceObserver overrides |
| 24 | void OnSurfaceDestroying(Surface* surface) override {} |
| 25 | |
| 26 | void OnWindowOcclusionChanged(Surface* surface) override { |
| 27 | num_occlusion_changes_++; |
Eliot Courtney | fec8a30d | 2024-01-16 01:25:51 | [diff] [blame] | 28 | if (last_occlusion_state_ != surface->window()->GetOcclusionState()) { |
| 29 | num_occlusion_state_changes_++; |
| 30 | last_occlusion_state_ = surface->window()->GetOcclusionState(); |
| 31 | } |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 32 | } |
| 33 | |
| 34 | int num_occlusion_changes() const { return num_occlusion_changes_; } |
Eliot Courtney | fec8a30d | 2024-01-16 01:25:51 | [diff] [blame] | 35 | int num_occlusion_state_changes() const { |
| 36 | return num_occlusion_state_changes_; |
| 37 | } |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 38 | |
| 39 | MOCK_METHOD(void, ThrottleFrameRate, (bool on), (override)); |
| 40 | |
| 41 | private: |
| 42 | int num_occlusion_changes_ = 0; |
Eliot Courtney | fec8a30d | 2024-01-16 01:25:51 | [diff] [blame] | 43 | int num_occlusion_state_changes_ = 0; |
| 44 | aura::Window::OcclusionState last_occlusion_state_; |
yjliu | 9edcefd | 2022-01-25 02:00:33 | [diff] [blame] | 45 | }; |
| 46 | |
| 47 | } // namespace exo |
| 48 | |
| 49 | #endif // COMPONENTS_EXO_SURFACE_TEST_UTIL_H_ |