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

Unified Diff: content/renderer/scheduler/renderer_scheduler_impl_unittest.cc

Issue 1025323003: Introduce a SchedulerHelper in content/child/scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
diff --git a/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc b/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
index 870be4a086a5ff9e3ca6eeb246f589431cccbbbb..bbb39a210b51d0c499fd64f4858e70cce8370bb1 100644
--- a/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
+++ b/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc
@@ -7,8 +7,8 @@
#include "base/callback.h"
#include "cc/output/begin_frame_args.h"
#include "cc/test/ordered_simple_task_runner.h"
-#include "content/renderer/scheduler/nestable_task_runner_for_test.h"
-#include "content/renderer/scheduler/renderer_scheduler_message_loop_delegate.h"
+#include "content/child/scheduler/nestable_task_runner_for_test.h"
+#include "content/child/scheduler/scheduler_message_loop_delegate.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -40,6 +40,85 @@ void AppendToVectorIdleTestTask(std::vector<std::string>* vector,
AppendToVectorTestTask(vector, value);
}
+void NullTask() {
+}
+
+void AppendToVectorReentrantTask(
+ base::SingleThreadTaskRunner* task_runner,
+ std::vector<int>* vector,
+ int* reentrant_count,
+ int max_reentrant_count) {
+ vector->push_back((*reentrant_count)++);
+ if (*reentrant_count < max_reentrant_count) {
+ task_runner->PostTask(
+ FROM_HERE, base::Bind(AppendToVectorReentrantTask,
+ base::Unretained(task_runner), vector,
+ reentrant_count, max_reentrant_count));
+ }
+}
+
+void IdleTestTask(int* run_count,
+ base::TimeTicks* deadline_out,
+ base::TimeTicks deadline) {
+ (*run_count)++;
+ *deadline_out = deadline;
+}
+
+int max_idle_task_reposts = 2;
+
+void RepostingIdleTestTask(
+ SingleThreadIdleTaskRunner* idle_task_runner,
+ int* run_count,
+ base::TimeTicks deadline) {
+ if ((*run_count + 1) < max_idle_task_reposts) {
+ idle_task_runner->PostIdleTask(
+ FROM_HERE,
+ base::Bind(&RepostingIdleTestTask, base::Unretained(idle_task_runner),
+ run_count));
+ }
+ (*run_count)++;
+}
+
+void UpdateClockToDeadlineIdleTestTask(
+ cc::TestNowSource* clock,
+ base::SingleThreadTaskRunner* task_runner,
+ int* run_count,
+ base::TimeTicks deadline) {
+ clock->SetNow(deadline);
+ // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact
+ // that we updated the time within a task, the delayed pending task to call
+ // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so
+ // post a normal task here to ensure it runs before the next idle task.
+ task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
+ (*run_count)++;
+}
+
+void PostingYieldingTestTask(
+ RendererSchedulerImpl* scheduler,
+ base::SingleThreadTaskRunner* task_runner,
+ bool simulate_input,
+ bool* should_yield_before,
+ bool* should_yield_after) {
+ *should_yield_before = scheduler->ShouldYieldForHighPriorityWork();
+ task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
+ if (simulate_input) {
+ scheduler->DidReceiveInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
+ }
+ *should_yield_after = scheduler->ShouldYieldForHighPriorityWork();
+}
+
+void AnticipationTestTask(RendererSchedulerImpl* scheduler,
+ bool simulate_input,
+ bool* is_anticipated_before,
+ bool* is_anticipated_after) {
+ *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated();
+ if (simulate_input) {
+ scheduler->DidReceiveInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
+ }
+ *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated();
+}
}; // namespace
class RendererSchedulerImplTest : public testing::Test {
@@ -63,7 +142,7 @@ class RendererSchedulerImplTest : public testing::Test {
: clock_(cc::TestNowSource::Create(5000)),
message_loop_(message_loop),
nestable_task_runner_(
- RendererSchedulerMessageLoopDelegate::Create(message_loop)),
+ SchedulerMessageLoopDelegate::Create(message_loop)),
scheduler_(new RendererSchedulerImpl(nestable_task_runner_)),
default_task_runner_(scheduler_->DefaultTaskRunner()),
compositor_task_runner_(scheduler_->CompositorTaskRunner()),
@@ -160,13 +239,7 @@ class RendererSchedulerImplTest : public testing::Test {
static base::TimeDelta maximum_idle_period_duration() {
return base::TimeDelta::FromMilliseconds(
- RendererSchedulerImpl::kMaximumIdlePeriodMillis);
- }
-
- base::TimeTicks CurrentIdleTaskDeadline() {
- base::TimeTicks deadline;
- scheduler_->CurrentIdleTaskDeadlineCallback(&deadline);
- return deadline;
+ SchedulerHelper::kMaximumIdlePeriodMillis);
}
scoped_refptr<cc::TestNowSource> clock_;
@@ -184,82 +257,6 @@ class RendererSchedulerImplTest : public testing::Test {
DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest);
};
-void NullTask() {
-}
-
-void AppendToVectorReentrantTask(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- std::vector<int>* vector,
- int* reentrant_count,
- int max_reentrant_count) {
- vector->push_back((*reentrant_count)++);
- if (*reentrant_count < max_reentrant_count) {
- task_runner->PostTask(
- FROM_HERE, base::Bind(AppendToVectorReentrantTask, task_runner, vector,
- reentrant_count, max_reentrant_count));
- }
-}
-
-void IdleTestTask(int* run_count,
- base::TimeTicks* deadline_out,
- base::TimeTicks deadline) {
- (*run_count)++;
- *deadline_out = deadline;
-}
-
-void RepostingIdleTestTask(
- scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner,
- int* run_count,
- base::TimeTicks deadline) {
- if (*run_count == 0) {
- idle_task_runner->PostIdleTask(
- FROM_HERE,
- base::Bind(&RepostingIdleTestTask, idle_task_runner, run_count));
- }
- (*run_count)++;
-}
-
-void UpdateClockToDeadlineIdleTestTask(
- scoped_refptr<cc::TestNowSource> clock,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- int* run_count,
- base::TimeTicks deadline) {
- clock->SetNow(deadline);
- // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact
- // that we updated the time within a task, the delayed pending task to call
- // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so
- // post a normal task here to ensure it runs before the next idle task.
- task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
- (*run_count)++;
-}
-
-void PostingYieldingTestTask(
- RendererSchedulerImpl* scheduler,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- bool simulate_input,
- bool* should_yield_before,
- bool* should_yield_after) {
- *should_yield_before = scheduler->ShouldYieldForHighPriorityWork();
- task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
- if (simulate_input) {
- scheduler->DidReceiveInputEventOnCompositorThread(
- FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
- }
- *should_yield_after = scheduler->ShouldYieldForHighPriorityWork();
-}
-
-void AnticipationTestTask(RendererSchedulerImpl* scheduler,
- bool simulate_input,
- bool* is_anticipated_before,
- bool* is_anticipated_after) {
- *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated();
- if (simulate_input) {
- scheduler->DidReceiveInputEventOnCompositorThread(
- FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
- }
- *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated();
-}
-
TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) {
std::vector<std::string> run_order;
PostTestTasks(&run_order, "D1 D2 D3 D4");
@@ -326,6 +323,7 @@ TEST_F(RendererSchedulerImplTest, TestPostIdleTask) {
TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) {
int run_count = 0;
+ max_idle_task_reposts = 2;
idle_task_runner_->PostIdleTask(
FROM_HERE,
base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
@@ -1162,6 +1160,7 @@ TEST_F(RendererSchedulerImplTest,
TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) {
int run_count = 0;
+ max_idle_task_reposts = 3;
idle_task_runner_->PostIdleTask(
FROM_HERE,
base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
@@ -1196,11 +1195,13 @@ TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) {
// there are no idle tasks and no other task woke up the scheduler, thus
// the idle period deadline shouldn't update at the end of the current long
// idle period.
- base::TimeTicks idle_period_deadline = CurrentIdleTaskDeadline();
+ base::TimeTicks idle_period_deadline =
+ scheduler_->CurrentIdleTaskDeadlineForTesting();
clock_->AdvanceNow(maximum_idle_period_duration());
RunUntilIdle();
- base::TimeTicks new_idle_period_deadline = CurrentIdleTaskDeadline();
+ base::TimeTicks new_idle_period_deadline =
+ scheduler_->CurrentIdleTaskDeadlineForTesting();
EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
// Posting a after-wakeup idle task also shouldn't wake the scheduler or
@@ -1209,14 +1210,14 @@ TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) {
FROM_HERE,
base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
RunUntilIdle();
- new_idle_period_deadline = CurrentIdleTaskDeadline();
+ new_idle_period_deadline = scheduler_->CurrentIdleTaskDeadlineForTesting();
EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
EXPECT_EQ(0, run_count);
// Running a normal task should initiate a new long idle period though.
default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
RunUntilIdle();
- new_idle_period_deadline = CurrentIdleTaskDeadline();
+ new_idle_period_deadline = scheduler_->CurrentIdleTaskDeadlineForTesting();
EXPECT_EQ(idle_period_deadline + maximum_idle_period_duration(),
new_idle_period_deadline);

Powered by Google App Engine
This is Rietveld 408576698