Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: cc/surfaces/display_scheduler_unittest.cc

Issue 1251823005: cc: Make DisplayScheduler aware of resize and add tracing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix tests; small logic changes Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698