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

Side by Side Diff: content/renderer/scheduler/renderer_scheduler_impl_unittest.cc

Issue 902783003: MouseMove when the mouse is down to signal compositor priority (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 10 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/renderer/scheduler/renderer_scheduler_impl.h" 5 #include "content/renderer/scheduler/renderer_scheduler_impl.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "cc/output/begin_frame_args.h" 8 #include "cc/output/begin_frame_args.h"
9 #include "cc/test/ordered_simple_task_runner.h" 9 #include "cc/test/ordered_simple_task_runner.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace content { 13 namespace content {
14 14
15 namespace {
16 class FakeInputEvent : public blink::WebInputEvent {
17 public:
18 explicit FakeInputEvent(blink::WebInputEvent::Type event_type)
19 : WebInputEvent(sizeof(FakeInputEvent)) {
20 type = event_type;
21 }
22
23 FakeInputEvent(blink::WebInputEvent::Type event_type, int event_modifiers)
24 : WebInputEvent(sizeof(FakeInputEvent)) {
25 type = event_type;
26 modifiers = event_modifiers;
27 }
28 };
29 }; // namespace
30
15 class RendererSchedulerImplTest : public testing::Test { 31 class RendererSchedulerImplTest : public testing::Test {
16 public: 32 public:
17 RendererSchedulerImplTest() 33 RendererSchedulerImplTest()
18 : clock_(cc::TestNowSource::Create(5000)), 34 : clock_(cc::TestNowSource::Create(5000)),
19 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)), 35 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)),
20 scheduler_(new RendererSchedulerImpl(mock_task_runner_)), 36 scheduler_(new RendererSchedulerImpl(mock_task_runner_)),
21 default_task_runner_(scheduler_->DefaultTaskRunner()), 37 default_task_runner_(scheduler_->DefaultTaskRunner()),
22 compositor_task_runner_(scheduler_->CompositorTaskRunner()), 38 compositor_task_runner_(scheduler_->CompositorTaskRunner()),
23 loading_task_runner_(scheduler_->LoadingTaskRunner()), 39 loading_task_runner_(scheduler_->LoadingTaskRunner()),
24 idle_task_runner_(scheduler_->IdleTaskRunner()) { 40 idle_task_runner_(scheduler_->IdleTaskRunner()) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 void PostingYieldingTestTask( 141 void PostingYieldingTestTask(
126 RendererSchedulerImpl* scheduler, 142 RendererSchedulerImpl* scheduler,
127 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 143 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
128 bool simulate_input, 144 bool simulate_input,
129 bool* should_yield_before, 145 bool* should_yield_before,
130 bool* should_yield_after) { 146 bool* should_yield_after) {
131 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork(); 147 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork();
132 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); 148 task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
133 if (simulate_input) { 149 if (simulate_input) {
134 scheduler->DidReceiveInputEventOnCompositorThread( 150 scheduler->DidReceiveInputEventOnCompositorThread(
135 blink::WebInputEvent::GestureFlingStart); 151 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
136 } 152 }
137 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork(); 153 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork();
138 } 154 }
139 155
140 void AnticipationTestTask(RendererSchedulerImpl* scheduler, 156 void AnticipationTestTask(RendererSchedulerImpl* scheduler,
141 bool simulate_input, 157 bool simulate_input,
142 bool* is_anticipated_before, 158 bool* is_anticipated_before,
143 bool* is_anticipated_after) { 159 bool* is_anticipated_after) {
144 *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated(); 160 *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated();
145 if (simulate_input) { 161 if (simulate_input) {
146 scheduler->DidReceiveInputEventOnCompositorThread( 162 scheduler->DidReceiveInputEventOnCompositorThread(
147 blink::WebInputEvent::GestureFlingStart); 163 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
148 } 164 }
149 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated(); 165 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated();
150 } 166 }
151 167
152 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { 168 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) {
153 int result = 0; 169 int result = 0;
154 default_task_runner_->PostTask(FROM_HERE, 170 default_task_runner_->PostTask(FROM_HERE,
155 base::Bind(OrderedTestTask, 1, &result)); 171 base::Bind(OrderedTestTask, 1, &result));
156 default_task_runner_->PostTask(FROM_HERE, 172 default_task_runner_->PostTask(FROM_HERE,
157 base::Bind(OrderedTestTask, 2, &result)); 173 base::Bind(OrderedTestTask, 2, &result));
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 FROM_HERE, 358 FROM_HERE,
343 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); 359 base::Bind(&AppendToVectorTestTask, &order, std::string("C1")));
344 default_task_runner_->PostTask( 360 default_task_runner_->PostTask(
345 FROM_HERE, 361 FROM_HERE,
346 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); 362 base::Bind(&AppendToVectorTestTask, &order, std::string("D2")));
347 compositor_task_runner_->PostTask( 363 compositor_task_runner_->PostTask(
348 FROM_HERE, 364 FROM_HERE,
349 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); 365 base::Bind(&AppendToVectorTestTask, &order, std::string("C2")));
350 366
351 scheduler_->DidReceiveInputEventOnCompositorThread( 367 scheduler_->DidReceiveInputEventOnCompositorThread(
352 blink::WebInputEvent::GestureFlingStart); 368 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
353 EnableIdleTasks(); 369 EnableIdleTasks();
354 RunUntilIdle(); 370 RunUntilIdle();
355 EXPECT_THAT(order, testing::ElementsAre( 371 EXPECT_THAT(order, testing::ElementsAre(
356 std::string("C1"), std::string("C2"), std::string("D1"), 372 std::string("C1"), std::string("C2"), std::string("D1"),
357 std::string("D2"), std::string("L1"), std::string("I1"))); 373 std::string("D2"), std::string("L1"), std::string("I1")));
358 } 374 }
359 375
360 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) { 376 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) {
361 std::vector<std::string> order; 377 std::vector<std::string> order;
362 378
(...skipping 15 matching lines...) Expand all
378 394
379 scheduler_->DidAnimateForInputOnCompositorThread(); 395 scheduler_->DidAnimateForInputOnCompositorThread();
380 EnableIdleTasks(); 396 EnableIdleTasks();
381 RunUntilIdle(); 397 RunUntilIdle();
382 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("C2"), 398 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("C2"),
383 std::string("D1"), std::string("D2"), 399 std::string("D1"), std::string("D2"),
384 std::string("I1"))); 400 std::string("I1")));
385 } 401 }
386 402
387 TEST_F(RendererSchedulerImplTest, 403 TEST_F(RendererSchedulerImplTest,
388 DidReceiveInputEventOnCompositorThread_IgnoresMouseEvents) { 404 DidReceiveInputEventOnCompositorThread_IgnoresMouseMove_WhenMouseUp) {
389 std::vector<std::string> order; 405 std::vector<std::string> order;
390 406
391 idle_task_runner_->PostIdleTask( 407 idle_task_runner_->PostIdleTask(
392 FROM_HERE, 408 FROM_HERE,
393 base::Bind(&AppendToVectorIdleTestTask, &order, std::string("I1"))); 409 base::Bind(&AppendToVectorIdleTestTask, &order, std::string("I1")));
394 default_task_runner_->PostTask( 410 default_task_runner_->PostTask(
395 FROM_HERE, 411 FROM_HERE,
396 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); 412 base::Bind(&AppendToVectorTestTask, &order, std::string("D1")));
397 compositor_task_runner_->PostTask( 413 compositor_task_runner_->PostTask(
398 FROM_HERE, 414 FROM_HERE,
399 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); 415 base::Bind(&AppendToVectorTestTask, &order, std::string("C1")));
400 default_task_runner_->PostTask( 416 default_task_runner_->PostTask(
401 FROM_HERE, 417 FROM_HERE,
402 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); 418 base::Bind(&AppendToVectorTestTask, &order, std::string("D2")));
403 compositor_task_runner_->PostTask( 419 compositor_task_runner_->PostTask(
404 FROM_HERE, 420 FROM_HERE,
405 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); 421 base::Bind(&AppendToVectorTestTask, &order, std::string("C2")));
406 422
407 scheduler_->DidReceiveInputEventOnCompositorThread( 423 scheduler_->DidReceiveInputEventOnCompositorThread(
408 blink::WebInputEvent::MouseMove); 424 FakeInputEvent(blink::WebInputEvent::MouseMove));
409 EnableIdleTasks(); 425 EnableIdleTasks();
410 RunUntilIdle(); 426 RunUntilIdle();
411 // Note compositor tasks are not prioritized. 427 // Note compositor tasks are not prioritized.
412 EXPECT_THAT(order, testing::ElementsAre(std::string("D1"), std::string("C1"), 428 EXPECT_THAT(order, testing::ElementsAre(std::string("D1"), std::string("C1"),
413 std::string("D2"), std::string("C2"), 429 std::string("D2"), std::string("C2"),
414 std::string("I1"))); 430 std::string("I1")));
415 } 431 }
416 432
417 TEST_F(RendererSchedulerImplTest, 433 TEST_F(RendererSchedulerImplTest,
434 DidReceiveInputEventOnCompositorThread_MouseMove_WhenMouseDown) {
435 std::vector<std::string> order;
436
437 idle_task_runner_->PostIdleTask(
438 FROM_HERE,
439 base::Bind(&AppendToVectorIdleTestTask, &order, std::string("I1")));
440 default_task_runner_->PostTask(
441 FROM_HERE,
442 base::Bind(&AppendToVectorTestTask, &order, std::string("D1")));
443 compositor_task_runner_->PostTask(
444 FROM_HERE,
445 base::Bind(&AppendToVectorTestTask, &order, std::string("C1")));
446 default_task_runner_->PostTask(
447 FROM_HERE,
448 base::Bind(&AppendToVectorTestTask, &order, std::string("D2")));
449 compositor_task_runner_->PostTask(
450 FROM_HERE,
451 base::Bind(&AppendToVectorTestTask, &order, std::string("C2")));
452
453 scheduler_->DidReceiveInputEventOnCompositorThread(FakeInputEvent(
454 blink::WebInputEvent::MouseMove, blink::WebInputEvent::LeftButtonDown));
455 EnableIdleTasks();
456 RunUntilIdle();
457 // Note compositor tasks are not prioritized.
Sami 2015/02/10 14:02:45 s/are not/are/
458 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("C2"),
459 std::string("D1"), std::string("D2"),
460 std::string("I1")));
461 }
462
463 TEST_F(RendererSchedulerImplTest,
418 DidReceiveInputEventOnCompositorThread_IgnoresKeyboardEvents) { 464 DidReceiveInputEventOnCompositorThread_IgnoresKeyboardEvents) {
419 std::vector<std::string> order; 465 std::vector<std::string> order;
420 466
421 idle_task_runner_->PostIdleTask( 467 idle_task_runner_->PostIdleTask(
422 FROM_HERE, 468 FROM_HERE,
423 base::Bind(&AppendToVectorIdleTestTask, &order, std::string("I1"))); 469 base::Bind(&AppendToVectorIdleTestTask, &order, std::string("I1")));
424 default_task_runner_->PostTask( 470 default_task_runner_->PostTask(
425 FROM_HERE, 471 FROM_HERE,
426 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); 472 base::Bind(&AppendToVectorTestTask, &order, std::string("D1")));
427 compositor_task_runner_->PostTask( 473 compositor_task_runner_->PostTask(
428 FROM_HERE, 474 FROM_HERE,
429 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); 475 base::Bind(&AppendToVectorTestTask, &order, std::string("C1")));
430 default_task_runner_->PostTask( 476 default_task_runner_->PostTask(
431 FROM_HERE, 477 FROM_HERE,
432 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); 478 base::Bind(&AppendToVectorTestTask, &order, std::string("D2")));
433 compositor_task_runner_->PostTask( 479 compositor_task_runner_->PostTask(
434 FROM_HERE, 480 FROM_HERE,
435 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); 481 base::Bind(&AppendToVectorTestTask, &order, std::string("C2")));
436 482
437 scheduler_->DidReceiveInputEventOnCompositorThread( 483 scheduler_->DidReceiveInputEventOnCompositorThread(
438 blink::WebInputEvent::KeyDown); 484 FakeInputEvent(blink::WebInputEvent::KeyDown));
439 EnableIdleTasks(); 485 EnableIdleTasks();
440 RunUntilIdle(); 486 RunUntilIdle();
441 // Note compositor tasks are not prioritized. 487 // Note compositor tasks are not prioritized.
442 EXPECT_THAT(order, testing::ElementsAre(std::string("D1"), std::string("C1"), 488 EXPECT_THAT(order, testing::ElementsAre(std::string("D1"), std::string("C1"),
443 std::string("D2"), std::string("C2"), 489 std::string("D2"), std::string("C2"),
444 std::string("I1"))); 490 std::string("I1")));
445 } 491 }
446 492
447 TEST_F(RendererSchedulerImplTest, 493 TEST_F(RendererSchedulerImplTest,
448 TestCompositorPolicyDoesNotStarveDefaultTasks) { 494 TestCompositorPolicyDoesNotStarveDefaultTasks) {
449 std::vector<std::string> order; 495 std::vector<std::string> order;
450 496
451 default_task_runner_->PostTask( 497 default_task_runner_->PostTask(
452 FROM_HERE, 498 FROM_HERE,
453 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); 499 base::Bind(&AppendToVectorTestTask, &order, std::string("D1")));
454 compositor_task_runner_->PostTask( 500 compositor_task_runner_->PostTask(
455 FROM_HERE, 501 FROM_HERE,
456 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); 502 base::Bind(&AppendToVectorTestTask, &order, std::string("C1")));
457 for (int i = 0; i < 20; i++) { 503 for (int i = 0; i < 20; i++) {
458 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); 504 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
459 } 505 }
460 compositor_task_runner_->PostTask( 506 compositor_task_runner_->PostTask(
461 FROM_HERE, 507 FROM_HERE,
462 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); 508 base::Bind(&AppendToVectorTestTask, &order, std::string("C2")));
463 509
464 scheduler_->DidReceiveInputEventOnCompositorThread( 510 scheduler_->DidReceiveInputEventOnCompositorThread(
465 blink::WebInputEvent::GestureFlingStart); 511 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
466 RunUntilIdle(); 512 RunUntilIdle();
467 // Ensure that the default D1 task gets to run at some point before the final 513 // Ensure that the default D1 task gets to run at some point before the final
468 // C2 compositor task. 514 // C2 compositor task.
469 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("D1"), 515 EXPECT_THAT(order, testing::ElementsAre(std::string("C1"), std::string("D1"),
470 std::string("C2"))); 516 std::string("C2")));
471 } 517 }
472 518
473 TEST_F(RendererSchedulerImplTest, TestCompositorPolicyEnds) { 519 TEST_F(RendererSchedulerImplTest, TestCompositorPolicyEnds) {
474 std::vector<std::string> order; 520 std::vector<std::string> order;
475 521
476 default_task_runner_->PostTask( 522 default_task_runner_->PostTask(
477 FROM_HERE, 523 FROM_HERE,
478 base::Bind(&AppendToVectorTestTask, &order, std::string("D1"))); 524 base::Bind(&AppendToVectorTestTask, &order, std::string("D1")));
479 compositor_task_runner_->PostTask( 525 compositor_task_runner_->PostTask(
480 FROM_HERE, 526 FROM_HERE,
481 base::Bind(&AppendToVectorTestTask, &order, std::string("C1"))); 527 base::Bind(&AppendToVectorTestTask, &order, std::string("C1")));
482 default_task_runner_->PostTask( 528 default_task_runner_->PostTask(
483 FROM_HERE, 529 FROM_HERE,
484 base::Bind(&AppendToVectorTestTask, &order, std::string("D2"))); 530 base::Bind(&AppendToVectorTestTask, &order, std::string("D2")));
485 compositor_task_runner_->PostTask( 531 compositor_task_runner_->PostTask(
486 FROM_HERE, 532 FROM_HERE,
487 base::Bind(&AppendToVectorTestTask, &order, std::string("C2"))); 533 base::Bind(&AppendToVectorTestTask, &order, std::string("C2")));
488 534
489 scheduler_->DidReceiveInputEventOnCompositorThread( 535 scheduler_->DidReceiveInputEventOnCompositorThread(
490 blink::WebInputEvent::GestureFlingStart); 536 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
491 RunUntilIdle(); 537 RunUntilIdle();
492 EXPECT_THAT(order, 538 EXPECT_THAT(order,
493 testing::ElementsAre(std::string("C1"), std::string("C2"), 539 testing::ElementsAre(std::string("C1"), std::string("C2"),
494 std::string("D1"), std::string("D2"))); 540 std::string("D1"), std::string("D2")));
495 541
496 order.clear(); 542 order.clear();
497 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 543 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000));
498 544
499 default_task_runner_->PostTask( 545 default_task_runner_->PostTask(
500 FROM_HERE, 546 FROM_HERE,
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 FROM_HERE, base::Bind(&PostingYieldingTestTask, scheduler_.get(), 627 FROM_HERE, base::Bind(&PostingYieldingTestTask, scheduler_.get(),
582 compositor_task_runner_, true, &should_yield_before, 628 compositor_task_runner_, true, &should_yield_before,
583 &should_yield_after)); 629 &should_yield_after));
584 RunUntilIdle(); 630 RunUntilIdle();
585 // We should be able to switch to compositor priority mid-task. 631 // We should be able to switch to compositor priority mid-task.
586 EXPECT_FALSE(should_yield_before); 632 EXPECT_FALSE(should_yield_before);
587 EXPECT_TRUE(should_yield_after); 633 EXPECT_TRUE(should_yield_after);
588 } 634 }
589 635
590 } // namespace content 636 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/scheduler/renderer_scheduler_impl.cc ('k') | content/test/fake_renderer_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698