| 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/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
| 10 #include "cc/output/begin_frame_args.h" | 10 #include "cc/output/begin_frame_args.h" |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 SurfaceId root_surface_id(1); | 109 SurfaceId root_surface_id(1); |
| 110 BeginFrameForTest(); | 110 BeginFrameForTest(); |
| 111 EXPECT_LT(now_src().Now(), | 111 EXPECT_LT(now_src().Now(), |
| 112 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 112 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 113 scheduler_->EntireDisplayDamaged(root_surface_id); | 113 scheduler_->EntireDisplayDamaged(root_surface_id); |
| 114 EXPECT_GE(now_src().Now(), | 114 EXPECT_GE(now_src().Now(), |
| 115 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 115 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 116 } | 116 } |
| 117 | 117 |
| 118 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { | 118 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { |
| 119 SurfaceId root_surface_id(0); |
| 119 SurfaceId sid1(1); | 120 SurfaceId sid1(1); |
| 120 SurfaceId sid2(2); | 121 SurfaceId sid2(2); |
| 121 | 122 |
| 123 // Set the root surface |
| 124 scheduler_->EntireDisplayDamaged(root_surface_id); |
| 125 |
| 122 // Get scheduler to detect surface 1 as active by drawing | 126 // Get scheduler to detect surface 1 as active by drawing |
| 123 // two frames in a row with damage from surface 1. | 127 // two frames in a row with damage from surface 1. |
| 124 BeginFrameForTest(); | 128 BeginFrameForTest(); |
| 125 scheduler_->SurfaceDamaged(sid1); | 129 scheduler_->SurfaceDamaged(sid1); |
| 126 scheduler_->BeginFrameDeadlineForTest(); | 130 scheduler_->BeginFrameDeadlineForTest(); |
| 127 BeginFrameForTest(); | 131 BeginFrameForTest(); |
| 128 scheduler_->SurfaceDamaged(sid1); | 132 scheduler_->SurfaceDamaged(sid1); |
| 129 scheduler_->BeginFrameDeadlineForTest(); | 133 scheduler_->BeginFrameDeadlineForTest(); |
| 130 | 134 |
| 131 // Damage only from surface 2 (inactive) does not trigger deadline early. | 135 // Damage only from surface 2 (inactive) does not trigger deadline early. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 150 BeginFrameForTest(); | 154 BeginFrameForTest(); |
| 151 EXPECT_LT(now_src().Now(), | 155 EXPECT_LT(now_src().Now(), |
| 152 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 156 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 153 scheduler_->SurfaceDamaged(sid1); | 157 scheduler_->SurfaceDamaged(sid1); |
| 154 EXPECT_LT(now_src().Now(), | 158 EXPECT_LT(now_src().Now(), |
| 155 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 159 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 156 scheduler_->SurfaceDamaged(sid2); | 160 scheduler_->SurfaceDamaged(sid2); |
| 157 EXPECT_GE(now_src().Now(), | 161 EXPECT_GE(now_src().Now(), |
| 158 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 162 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 159 scheduler_->BeginFrameDeadlineForTest(); | 163 scheduler_->BeginFrameDeadlineForTest(); |
| 164 |
| 165 // Make the system idle |
| 166 BeginFrameForTest(); |
| 167 scheduler_->BeginFrameDeadlineForTest(); |
| 168 BeginFrameForTest(); |
| 169 scheduler_->BeginFrameDeadlineForTest(); |
| 170 |
| 171 // Deadline should trigger early if child surfaces are idle and |
| 172 // we get damage on the root surface. |
| 173 BeginFrameForTest(); |
| 174 EXPECT_LT(now_src().Now(), |
| 175 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 176 scheduler_->SurfaceDamaged(root_surface_id); |
| 177 EXPECT_GE(now_src().Now(), |
| 178 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 179 scheduler_->BeginFrameDeadlineForTest(); |
| 160 } | 180 } |
| 161 | 181 |
| 162 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { | 182 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { |
| 163 SurfaceId sid1(1); | 183 SurfaceId sid1(1); |
| 164 | 184 |
| 165 // DrawAndSwap normally. | 185 // DrawAndSwap normally. |
| 166 BeginFrameForTest(); | 186 BeginFrameForTest(); |
| 167 EXPECT_LT(now_src().Now(), | 187 EXPECT_LT(now_src().Now(), |
| 168 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); | 188 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); |
| 169 EXPECT_EQ(0, client_->draw_and_swap_count()); | 189 EXPECT_EQ(0, client_->draw_and_swap_count()); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 | 332 |
| 313 scheduler_->SetRootSurfaceResourcesLocked(true); | 333 scheduler_->SetRootSurfaceResourcesLocked(true); |
| 314 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 334 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
| 315 | 335 |
| 316 scheduler_->OutputSurfaceLost(); | 336 scheduler_->OutputSurfaceLost(); |
| 317 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); | 337 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); |
| 318 } | 338 } |
| 319 | 339 |
| 320 } // namespace | 340 } // namespace |
| 321 } // namespace cc | 341 } // namespace cc |
| OLD | NEW |