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

Side by Side Diff: cc/scheduler_unittest.cc

Issue 12774006: cc: Chromify Layer and LayerImpl classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: MoreAndroidCompilings Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/scheduler.h" 5 #include "cc/scheduler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "cc/test/scheduler_test_common.h" 8 #include "cc/test/scheduler_test_common.h"
9 #include "testing/gmock/include/gmock/gmock.h" 9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 199
200 // Regaining visibility with textures acquired by main thread while 200 // Regaining visibility with textures acquired by main thread while
201 // compositor is waiting for first draw should result in a request 201 // compositor is waiting for first draw should result in a request
202 // for a new frame in order to escape a deadlock. 202 // for a new frame in order to escape a deadlock.
203 scheduler->setVisible(true); 203 scheduler->setVisible(true);
204 EXPECT_EQ(1, client.numActions()); 204 EXPECT_EQ(1, client.numActions());
205 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0)); 205 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0));
206 client.reset(); 206 client.reset();
207 } 207 }
208 208
209 class SchedulerClientThatSetNeedsDrawInsideDraw : public FakeSchedulerClient { 209 class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient {
210 public: 210 public:
211 SchedulerClientThatSetNeedsDrawInsideDraw() 211 SchedulerClientThatsetNeedsDrawInsideDraw()
212 : m_scheduler(0) { } 212 : m_scheduler(0) { }
213 213
214 void setScheduler(Scheduler* scheduler) { m_scheduler = scheduler; } 214 void setScheduler(Scheduler* scheduler) { m_scheduler = scheduler; }
215 215
216 virtual void scheduledActionBeginFrame() OVERRIDE { } 216 virtual void scheduledActionBeginFrame() OVERRIDE { }
217 virtual ScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossibl e() OVERRIDE 217 virtual ScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossibl e() OVERRIDE
218 { 218 {
219 // Only setNeedsRedraw the first time this is called 219 // Only setNeedsRedraw the first time this is called
220 if (!m_numDraws) 220 if (!m_numDraws)
221 m_scheduler->setNeedsRedraw(); 221 m_scheduler->setNeedsRedraw();
(...skipping 13 matching lines...) Expand all
235 protected: 235 protected:
236 Scheduler* m_scheduler; 236 Scheduler* m_scheduler;
237 }; 237 };
238 238
239 // Tests for two different situations: 239 // Tests for two different situations:
240 // 1. the scheduler dropping setNeedsRedraw requests that happen inside 240 // 1. the scheduler dropping setNeedsRedraw requests that happen inside
241 // a scheduledActionDrawAndSwap 241 // a scheduledActionDrawAndSwap
242 // 2. the scheduler drawing twice inside a single tick 242 // 2. the scheduler drawing twice inside a single tick
243 TEST(SchedulerTest, RequestRedrawInsideDraw) 243 TEST(SchedulerTest, RequestRedrawInsideDraw)
244 { 244 {
245 SchedulerClientThatSetNeedsDrawInsideDraw client; 245 SchedulerClientThatsetNeedsDrawInsideDraw client;
246 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); 246 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource());
247 SchedulerSettings defaultSchedulerSettings; 247 SchedulerSettings defaultSchedulerSettings;
248 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings); 248 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings);
249 client.setScheduler(scheduler.get()); 249 client.setScheduler(scheduler.get());
250 scheduler->setCanBeginFrame(true); 250 scheduler->setCanBeginFrame(true);
251 scheduler->setVisible(true); 251 scheduler->setVisible(true);
252 scheduler->setCanDraw(true); 252 scheduler->setCanDraw(true);
253 253
254 scheduler->setNeedsRedraw(); 254 scheduler->setNeedsRedraw();
255 EXPECT_TRUE(scheduler->redrawPending()); 255 EXPECT_TRUE(scheduler->redrawPending());
256 EXPECT_TRUE(timeSource->active()); 256 EXPECT_TRUE(timeSource->active());
257 EXPECT_EQ(0, client.numDraws()); 257 EXPECT_EQ(0, client.numDraws());
258 258
259 timeSource->tick(); 259 timeSource->tick();
260 EXPECT_EQ(1, client.numDraws()); 260 EXPECT_EQ(1, client.numDraws());
261 EXPECT_TRUE(scheduler->redrawPending()); 261 EXPECT_TRUE(scheduler->redrawPending());
262 EXPECT_TRUE(timeSource->active()); 262 EXPECT_TRUE(timeSource->active());
263 263
264 timeSource->tick(); 264 timeSource->tick();
265 EXPECT_EQ(2, client.numDraws()); 265 EXPECT_EQ(2, client.numDraws());
266 EXPECT_FALSE(scheduler->redrawPending()); 266 EXPECT_FALSE(scheduler->redrawPending());
267 EXPECT_FALSE(timeSource->active()); 267 EXPECT_FALSE(timeSource->active());
268 } 268 }
269 269
270 // Test that requesting redraw inside a failed draw doesn't lose the request. 270 // Test that requesting redraw inside a failed draw doesn't lose the request.
271 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) 271 TEST(SchedulerTest, RequestRedrawInsideFailedDraw)
272 { 272 {
273 SchedulerClientThatSetNeedsDrawInsideDraw client; 273 SchedulerClientThatsetNeedsDrawInsideDraw client;
274 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); 274 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource());
275 SchedulerSettings defaultSchedulerSettings; 275 SchedulerSettings defaultSchedulerSettings;
276 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings); 276 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings);
277 client.setScheduler(scheduler.get()); 277 client.setScheduler(scheduler.get());
278 scheduler->setCanBeginFrame(true); 278 scheduler->setCanBeginFrame(true);
279 scheduler->setVisible(true); 279 scheduler->setVisible(true);
280 scheduler->setCanDraw(true); 280 scheduler->setCanDraw(true);
281 client.setDrawWillHappen(false); 281 client.setDrawWillHappen(false);
282 282
283 scheduler->setNeedsRedraw(); 283 scheduler->setNeedsRedraw();
(...skipping 19 matching lines...) Expand all
303 303
304 // Draw successfully. 304 // Draw successfully.
305 client.setDrawWillHappen(true); 305 client.setDrawWillHappen(true);
306 timeSource->tick(); 306 timeSource->tick();
307 EXPECT_EQ(3, client.numDraws()); 307 EXPECT_EQ(3, client.numDraws());
308 EXPECT_TRUE(scheduler->commitPending()); 308 EXPECT_TRUE(scheduler->commitPending());
309 EXPECT_FALSE(scheduler->redrawPending()); 309 EXPECT_FALSE(scheduler->redrawPending());
310 EXPECT_FALSE(timeSource->active()); 310 EXPECT_FALSE(timeSource->active());
311 } 311 }
312 312
313 class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeSchedulerClient { 313 class SchedulerClientThatsetNeedsCommitInsideDraw : public FakeSchedulerClient {
314 public: 314 public:
315 SchedulerClientThatSetNeedsCommitInsideDraw() 315 SchedulerClientThatsetNeedsCommitInsideDraw()
316 : m_scheduler(0) { } 316 : m_scheduler(0) { }
317 317
318 void setScheduler(Scheduler* scheduler) { m_scheduler = scheduler; } 318 void setScheduler(Scheduler* scheduler) { m_scheduler = scheduler; }
319 319
320 virtual void scheduledActionBeginFrame() OVERRIDE { } 320 virtual void scheduledActionBeginFrame() OVERRIDE { }
321 virtual ScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossibl e() OVERRIDE 321 virtual ScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossibl e() OVERRIDE
322 { 322 {
323 // Only setNeedsCommit the first time this is called 323 // Only setNeedsCommit the first time this is called
324 if (!m_numDraws) 324 if (!m_numDraws)
325 m_scheduler->setNeedsCommit(); 325 m_scheduler->setNeedsCommit();
(...skipping 11 matching lines...) Expand all
337 virtual void didAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE { } 337 virtual void didAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE { }
338 338
339 protected: 339 protected:
340 Scheduler* m_scheduler; 340 Scheduler* m_scheduler;
341 }; 341 };
342 342
343 // Tests for the scheduler infinite-looping on setNeedsCommit requests that 343 // Tests for the scheduler infinite-looping on setNeedsCommit requests that
344 // happen inside a scheduledActionDrawAndSwap 344 // happen inside a scheduledActionDrawAndSwap
345 TEST(SchedulerTest, RequestCommitInsideDraw) 345 TEST(SchedulerTest, RequestCommitInsideDraw)
346 { 346 {
347 SchedulerClientThatSetNeedsCommitInsideDraw client; 347 SchedulerClientThatsetNeedsCommitInsideDraw client;
348 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); 348 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource());
349 SchedulerSettings defaultSchedulerSettings; 349 SchedulerSettings defaultSchedulerSettings;
350 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings); 350 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings);
351 client.setScheduler(scheduler.get()); 351 client.setScheduler(scheduler.get());
352 scheduler->setCanBeginFrame(true); 352 scheduler->setCanBeginFrame(true);
353 scheduler->setVisible(true); 353 scheduler->setVisible(true);
354 scheduler->setCanDraw(true); 354 scheduler->setCanDraw(true);
355 355
356 scheduler->setNeedsRedraw(); 356 scheduler->setNeedsRedraw();
357 EXPECT_TRUE(scheduler->redrawPending()); 357 EXPECT_TRUE(scheduler->redrawPending());
358 EXPECT_EQ(0, client.numDraws()); 358 EXPECT_EQ(0, client.numDraws());
359 EXPECT_TRUE(timeSource->active()); 359 EXPECT_TRUE(timeSource->active());
360 360
361 timeSource->tick(); 361 timeSource->tick();
362 EXPECT_FALSE(timeSource->active()); 362 EXPECT_FALSE(timeSource->active());
363 EXPECT_EQ(1, client.numDraws()); 363 EXPECT_EQ(1, client.numDraws());
364 EXPECT_TRUE(scheduler->commitPending()); 364 EXPECT_TRUE(scheduler->commitPending());
365 scheduler->beginFrameComplete(); 365 scheduler->beginFrameComplete();
366 366
367 timeSource->tick(); 367 timeSource->tick();
368 EXPECT_EQ(2, client.numDraws()); 368 EXPECT_EQ(2, client.numDraws());
369 EXPECT_FALSE(timeSource->active()); 369 EXPECT_FALSE(timeSource->active());
370 EXPECT_FALSE(scheduler->redrawPending()); 370 EXPECT_FALSE(scheduler->redrawPending());
371 } 371 }
372 372
373 // Tests that when a draw fails then the pending commit should not be dropped. 373 // Tests that when a draw fails then the pending commit should not be dropped.
374 TEST(SchedulerTest, RequestCommitInsideFailedDraw) 374 TEST(SchedulerTest, RequestCommitInsideFailedDraw)
375 { 375 {
376 SchedulerClientThatSetNeedsDrawInsideDraw client; 376 SchedulerClientThatsetNeedsDrawInsideDraw client;
377 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); 377 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource());
378 SchedulerSettings defaultSchedulerSettings; 378 SchedulerSettings defaultSchedulerSettings;
379 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings); 379 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr (new FrameRateController(timeSource)), defaultSchedulerSettings);
380 client.setScheduler(scheduler.get()); 380 client.setScheduler(scheduler.get());
381 scheduler->setCanBeginFrame(true); 381 scheduler->setCanBeginFrame(true);
382 scheduler->setVisible(true); 382 scheduler->setVisible(true);
383 scheduler->setCanDraw(true); 383 scheduler->setCanDraw(true);
384 client.setDrawWillHappen(false); 384 client.setDrawWillHappen(false);
385 385
386 scheduler->setNeedsRedraw(); 386 scheduler->setNeedsRedraw();
(...skipping 22 matching lines...) Expand all
409 timeSource->tick(); 409 timeSource->tick();
410 EXPECT_EQ(3, client.numDraws()); 410 EXPECT_EQ(3, client.numDraws());
411 EXPECT_TRUE(scheduler->commitPending()); 411 EXPECT_TRUE(scheduler->commitPending());
412 EXPECT_FALSE(scheduler->redrawPending()); 412 EXPECT_FALSE(scheduler->redrawPending());
413 EXPECT_FALSE(timeSource->active()); 413 EXPECT_FALSE(timeSource->active());
414 } 414 }
415 415
416 TEST(SchedulerTest, NoBeginFrameWhenDrawFails) 416 TEST(SchedulerTest, NoBeginFrameWhenDrawFails)
417 { 417 {
418 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); 418 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource());
419 SchedulerClientThatSetNeedsCommitInsideDraw client; 419 SchedulerClientThatsetNeedsCommitInsideDraw client;
420 scoped_ptr<FakeFrameRateController> controller(new FakeFrameRateController(t imeSource)); 420 scoped_ptr<FakeFrameRateController> controller(new FakeFrameRateController(t imeSource));
421 FakeFrameRateController* controllerPtr = controller.get(); 421 FakeFrameRateController* controllerPtr = controller.get();
422 SchedulerSettings defaultSchedulerSettings; 422 SchedulerSettings defaultSchedulerSettings;
423 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, controller.Pass As<FrameRateController>(), defaultSchedulerSettings); 423 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, controller.Pass As<FrameRateController>(), defaultSchedulerSettings);
424 client.setScheduler(scheduler.get()); 424 client.setScheduler(scheduler.get());
425 scheduler->setCanBeginFrame(true); 425 scheduler->setCanBeginFrame(true);
426 scheduler->setVisible(true); 426 scheduler->setVisible(true);
427 scheduler->setCanDraw(true); 427 scheduler->setCanDraw(true);
428 428
429 EXPECT_EQ(0, controllerPtr->numFramesPending()); 429 EXPECT_EQ(0, controllerPtr->numFramesPending());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 scheduler->setNeedsRedraw(); 470 scheduler->setNeedsRedraw();
471 scheduler->setNeedsForcedRedraw(); 471 scheduler->setNeedsForcedRedraw();
472 EXPECT_TRUE(client.hasAction("scheduledActionDrawAndSwapForced")); 472 EXPECT_TRUE(client.hasAction("scheduledActionDrawAndSwapForced"));
473 473
474 // We should not have told the frame rate controller that we began a frame. 474 // We should not have told the frame rate controller that we began a frame.
475 EXPECT_EQ(0, controllerPtr->numFramesPending()); 475 EXPECT_EQ(0, controllerPtr->numFramesPending());
476 } 476 }
477 477
478 } // namespace 478 } // namespace
479 } // namespace cc 479 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler_state_machine_unittest.cc ('k') | cc/scrollbar_animation_controller_linear_fade.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698