Commit 119bc604 authored by Greg Kraynov's avatar Greg Kraynov Committed by Commit Bot

Move SequenceManager interface to //base/sequence_manager.

Bug: 783309
Change-Id: I0e32bfa8001ceb6be444b99852ca73f38dec8bbc
Reviewed-on: https://chromium-review.googlesource.com/1102682Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Reviewed-by: default avatarSami Kyöstilä <skyostil@chromium.org>
Reviewed-by: default avatarGabriel Charette <gab@chromium.org>
Commit-Queue: Greg Kraynov <kraynov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568804}
parent ae13ec53
......@@ -816,6 +816,7 @@ jumbo_component("base") {
"task/sequence_manager/lazily_deallocated_deque.h",
"task/sequence_manager/lazy_now.cc",
"task/sequence_manager/lazy_now.h",
"task/sequence_manager/sequence_manager.h",
"task/sequence_manager/sequenced_task_source.h",
"task/sequence_manager/task_queue.h",
"task/sequence_manager/task_time_observer.h",
......
......@@ -2,28 +2,28 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_SEQUENCE_MANAGER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_SEQUENCE_MANAGER_H_
#ifndef BASE_TASK_SEQUENCE_MANAGER_SEQUENCE_MANAGER_H_
#define BASE_TASK_SEQUENCE_MANAGER_SEQUENCE_MANAGER_H_
#include <memory>
#include <utility>
#include "base/message_loop/message_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/task/sequence_manager/task_queue_impl.h"
#include "base/task/sequence_manager/task_time_observer.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/time_domain.h"
namespace base {
namespace sequence_manager {
class TimeDomain;
// SequenceManager manages TaskQueues which have different properties
// (e.g. priority, common task type) multiplexing all posted tasks into
// a single backing sequence (currently bound to a single thread, which is
// refererred as *main thread* in the comments below). SequenceManager
// implementation can be used in a various ways to apply scheduling logic.
class PLATFORM_EXPORT SequenceManager {
class SequenceManager {
public:
class Observer {
public:
......@@ -35,11 +35,13 @@ class PLATFORM_EXPORT SequenceManager {
virtual ~SequenceManager() = default;
// Create SequenceManager using MessageLoop on the current thread.
static std::unique_ptr<SequenceManager> CreateOnCurrentThread();
// TODO(kraynov): Bring back CreateOnCurrentThread static method here
// when the move is done. It's not here yet to reduce PLATFORM_EXPORT
// macros hacking during the move.
// Must be called once, on the main thread.
// Observer is expected to outlive the SequenceManager.
// Must be called on the main thread.
// Can be called only once, before creating TaskQueues.
// Observer must outlive the SequenceManager.
virtual void SetObserver(Observer* observer) = 0;
// Must be called on the main thread.
......@@ -48,7 +50,10 @@ class PLATFORM_EXPORT SequenceManager {
virtual void AddTaskTimeObserver(TaskTimeObserver* task_time_observer) = 0;
virtual void RemoveTaskTimeObserver(TaskTimeObserver* task_time_observer) = 0;
// TaskQueues have their TimeDomain which must be registered in advance.
// Registers a TimeDomain with SequenceManager.
// TaskQueues must only be created with a registered TimeDomain.
// Conversely, any TimeDomain must remain registered until no
// TaskQueues (using that TimeDomain) remain.
virtual void RegisterTimeDomain(TimeDomain* time_domain) = 0;
virtual void UnregisterTimeDomain(TimeDomain* time_domain) = 0;
......@@ -64,8 +69,8 @@ class PLATFORM_EXPORT SequenceManager {
// Removes all canceled delayed tasks.
virtual void SweepCanceledDelayedTasks() = 0;
// Some TaskQueues do monitor a quiescent state, so this method returns
// true if any such queue has ran a task since the last call.
// Returns true if no tasks were executed in TaskQueues that monitor
// quiescence since the last call to this method.
virtual bool GetAndClearSystemIsQuiescentBit() = 0;
// Set the number of tasks executed in a single SequenceManager invocation.
......@@ -73,6 +78,9 @@ class PLATFORM_EXPORT SequenceManager {
// logic at the cost of a potentially worse latency. 1 by default.
virtual void SetWorkBatchSize(int work_batch_size) = 0;
// Enables crash keys that can be set in the scope of a task which help
// to identify the culprit if upcoming work results in a crash.
// Key names must be thread-specific to avoid races and corrupted crash dumps.
virtual void EnableCrashKeys(const char* file_name_crash_key,
const char* function_name_crash_key) = 0;
......@@ -86,9 +94,8 @@ class PLATFORM_EXPORT SequenceManager {
template <typename TaskQueueType, typename... Args>
scoped_refptr<TaskQueueType> CreateTaskQueue(const TaskQueue::Spec& spec,
Args&&... args) {
scoped_refptr<TaskQueueType> task_queue(new TaskQueueType(
CreateTaskQueueImpl(spec), spec, std::forward<Args>(args)...));
return task_queue;
return WrapRefCounted(new TaskQueueType(CreateTaskQueueImpl(spec), spec,
std::forward<Args>(args)...));
}
protected:
......@@ -99,4 +106,4 @@ class PLATFORM_EXPORT SequenceManager {
} // namespace sequence_manager
} // namespace base
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_SEQUENCE_MANAGER_H_
#endif // BASE_TASK_SEQUENCE_MANAGER_SEQUENCE_MANAGER_H_
......@@ -12,7 +12,7 @@ blink_platform_sources("scheduler") {
"base/graceful_queue_shutdown_helper.h",
"base/real_time_domain.cc",
"base/real_time_domain.h",
"base/sequence_manager.h",
"base/sequence_manager_forward.h",
"base/task_queue.cc",
"base/task_queue_forward.h",
"base/task_queue_impl.cc",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_SEQUENCE_MANAGER_FORWARD_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_SEQUENCE_MANAGER_FORWARD_H_
// TODO(kraynov): Remove this header after the move.
// Must be included first.
#include "third_party/blink/renderer/platform/platform_export.h"
#define HACKDEF_INCLUDED_FROM_BLINK
// It also includes task_queue_impl.h which has PLATFORM_EXPORT macros.
#include "base/task/sequence_manager/sequence_manager.h"
#undef HACKDEF_INCLUDED_FROM_BLINK
namespace base {
namespace sequence_manager {
// Create SequenceManager using MessageLoop on the current thread.
// implementation is located in task_queue_manager_impl.cc.
// TODO(kraynov): Move to SequenceManager class.
// TODO(scheduler-dev): Rename to TakeOverCurrentThread when we'll stop using
// MessageLoop and will actually take over a thread.
PLATFORM_EXPORT std::unique_ptr<SequenceManager>
CreateSequenceManagerOnCurrentThread();
} // namespace sequence_manager
} // namespace base
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_SEQUENCE_MANAGER_FORWARD_H_
......@@ -50,8 +50,7 @@ void SweepCanceledDelayedTasksInQueue(
} // namespace
// static
std::unique_ptr<SequenceManager> SequenceManager::CreateOnCurrentThread() {
std::unique_ptr<SequenceManager> CreateSequenceManagerOnCurrentThread() {
return TaskQueueManagerImpl::CreateOnCurrentThread();
}
......
......@@ -30,7 +30,7 @@
#include "base/task/sequence_manager/thread_controller.h"
#include "base/threading/thread_checker.h"
#include "third_party/blink/renderer/platform/scheduler/base/graceful_queue_shutdown_helper.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_selector.h"
......
......@@ -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/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include <stddef.h>
#include <memory>
......
......@@ -9,7 +9,7 @@
#include "base/memory/ptr_util.h"
#include "base/test/simple_test_tick_clock.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/work_queue.h"
......
......@@ -107,7 +107,7 @@ class WebThreadForCompositor : public WebThreadImplForWorkerScheduler {
CreateNonMainThreadScheduler() override {
return std::make_unique<CompositorThreadScheduler>(
GetThread(),
base::sequence_manager::SequenceManager::CreateOnCurrentThread());
base::sequence_manager::CreateSequenceManagerOnCurrentThread());
}
DISALLOW_COPY_AND_ASSIGN(WebThreadForCompositor);
......
......@@ -7,8 +7,9 @@
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/trace_event_argument.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/time_domain.h"
#include "third_party/blink/renderer/platform/scheduler/child/task_queue_with_task_type.h"
#include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
......
......@@ -15,9 +15,10 @@
#include "components/viz/test/ordered_simple_task_runner.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
#include "third_party/blink/renderer/platform/scheduler/base/time_domain.h"
#include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h"
......
......@@ -12,7 +12,7 @@
#include "base/message_loop/message_loop.h"
#include "base/time/tick_clock.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_selector.h"
namespace blink {
......
......@@ -15,7 +15,7 @@
#include "components/viz/test/ordered_simple_task_runner.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
#include "third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool.h"
......
......@@ -28,7 +28,7 @@ WebThreadScheduler::CreateMainThreadScheduler(
std::unique_ptr<MainThreadSchedulerImpl> scheduler(
new MainThreadSchedulerImpl(
base::sequence_manager::SequenceManager::CreateOnCurrentThread(),
base::sequence_manager::CreateSequenceManagerOnCurrentThread(),
initial_virtual_time));
return std::move(scheduler);
}
......
......@@ -9,7 +9,7 @@
#include "base/test/test_mock_time_task_runner.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h"
#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h"
......
......@@ -10,7 +10,7 @@
#include "base/test/scoped_task_environment.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h"
......
......@@ -25,7 +25,7 @@ std::unique_ptr<NonMainThreadSchedulerImpl> NonMainThreadSchedulerImpl::Create(
WorkerSchedulerProxy* proxy) {
return std::make_unique<WorkerThreadScheduler>(
thread_type,
base::sequence_manager::SequenceManager::CreateOnCurrentThread(), proxy);
base::sequence_manager::CreateSequenceManagerOnCurrentThread(), proxy);
}
void NonMainThreadSchedulerImpl::Init() {
......
......@@ -78,7 +78,7 @@ class WebThreadImplForWorkerSchedulerForTest
std::unique_ptr<NonMainThreadSchedulerImpl> CreateNonMainThreadScheduler()
override {
auto scheduler = std::make_unique<WorkerThreadSchedulerForTest>(
base::sequence_manager::SequenceManager::CreateOnCurrentThread(),
base::sequence_manager::CreateSequenceManagerOnCurrentThread(),
worker_scheduler_proxy(), throtting_state_changed_);
scheduler_ = scheduler.get();
worker_scheduler_ = std::make_unique<scheduler::WorkerScheduler>(
......
......@@ -14,7 +14,7 @@
#include "base/trace_event/trace_event.h"
#include "base/trace_event/trace_event_argument.h"
#include "third_party/blink/renderer/platform/histogram.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/base/task_queue_forward.h"
#include "third_party/blink/renderer/platform/scheduler/child/features.h"
#include "third_party/blink/renderer/platform/scheduler/child/task_queue_with_task_type.h"
......
......@@ -49,7 +49,7 @@
#include "third_party/blink/renderer/platform/loader/fetch/fetch_initiator_type_names.h"
#include "third_party/blink/renderer/platform/network/http_names.h"
#include "third_party/blink/renderer/platform/network/mime/mock_mime_registry.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager.h"
#include "third_party/blink/renderer/platform/scheduler/base/sequence_manager_forward.h"
#include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
#include "third_party/blink/renderer/platform/wtf/allocator/partitions.h"
#include "third_party/blink/renderer/platform/wtf/wtf.h"
......
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