OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "cc/surfaces/display_scheduler.h" | 5 #include "cc/surfaces/display_scheduler.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/test/null_task_runner.h" | 8 #include "base/test/null_task_runner.h" |
9 #include "base/test/simple_test_tick_clock.h" | 9 #include "base/test/simple_test_tick_clock.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 DisplayScheduler& scheduler() { return *scheduler_; } | 100 DisplayScheduler& scheduler() { return *scheduler_; } |
101 | 101 |
102 FakeBeginFrameSource fake_begin_frame_source_; | 102 FakeBeginFrameSource fake_begin_frame_source_; |
103 | 103 |
104 scoped_ptr<base::SimpleTestTickClock> now_src_; | 104 scoped_ptr<base::SimpleTestTickClock> now_src_; |
105 scoped_refptr<base::NullTaskRunner> task_runner_; | 105 scoped_refptr<base::NullTaskRunner> task_runner_; |
106 scoped_ptr<FakeDisplaySchedulerClient> client_; | 106 scoped_ptr<FakeDisplaySchedulerClient> client_; |
107 scoped_ptr<TestDisplayScheduler> scheduler_; | 107 scoped_ptr<TestDisplayScheduler> scheduler_; |
108 }; | 108 }; |
109 | 109 |
110 TEST_F(DisplaySchedulerTest, EntireDisplayDamagedDrawsImmediately) { | 110 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { |
111 SurfaceId root_surface_id(1); | 111 SurfaceId root_surface_id1(1); |
| 112 SurfaceId root_surface_id2(2); |
| 113 SurfaceId sid1(3); |
| 114 base::TimeTicks late_deadline; |
| 115 |
| 116 // Go trough an initial BeginFrame cycle with the root surface. |
112 BeginFrameForTest(); | 117 BeginFrameForTest(); |
113 EXPECT_LT(now_src().NowTicks(), | 118 scheduler_->SetNewRootSurface(root_surface_id1); |
114 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 119 scheduler_->BeginFrameDeadlineForTest(); |
115 scheduler_->EntireDisplayDamaged(root_surface_id); | 120 |
| 121 // Resize on the next begin frame cycle should cause the deadline to wait |
| 122 // for a new root surface. |
| 123 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| 124 BeginFrameForTest(); |
| 125 scheduler_->SurfaceDamaged(sid1); |
| 126 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 127 scheduler_->DisplayResized(); |
| 128 EXPECT_EQ(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 129 scheduler_->SetNewRootSurface(root_surface_id2); |
116 EXPECT_GE(now_src().NowTicks(), | 130 EXPECT_GE(now_src().NowTicks(), |
117 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 131 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 132 scheduler_->BeginFrameDeadlineForTest(); |
| 133 |
| 134 // Verify deadline goes back to normal after resize. |
| 135 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| 136 BeginFrameForTest(); |
| 137 scheduler_->SurfaceDamaged(sid1); |
| 138 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 139 scheduler_->SurfaceDamaged(root_surface_id2); |
| 140 EXPECT_GE(now_src().NowTicks(), |
| 141 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 142 scheduler_->BeginFrameDeadlineForTest(); |
| 143 } |
| 144 |
| 145 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { |
| 146 SurfaceId root_surface_id(1); |
| 147 SurfaceId sid1(2); |
| 148 base::TimeTicks late_deadline; |
| 149 |
| 150 // Go trough an initial BeginFrame cycle with the root surface. |
| 151 BeginFrameForTest(); |
| 152 scheduler_->SetNewRootSurface(root_surface_id); |
| 153 scheduler_->BeginFrameDeadlineForTest(); |
| 154 |
| 155 // Resize on the next begin frame cycle should cause the deadline to wait |
| 156 // for a new root surface. |
| 157 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| 158 BeginFrameForTest(); |
| 159 scheduler_->SurfaceDamaged(sid1); |
| 160 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 161 scheduler_->DisplayResized(); |
| 162 EXPECT_EQ(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 163 scheduler_->SurfaceDamaged(root_surface_id); |
| 164 EXPECT_GE(now_src().NowTicks(), |
| 165 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 166 scheduler_->BeginFrameDeadlineForTest(); |
| 167 |
| 168 // Verify deadline goes back to normal after resize. |
| 169 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| 170 BeginFrameForTest(); |
| 171 scheduler_->SurfaceDamaged(sid1); |
| 172 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 173 scheduler_->SurfaceDamaged(root_surface_id); |
| 174 EXPECT_GE(now_src().NowTicks(), |
| 175 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 176 scheduler_->BeginFrameDeadlineForTest(); |
118 } | 177 } |
119 | 178 |
120 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { | 179 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { |
121 SurfaceId root_surface_id(0); | 180 SurfaceId root_surface_id(0); |
122 SurfaceId sid1(1); | 181 SurfaceId sid1(1); |
123 SurfaceId sid2(2); | 182 SurfaceId sid2(2); |
124 | 183 |
125 // Set the root surface | 184 // Set the root surface |
126 scheduler_->EntireDisplayDamaged(root_surface_id); | 185 scheduler_->SetNewRootSurface(root_surface_id); |
127 | 186 |
128 // Get scheduler to detect surface 1 as active by drawing | 187 // Get scheduler to detect surface 1 as active by drawing |
129 // two frames in a row with damage from surface 1. | 188 // two frames in a row with damage from surface 1. |
130 BeginFrameForTest(); | 189 BeginFrameForTest(); |
131 scheduler_->SurfaceDamaged(sid1); | 190 scheduler_->SurfaceDamaged(sid1); |
132 scheduler_->BeginFrameDeadlineForTest(); | 191 scheduler_->BeginFrameDeadlineForTest(); |
133 BeginFrameForTest(); | 192 BeginFrameForTest(); |
134 scheduler_->SurfaceDamaged(sid1); | 193 scheduler_->SurfaceDamaged(sid1); |
135 scheduler_->BeginFrameDeadlineForTest(); | 194 scheduler_->BeginFrameDeadlineForTest(); |
136 | 195 |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 379 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
321 | 380 |
322 scheduler_->BeginFrameDeadlineForTest(); | 381 scheduler_->BeginFrameDeadlineForTest(); |
323 scheduler_->DidSwapBuffers(); | 382 scheduler_->DidSwapBuffers(); |
324 BeginFrameForTest(); | 383 BeginFrameForTest(); |
325 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 384 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
326 | 385 |
327 scheduler_->DidSwapBuffersComplete(); | 386 scheduler_->DidSwapBuffersComplete(); |
328 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 387 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
329 | 388 |
330 scheduler_->EntireDisplayDamaged(root_surface_id); | 389 scheduler_->DisplayResized(); |
| 390 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
| 391 |
| 392 scheduler_->SetNewRootSurface(root_surface_id); |
331 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 393 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
332 | 394 |
333 scheduler_->SurfaceDamaged(sid1); | 395 scheduler_->SurfaceDamaged(sid1); |
334 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 396 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
335 | 397 |
336 scheduler_->SetRootSurfaceResourcesLocked(true); | 398 scheduler_->SetRootSurfaceResourcesLocked(true); |
337 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 399 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
338 | 400 |
339 scheduler_->OutputSurfaceLost(); | 401 scheduler_->OutputSurfaceLost(); |
340 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 402 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
341 } | 403 } |
342 | 404 |
343 } // namespace | 405 } // namespace |
344 } // namespace cc | 406 } // namespace cc |
OLD | NEW |