Commit 79a25b83 authored by Hajime Hoshi's avatar Hajime Hoshi Committed by Commit Bot

Avoid creation of TaskQueueWithTaskType for each call of MainThreadSchedulerImpl's functions

After https://chromium-review.googlesource.com/c/chromium/src/+/1063670,
memory usages on some devices were slightly increased since
MainThreadSchedulerImpl::DefaultTaskRunner() or other functions created
a TaskQueueWithTaskType object for each call unnecessarily.

This CL fixes this problem by creating necessary objects at
MainThreadSchedulerImpl constructor.

Bug: 847942
Change-Id: I738fc0ac91c49131ef8ecdb68910c46afef09d8b
Reviewed-on: https://chromium-review.googlesource.com/1114405
Commit-Queue: Hajime Hoshi <hajimehoshi@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570370}
parent 0fd7aa29
......@@ -300,13 +300,6 @@ MainThreadSchedulerImpl::MainThreadSchedulerImpl(
any_thread_(this),
policy_may_need_update_(&any_thread_lock_),
weak_factory_(this) {
task_queue_throttler_.reset(
new TaskQueueThrottler(this, &tracing_controller_));
update_policy_closure_ = base::BindRepeating(
&MainThreadSchedulerImpl::UpdatePolicy, weak_factory_.GetWeakPtr());
end_renderer_hidden_idle_period_closure_.Reset(base::BindRepeating(
&MainThreadSchedulerImpl::EndIdlePeriod, weak_factory_.GetWeakPtr()));
// Compositor task queue and default task queue should be managed by
// WebThreadScheduler. Control task queue should not.
task_runners_.insert(
......@@ -326,6 +319,25 @@ MainThreadSchedulerImpl::MainThreadSchedulerImpl(
v8_task_queue_, TaskType::kMainThreadTaskQueueV8);
compositor_task_runner_ = TaskQueueWithTaskType::Create(
compositor_task_queue_, TaskType::kMainThreadTaskQueueCompositor);
control_task_runner_ =
TaskQueueWithTaskType::Create(helper_.ControlMainThreadTaskQueue(),
TaskType::kMainThreadTaskQueueControl);
default_task_runner_ =
TaskQueueWithTaskType::Create(helper_.DefaultMainThreadTaskQueue(),
TaskType::kMainThreadTaskQueueDefault);
input_task_runner_ = TaskQueueWithTaskType::Create(
input_task_queue_, TaskType::kMainThreadTaskQueueInput);
ipc_task_runner_ = TaskQueueWithTaskType::Create(
ipc_task_queue_, TaskType::kMainThreadTaskQueueIPC);
// TaskQueueThrottler requires some task runners, then initialize
// TaskQueueThrottler after task queues/runners are initialized.
task_queue_throttler_.reset(
new TaskQueueThrottler(this, &tracing_controller_));
update_policy_closure_ = base::BindRepeating(
&MainThreadSchedulerImpl::UpdatePolicy, weak_factory_.GetWeakPtr());
end_renderer_hidden_idle_period_closure_.Reset(base::BindRepeating(
&MainThreadSchedulerImpl::EndIdlePeriod, weak_factory_.GetWeakPtr()));
TRACE_EVENT_OBJECT_CREATED_WITH_ID(
TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "MainThreadScheduler",
......@@ -679,21 +691,18 @@ std::unique_ptr<blink::WebThread> MainThreadSchedulerImpl::CreateMainThread() {
scoped_refptr<base::SingleThreadTaskRunner>
MainThreadSchedulerImpl::ControlTaskRunner() {
return TaskQueueWithTaskType::Create(ControlTaskQueue(),
TaskType::kMainThreadTaskQueueControl);
return control_task_runner_;
}
scoped_refptr<base::SingleThreadTaskRunner>
MainThreadSchedulerImpl::DefaultTaskRunner() {
return TaskQueueWithTaskType::Create(helper_.DefaultMainThreadTaskQueue(),
TaskType::kMainThreadTaskQueueDefault);
return default_task_runner_;
}
scoped_refptr<base::SingleThreadTaskRunner>
MainThreadSchedulerImpl::InputTaskRunner() {
helper_.CheckOnValidThread();
return TaskQueueWithTaskType::Create(input_task_queue_,
TaskType::kMainThreadTaskQueueInput);
return input_task_runner_;
}
scoped_refptr<SingleThreadIdleTaskRunner>
......@@ -703,8 +712,7 @@ MainThreadSchedulerImpl::IdleTaskRunner() {
scoped_refptr<base::SingleThreadTaskRunner>
MainThreadSchedulerImpl::IPCTaskRunner() {
return TaskQueueWithTaskType::Create(ipc_task_queue_,
TaskType::kMainThreadTaskQueueIPC);
return ipc_task_runner_;
}
scoped_refptr<base::SingleThreadTaskRunner>
......
......@@ -747,6 +747,10 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
scoped_refptr<TaskQueueWithTaskType> v8_task_runner_;
scoped_refptr<TaskQueueWithTaskType> compositor_task_runner_;
scoped_refptr<TaskQueueWithTaskType> control_task_runner_;
scoped_refptr<TaskQueueWithTaskType> default_task_runner_;
scoped_refptr<TaskQueueWithTaskType> input_task_runner_;
scoped_refptr<TaskQueueWithTaskType> ipc_task_runner_;
// Note |virtual_time_domain_| is lazily created.
std::unique_ptr<AutoAdvancingVirtualTimeDomain> virtual_time_domain_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment