OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/wm/video_detector.h" | 5 #include "ash/wm/video_detector.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/test/ash_test_base.h" | 8 #include "ash/test/ash_test_base.h" |
9 #include "ash/wm/window_util.h" | 9 #include "ash/wm/window_util.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 | 93 |
94 base::TimeTicks now_; | 94 base::TimeTicks now_; |
95 | 95 |
96 private: | 96 private: |
97 DISALLOW_COPY_AND_ASSIGN(VideoDetectorTest); | 97 DISALLOW_COPY_AND_ASSIGN(VideoDetectorTest); |
98 }; | 98 }; |
99 | 99 |
100 TEST_F(VideoDetectorTest, Basic) { | 100 TEST_F(VideoDetectorTest, Basic) { |
101 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); | 101 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); |
102 scoped_ptr<aura::Window> window( | 102 scoped_ptr<aura::Window> window( |
103 aura::test::CreateTestWindow(SK_ColorRED, 12345, window_bounds, NULL)); | 103 CreateTestWindowInShell(SK_ColorRED, 12345, window_bounds)); |
104 | 104 |
105 // Send enough updates, but make them be too small to trigger detection. | 105 // Send enough updates, but make them be too small to trigger detection. |
106 gfx::Rect update_region( | 106 gfx::Rect update_region( |
107 gfx::Point(), | 107 gfx::Point(), |
108 gfx::Size(VideoDetector::kMinUpdateWidth - 1, | 108 gfx::Size(VideoDetector::kMinUpdateWidth - 1, |
109 VideoDetector::kMinUpdateHeight)); | 109 VideoDetector::kMinUpdateHeight)); |
110 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) | 110 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) |
111 detector_->OnWindowPaintScheduled(window.get(), update_region); | 111 detector_->OnWindowPaintScheduled(window.get(), update_region); |
112 EXPECT_EQ(0, observer_->num_invocations()); | 112 EXPECT_EQ(0, observer_->num_invocations()); |
113 | 113 |
(...skipping 25 matching lines...) Expand all Loading... |
139 detector_->OnWindowPaintScheduled(window.get(), update_region); | 139 detector_->OnWindowPaintScheduled(window.get(), update_region); |
140 AdvanceTime(base::TimeDelta::FromSeconds(1)); | 140 AdvanceTime(base::TimeDelta::FromSeconds(1)); |
141 for (int i = 0; i < VideoDetector::kMinFramesPerSecond - 1; ++i) | 141 for (int i = 0; i < VideoDetector::kMinFramesPerSecond - 1; ++i) |
142 detector_->OnWindowPaintScheduled(window.get(), update_region); | 142 detector_->OnWindowPaintScheduled(window.get(), update_region); |
143 EXPECT_EQ(0, observer_->num_invocations()); | 143 EXPECT_EQ(0, observer_->num_invocations()); |
144 } | 144 } |
145 | 145 |
146 TEST_F(VideoDetectorTest, WindowNotVisible) { | 146 TEST_F(VideoDetectorTest, WindowNotVisible) { |
147 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); | 147 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); |
148 scoped_ptr<aura::Window> window( | 148 scoped_ptr<aura::Window> window( |
149 aura::test::CreateTestWindow(SK_ColorRED, 12345, window_bounds, NULL)); | 149 CreateTestWindowInShell(SK_ColorRED, 12345, window_bounds)); |
150 | 150 |
151 // Reparent the window to the root to make sure that visibility changes aren't | 151 // Reparent the window to the root to make sure that visibility changes aren't |
152 // animated. | 152 // animated. |
153 Shell::GetPrimaryRootWindow()->AddChild(window.get()); | 153 Shell::GetPrimaryRootWindow()->AddChild(window.get()); |
154 | 154 |
155 // We shouldn't report video that's played in a hidden window. | 155 // We shouldn't report video that's played in a hidden window. |
156 window->Hide(); | 156 window->Hide(); |
157 gfx::Rect update_region( | 157 gfx::Rect update_region( |
158 gfx::Point(), | 158 gfx::Point(), |
159 gfx::Size(VideoDetector::kMinUpdateWidth, | 159 gfx::Size(VideoDetector::kMinUpdateWidth, |
(...skipping 22 matching lines...) Expand all Loading... |
182 ASSERT_EQ(offscreen_bounds, window->bounds()); | 182 ASSERT_EQ(offscreen_bounds, window->bounds()); |
183 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) | 183 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) |
184 detector_->OnWindowPaintScheduled(window.get(), update_region); | 184 detector_->OnWindowPaintScheduled(window.get(), update_region); |
185 EXPECT_EQ(0, observer_->num_invocations()); | 185 EXPECT_EQ(0, observer_->num_invocations()); |
186 } | 186 } |
187 | 187 |
188 TEST_F(VideoDetectorTest, MultipleWindows) { | 188 TEST_F(VideoDetectorTest, MultipleWindows) { |
189 // Create two windows. | 189 // Create two windows. |
190 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); | 190 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); |
191 scoped_ptr<aura::Window> window1( | 191 scoped_ptr<aura::Window> window1( |
192 aura::test::CreateTestWindow(SK_ColorRED, 12345, window_bounds, NULL)); | 192 CreateTestWindowInShell(SK_ColorRED, 12345, window_bounds)); |
193 scoped_ptr<aura::Window> window2( | 193 scoped_ptr<aura::Window> window2( |
194 aura::test::CreateTestWindow(SK_ColorBLUE, 23456, window_bounds, NULL)); | 194 CreateTestWindowInShell(SK_ColorBLUE, 23456, window_bounds)); |
195 | 195 |
196 // Even if there's video playing in both, the observer should only receive a | 196 // Even if there's video playing in both, the observer should only receive a |
197 // single notification. | 197 // single notification. |
198 gfx::Rect update_region( | 198 gfx::Rect update_region( |
199 gfx::Point(), | 199 gfx::Point(), |
200 gfx::Size(VideoDetector::kMinUpdateWidth, | 200 gfx::Size(VideoDetector::kMinUpdateWidth, |
201 VideoDetector::kMinUpdateHeight)); | 201 VideoDetector::kMinUpdateHeight)); |
202 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) | 202 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) |
203 detector_->OnWindowPaintScheduled(window1.get(), update_region); | 203 detector_->OnWindowPaintScheduled(window1.get(), update_region); |
204 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) | 204 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) |
205 detector_->OnWindowPaintScheduled(window2.get(), update_region); | 205 detector_->OnWindowPaintScheduled(window2.get(), update_region); |
206 EXPECT_EQ(1, observer_->num_invocations()); | 206 EXPECT_EQ(1, observer_->num_invocations()); |
207 EXPECT_EQ(0, observer_->num_fullscreens()); | 207 EXPECT_EQ(0, observer_->num_fullscreens()); |
208 EXPECT_EQ(1, observer_->num_not_fullscreens()); | 208 EXPECT_EQ(1, observer_->num_not_fullscreens()); |
209 } | 209 } |
210 | 210 |
211 // Test that the observer receives repeated notifications. | 211 // Test that the observer receives repeated notifications. |
212 TEST_F(VideoDetectorTest, RepeatedNotifications) { | 212 TEST_F(VideoDetectorTest, RepeatedNotifications) { |
213 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); | 213 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); |
214 scoped_ptr<aura::Window> window( | 214 scoped_ptr<aura::Window> window( |
215 aura::test::CreateTestWindow(SK_ColorRED, 12345, window_bounds, NULL)); | 215 CreateTestWindowInShell(SK_ColorRED, 12345, window_bounds)); |
216 | 216 |
217 gfx::Rect update_region( | 217 gfx::Rect update_region( |
218 gfx::Point(), | 218 gfx::Point(), |
219 gfx::Size(VideoDetector::kMinUpdateWidth, | 219 gfx::Size(VideoDetector::kMinUpdateWidth, |
220 VideoDetector::kMinUpdateHeight)); | 220 VideoDetector::kMinUpdateHeight)); |
221 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) | 221 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) |
222 detector_->OnWindowPaintScheduled(window.get(), update_region); | 222 detector_->OnWindowPaintScheduled(window.get(), update_region); |
223 EXPECT_EQ(1, observer_->num_invocations()); | 223 EXPECT_EQ(1, observer_->num_invocations()); |
224 EXPECT_EQ(0, observer_->num_fullscreens()); | 224 EXPECT_EQ(0, observer_->num_fullscreens()); |
225 EXPECT_EQ(1, observer_->num_not_fullscreens()); | 225 EXPECT_EQ(1, observer_->num_not_fullscreens()); |
226 // Let enough time pass that a second notification should be sent. | 226 // Let enough time pass that a second notification should be sent. |
227 observer_->reset_stats(); | 227 observer_->reset_stats(); |
228 AdvanceTime(base::TimeDelta::FromSeconds( | 228 AdvanceTime(base::TimeDelta::FromSeconds( |
229 static_cast<int64>(VideoDetector::kNotifyIntervalSec + 1))); | 229 static_cast<int64>(VideoDetector::kNotifyIntervalSec + 1))); |
230 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) | 230 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) |
231 detector_->OnWindowPaintScheduled(window.get(), update_region); | 231 detector_->OnWindowPaintScheduled(window.get(), update_region); |
232 EXPECT_EQ(1, observer_->num_invocations()); | 232 EXPECT_EQ(1, observer_->num_invocations()); |
233 EXPECT_EQ(0, observer_->num_fullscreens()); | 233 EXPECT_EQ(0, observer_->num_fullscreens()); |
234 EXPECT_EQ(1, observer_->num_not_fullscreens()); | 234 EXPECT_EQ(1, observer_->num_not_fullscreens()); |
235 } | 235 } |
236 | 236 |
237 // Test that the observer receives a true value when the window is fullscreen. | 237 // Test that the observer receives a true value when the window is fullscreen. |
238 TEST_F(VideoDetectorTest, FullscreenWindow) { | 238 TEST_F(VideoDetectorTest, FullscreenWindow) { |
239 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); | 239 gfx::Rect window_bounds(gfx::Point(), gfx::Size(1024, 768)); |
240 scoped_ptr<aura::Window> window( | 240 scoped_ptr<aura::Window> window( |
241 aura::test::CreateTestWindow(SK_ColorRED, 12345, window_bounds, NULL)); | 241 CreateTestWindowInShell(SK_ColorRED, 12345, window_bounds)); |
242 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); | 242 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
243 window->Focus(); | 243 window->Focus(); |
244 gfx::Rect update_region( | 244 gfx::Rect update_region( |
245 gfx::Point(), | 245 gfx::Point(), |
246 gfx::Size(VideoDetector::kMinUpdateWidth, | 246 gfx::Size(VideoDetector::kMinUpdateWidth, |
247 VideoDetector::kMinUpdateHeight)); | 247 VideoDetector::kMinUpdateHeight)); |
248 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) | 248 for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) |
249 detector_->OnWindowPaintScheduled(window.get(), update_region); | 249 detector_->OnWindowPaintScheduled(window.get(), update_region); |
250 EXPECT_EQ(1, observer_->num_invocations()); | 250 EXPECT_EQ(1, observer_->num_invocations()); |
251 EXPECT_EQ(1, observer_->num_fullscreens()); | 251 EXPECT_EQ(1, observer_->num_fullscreens()); |
252 EXPECT_EQ(0, observer_->num_not_fullscreens()); | 252 EXPECT_EQ(0, observer_->num_not_fullscreens()); |
253 } | 253 } |
254 | 254 |
255 } // namespace test | 255 } // namespace test |
256 } // namespace ash | 256 } // namespace ash |
OLD | NEW |