Commit 5784428a authored by Yuta Kitamura's avatar Yuta Kitamura Committed by Commit Bot

Move IdleTaskRunner() from WebThreadScheduler to ThreadSchedulerImpl.

The virtual function IdleTaskRunner() defined in WebThreadScheduler is
not used by anybody except the scheduler internal code, so it should be
defined in ThreadSchedulerImpl instead. Along with that function, the
header for SingleThreadIdleTaskRunner is moved to scheduler/common, as
it's only used in combination with IdleTaskRunner().

SingleThreadIdleTaskRunner uses base::RefCountedThreadSafe which is
banned, but this can't be replaced with WTF::ThreadSafeRefCounted,
because MainThreadSchedulerImpl having a SingleThreadIdleTaskRunner
is instantiated before PartitionAlloc is initialized. The presubmit
script is modified so it would allow the usage of base::RefCounted
just for this file.

Bug: 826203
Change-Id: I2ddcbe9a9a1af6bce5cd87e9d097be86641703fe
Reviewed-on: https://chromium-review.googlesource.com/c/1306951
Commit-Queue: Yuta Kitamura <yutak@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605273}
parent 67837e51
......@@ -8,6 +8,7 @@
#include "base/feature_list.h"
#include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h"
#include "base/timer/timer.h"
#include "cc/input/touch_action.h"
#include "content/common/content_export.h"
#include "content/common/input/input_event_dispatch_type.h"
......
......@@ -180,7 +180,6 @@ source_set("blink_headers") {
"platform/platform.h",
"platform/pointer_properties.h",
"platform/scheduler/renderer_process_type.h",
"platform/scheduler/single_thread_idle_task_runner.h",
"platform/scheduler/web_rail_mode_observer.h",
"platform/scheduler/web_render_widget_scheduling_state.h",
"platform/scheduler/web_resource_loading_task_runner_handle.h",
......
......@@ -24,7 +24,6 @@ class FakeRendererScheduler : public WebThreadScheduler {
scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> InputTaskRunner() override;
scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> IPCTaskRunner() override;
std::unique_ptr<WebRenderWidgetSchedulingState>
NewRenderWidgetSchedulingState() override;
......
......@@ -28,8 +28,6 @@ class MockRendererScheduler : public WebThreadScheduler {
MOCK_METHOD0(InputTaskRunner, scoped_refptr<base::SingleThreadTaskRunner>());
MOCK_METHOD0(LoadingTaskRunner,
scoped_refptr<base::SingleThreadTaskRunner>());
MOCK_METHOD0(IdleTaskRunner,
scoped_refptr<blink::scheduler::SingleThreadIdleTaskRunner>());
MOCK_METHOD0(IPCTaskRunner, scoped_refptr<base::SingleThreadTaskRunner>());
MOCK_METHOD0(NewRenderWidgetSchedulingState,
std::unique_ptr<WebRenderWidgetSchedulingState>());
......
......@@ -11,7 +11,6 @@
#include "base/single_thread_task_runner.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "third_party/blink/public/platform/scheduler/single_thread_idle_task_runner.h"
#include "third_party/blink/public/platform/scheduler/web_rail_mode_observer.h"
#include "third_party/blink/public/platform/scheduler/web_render_widget_scheduling_state.h"
#include "third_party/blink/public/platform/web_common.h"
......@@ -47,11 +46,6 @@ class BLINK_PLATFORM_EXPORT WebThreadScheduler {
//
// Functions below work on a scheduler instance on any thread.
// Returns the idle task runner. Tasks posted to this runner may be reordered
// relative to other task types and may be starved for an arbitrarily long
// time if no idle time is available.
virtual scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() = 0;
// Shuts down the scheduler by dropping any remaining pending work in the work
// queues. After this call any work posted to the task runners will be
// silently dropped.
......
......@@ -31,6 +31,7 @@ blink_platform_sources("scheduler") {
"common/simple_thread_scheduler.cc",
"common/simple_thread_scheduler.h",
"common/single_thread_idle_task_runner.cc",
"common/single_thread_idle_task_runner.h",
"common/thread.cc",
"common/thread_cpu_throttler.cc",
"common/thread_load_tracker.cc",
......
......@@ -7,8 +7,8 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "third_party/blink/public/platform/scheduler/single_thread_idle_task_runner.h"
#include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
#include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
namespace blink {
namespace scheduler {
......
......@@ -8,10 +8,10 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "third_party/blink/public/platform/scheduler/single_thread_idle_task_runner.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/scheduler/common/cancelable_closure_holder.h"
#include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
#include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
namespace blink {
namespace scheduler {
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/public/platform/scheduler/single_thread_idle_task_runner.h"
#include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
#include "base/location.h"
#include "base/single_thread_task_runner.h"
......
......@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_SINGLE_THREAD_IDLE_TASK_RUNNER_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_SINGLE_THREAD_IDLE_TASK_RUNNER_H_
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_SINGLE_THREAD_IDLE_TASK_RUNNER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_SINGLE_THREAD_IDLE_TASK_RUNNER_H_
#include <map>
......@@ -31,6 +31,13 @@ class IdleHelper;
// tasks have an unbound argument which is bound to a deadline
// (in base::TimeTicks) when they are run. The idle task is expected to
// complete by this deadline.
//
// This class uses base::RefCountedThreadSafe instead of WTF::ThreadSafe-
// RefCounted, which is against the general rule for code in platform/
// (see audit_non_blink_usage.py). This is because SingleThreadIdleTaskRunner
// is held by MainThreadSchedulerImpl and MainThreadSchedulerImpl is created
// before WTF (and PartitionAlloc) is initialized.
// TODO(yutak): Fix this.
class SingleThreadIdleTaskRunner
: public base::RefCountedThreadSafe<SingleThreadIdleTaskRunner> {
public:
......@@ -109,4 +116,4 @@ class SingleThreadIdleTaskRunner
} // namespace scheduler
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_SINGLE_THREAD_IDLE_TASK_RUNNER_H_
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_SINGLE_THREAD_IDLE_TASK_RUNNER_H_
......@@ -11,6 +11,7 @@
#include "base/single_thread_task_runner.h"
#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
#include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
namespace base {
......@@ -36,6 +37,11 @@ class PLATFORM_EXPORT ThreadSchedulerImpl : public ThreadScheduler,
// to hide the base classes' ones.
using RendererPauseHandle = WebThreadScheduler::RendererPauseHandle;
// Returns the idle task runner. Tasks posted to this runner may be reordered
// relative to other task types and may be starved for an arbitrarily long
// time if no idle time is available.
virtual scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() = 0;
virtual scoped_refptr<base::SingleThreadTaskRunner> ControlTaskRunner() = 0;
virtual void RegisterTimeDomain(
......
......@@ -161,7 +161,6 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
// WebThreadScheduler implementation:
std::unique_ptr<Thread> CreateMainThread() override;
scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override;
// Note: this is also shared by the ThreadScheduler interface.
scoped_refptr<base::SingleThreadTaskRunner> IPCTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> CleanupTaskRunner() override;
......@@ -252,6 +251,7 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
base::TimeDelta queueing_time) override;
// ThreadSchedulerImpl implementation:
scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> ControlTaskRunner() override;
void RegisterTimeDomain(
base::sequence_manager::TimeDomain* time_domain) override;
......
......@@ -36,11 +36,6 @@ FakeRendererScheduler::InputTaskRunner() {
return nullptr;
}
scoped_refptr<SingleThreadIdleTaskRunner>
FakeRendererScheduler::IdleTaskRunner() {
return nullptr;
}
scoped_refptr<base::SingleThreadTaskRunner>
FakeRendererScheduler::IPCTaskRunner() {
return nullptr;
......
......@@ -9,9 +9,9 @@
#include "base/message_loop/message_loop.h"
#include "base/single_thread_task_runner.h"
#include "components/scheduling_metrics/task_duration_metric_reporter.h"
#include "third_party/blink/public/platform/scheduler/single_thread_idle_task_runner.h"
#include "third_party/blink/public/platform/web_thread_type.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
#include "third_party/blink/renderer/platform/scheduler/worker/compositor_metrics_helper.h"
#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h"
......@@ -36,8 +36,6 @@ class PLATFORM_EXPORT CompositorThreadScheduler
task_timing) override;
// WebThreadScheduler:
scoped_refptr<scheduler::SingleThreadIdleTaskRunner> IdleTaskRunner()
override;
scoped_refptr<base::SingleThreadTaskRunner> V8TaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> IPCTaskRunner() override;
......@@ -50,6 +48,10 @@ class PLATFORM_EXPORT CompositorThreadScheduler
void AddRAILModeObserver(WebRAILModeObserver*) override {}
void Shutdown() override;
// ThreadSchedulerImpl:
scoped_refptr<scheduler::SingleThreadIdleTaskRunner> IdleTaskRunner()
override;
// SingleThreadIdleTaskRunner::Delegate:
void OnIdleTaskPosted() override;
base::TimeTicks WillProcessIdleTask() override;
......
......@@ -9,10 +9,10 @@
#include "base/macros.h"
#include "base/task/sequence_manager/task_queue.h"
#include "third_party/blink/public/platform/scheduler/single_thread_idle_task_runner.h"
#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
#include "third_party/blink/public/platform/web_thread_type.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h"
#include "third_party/blink/renderer/platform/scheduler/common/tracing_helper.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
......
......@@ -54,7 +54,6 @@ class PLATFORM_EXPORT WorkerThreadScheduler
~WorkerThreadScheduler() override;
// WebThreadScheduler implementation:
scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> V8TaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> IPCTaskRunner() override;
......@@ -66,6 +65,9 @@ class PLATFORM_EXPORT WorkerThreadScheduler
void AddRAILModeObserver(WebRAILModeObserver*) override {}
void Shutdown() override;
// ThreadSchedulerImpl implementation:
scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override;
// NonMainThreadSchedulerImpl implementation:
scoped_refptr<NonMainThreadTaskQueue> DefaultTaskQueue() override;
void OnTaskCompleted(NonMainThreadTaskQueue* worker_task_queue,
......
......@@ -436,6 +436,16 @@ _CONFIG = [
# WTF::RefCounted should be used instead.
'allowed': ['(?!base::RefCounted).+'],
},
{
'paths': [
'third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h',
],
# base::RefCounted is prohibited in platform/ as defined above, but
# SingleThreadIdleTaskRunner needs to be constructed before WTF and
# PartitionAlloc are initialized, which forces us to use
# base::RefCountedThreadSafe for it.
'allowed': ['.+'],
},
{
'paths': [
'third_party/blink/renderer/core/exported/',
......
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