Commit b2e8e793 authored by Jesse McKenna's avatar Jesse McKenna Committed by Commit Bot

TaskScheduler: Move IntrusiveHeap from base/task/sequence_manager/ to base/task/common/

I am currently working on a change to TaskScheduler that will use IntrusiveHeap. This change is a no-op that simply moves IntrusiveHeap, previously used only by SequenceManager, into a common directory base/task/common/ for use by both SequenceManager and TaskScheduler.

Bug: 889029
Change-Id: I70cd900931dbabfd8d292228c87206a66c78a8d0
Reviewed-on: https://chromium-review.googlesource.com/c/1298076
Commit-Queue: Jesse McKenna <jessemckenna@google.com>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Reviewed-by: default avatarAlex Clarke <alexclarke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#602948}
parent 90d65da7
...@@ -731,6 +731,7 @@ jumbo_component("base") { ...@@ -731,6 +731,7 @@ jumbo_component("base") {
"system/system_monitor.h", "system/system_monitor.h",
"task/cancelable_task_tracker.cc", "task/cancelable_task_tracker.cc",
"task/cancelable_task_tracker.h", "task/cancelable_task_tracker.h",
"task/common/intrusive_heap.h",
"task/lazy_task_runner.cc", "task/lazy_task_runner.cc",
"task/lazy_task_runner.h", "task/lazy_task_runner.h",
"task/post_task.cc", "task/post_task.cc",
...@@ -740,7 +741,6 @@ jumbo_component("base") { ...@@ -740,7 +741,6 @@ jumbo_component("base") {
"task/sequence_manager/associated_thread_id.h", "task/sequence_manager/associated_thread_id.h",
"task/sequence_manager/enqueue_order.cc", "task/sequence_manager/enqueue_order.cc",
"task/sequence_manager/enqueue_order.h", "task/sequence_manager/enqueue_order.h",
"task/sequence_manager/intrusive_heap.h",
"task/sequence_manager/lazily_deallocated_deque.h", "task/sequence_manager/lazily_deallocated_deque.h",
"task/sequence_manager/lazy_now.cc", "task/sequence_manager/lazy_now.cc",
"task/sequence_manager/lazy_now.h", "task/sequence_manager/lazy_now.h",
...@@ -2435,10 +2435,10 @@ test("base_unittests") { ...@@ -2435,10 +2435,10 @@ test("base_unittests") {
"sys_info_unittest.cc", "sys_info_unittest.cc",
"system/system_monitor_unittest.cc", "system/system_monitor_unittest.cc",
"task/cancelable_task_tracker_unittest.cc", "task/cancelable_task_tracker_unittest.cc",
"task/common/intrusive_heap_unittest.cc",
"task/lazy_task_runner_unittest.cc", "task/lazy_task_runner_unittest.cc",
"task/post_task_unittest.cc", "task/post_task_unittest.cc",
"task/scoped_set_task_priority_for_current_thread_unittest.cc", "task/scoped_set_task_priority_for_current_thread_unittest.cc",
"task/sequence_manager/intrusive_heap_unittest.cc",
"task/sequence_manager/lazily_deallocated_deque_unittest.cc", "task/sequence_manager/lazily_deallocated_deque_unittest.cc",
"task/sequence_manager/sequence_manager_impl_unittest.cc", "task/sequence_manager/sequence_manager_impl_unittest.cc",
"task/sequence_manager/task_queue_selector_unittest.cc", "task/sequence_manager/task_queue_selector_unittest.cc",
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef BASE_TASK_SEQUENCE_MANAGER_INTRUSIVE_HEAP_H_ #ifndef BASE_TASK_COMMON_INTRUSIVE_HEAP_H_
#define BASE_TASK_SEQUENCE_MANAGER_INTRUSIVE_HEAP_H_ #define BASE_TASK_COMMON_INTRUSIVE_HEAP_H_
#include <algorithm> #include <algorithm>
#include <vector> #include <vector>
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "base/logging.h" #include "base/logging.h"
namespace base { namespace base {
namespace sequence_manager {
namespace internal { namespace internal {
template <typename T> template <typename T>
...@@ -228,7 +227,6 @@ class IntrusiveHeap { ...@@ -228,7 +227,6 @@ class IntrusiveHeap {
}; };
} // namespace internal } // namespace internal
} // namespace sequence_manager
} // namespace base } // namespace base
#endif // BASE_TASK_SEQUENCE_MANAGER_INTRUSIVE_HEAP_H_ #endif // BASE_TASK_COMMON_INTRUSIVE_HEAP_H_
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "base/task/sequence_manager/intrusive_heap.h" #include "base/task/common/intrusive_heap.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace base { namespace base {
namespace sequence_manager {
namespace internal { namespace internal {
namespace { namespace {
...@@ -386,5 +386,4 @@ TEST_F(IntrusiveHeapTest, At) { ...@@ -386,5 +386,4 @@ TEST_F(IntrusiveHeapTest, At) {
} }
} // namespace internal } // namespace internal
} // namespace sequence_manager
} // namespace base } // namespace base
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/pending_task.h" #include "base/pending_task.h"
#include "base/task/common/intrusive_heap.h"
#include "base/task/sequence_manager/associated_thread_id.h" #include "base/task/sequence_manager/associated_thread_id.h"
#include "base/task/sequence_manager/enqueue_order.h" #include "base/task/sequence_manager/enqueue_order.h"
#include "base/task/sequence_manager/intrusive_heap.h"
#include "base/task/sequence_manager/lazily_deallocated_deque.h" #include "base/task/sequence_manager/lazily_deallocated_deque.h"
#include "base/task/sequence_manager/sequenced_task_source.h" #include "base/task/sequence_manager/sequenced_task_source.h"
#include "base/task/sequence_manager/task_queue.h" #include "base/task/sequence_manager/task_queue.h"
...@@ -181,9 +181,11 @@ class BASE_EXPORT TaskQueueImpl { ...@@ -181,9 +181,11 @@ class BASE_EXPORT TaskQueueImpl {
// Must be called from the main thread. // Must be called from the main thread.
void WakeUpForDelayedWork(LazyNow* lazy_now); void WakeUpForDelayedWork(LazyNow* lazy_now);
HeapHandle heap_handle() const { return main_thread_only().heap_handle; } base::internal::HeapHandle heap_handle() const {
return main_thread_only().heap_handle;
}
void set_heap_handle(HeapHandle heap_handle) { void set_heap_handle(base::internal::HeapHandle heap_handle) {
main_thread_only().heap_handle = heap_handle; main_thread_only().heap_handle = heap_handle;
} }
...@@ -310,7 +312,7 @@ class BASE_EXPORT TaskQueueImpl { ...@@ -310,7 +312,7 @@ class BASE_EXPORT TaskQueueImpl {
DelayedIncomingQueue delayed_incoming_queue; DelayedIncomingQueue delayed_incoming_queue;
ObserverList<MessageLoop::TaskObserver>::Unchecked task_observers; ObserverList<MessageLoop::TaskObserver>::Unchecked task_observers;
size_t set_index; size_t set_index;
HeapHandle heap_handle; base::internal::HeapHandle heap_handle;
int is_enabled_refcount; int is_enabled_refcount;
int voter_refcount; int voter_refcount;
trace_event::BlameContext* blame_context; // Not owned. trace_event::BlameContext* blame_context; // Not owned.
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/task/sequence_manager/intrusive_heap.h" #include "base/task/common/intrusive_heap.h"
#include "base/task/sequence_manager/lazy_now.h" #include "base/task/sequence_manager/lazy_now.h"
#include "base/task/sequence_manager/task_queue_impl.h" #include "base/task/sequence_manager/task_queue_impl.h"
#include "base/time/time.h" #include "base/time/time.h"
...@@ -122,19 +122,19 @@ class BASE_EXPORT TimeDomain { ...@@ -122,19 +122,19 @@ class BASE_EXPORT TimeDomain {
return wake_up <= other.wake_up; return wake_up <= other.wake_up;
} }
void SetHeapHandle(internal::HeapHandle handle) { void SetHeapHandle(base::internal::HeapHandle handle) {
DCHECK(handle.IsValid()); DCHECK(handle.IsValid());
queue->set_heap_handle(handle); queue->set_heap_handle(handle);
} }
void ClearHeapHandle() { void ClearHeapHandle() {
DCHECK(queue->heap_handle().IsValid()); DCHECK(queue->heap_handle().IsValid());
queue->set_heap_handle(internal::HeapHandle()); queue->set_heap_handle(base::internal::HeapHandle());
} }
}; };
internal::SequenceManagerImpl* sequence_manager_; // Not owned. internal::SequenceManagerImpl* sequence_manager_; // Not owned.
internal::IntrusiveHeap<ScheduledDelayedWakeUp> delayed_wake_up_queue_; base::internal::IntrusiveHeap<ScheduledDelayedWakeUp> delayed_wake_up_queue_;
int pending_high_res_wake_up_count_ = 0; int pending_high_res_wake_up_count_ = 0;
scoped_refptr<internal::AssociatedThreadId> associated_thread_; scoped_refptr<internal::AssociatedThreadId> associated_thread_;
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
#define BASE_TASK_SEQUENCE_MANAGER_WORK_QUEUE_H_ #define BASE_TASK_SEQUENCE_MANAGER_WORK_QUEUE_H_
#include "base/base_export.h" #include "base/base_export.h"
#include "base/task/common/intrusive_heap.h"
#include "base/task/sequence_manager/enqueue_order.h" #include "base/task/sequence_manager/enqueue_order.h"
#include "base/task/sequence_manager/intrusive_heap.h"
#include "base/task/sequence_manager/sequenced_task_source.h" #include "base/task/sequence_manager/sequenced_task_source.h"
#include "base/task/sequence_manager/task_queue_impl.h" #include "base/task/sequence_manager/task_queue_impl.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
...@@ -96,9 +96,11 @@ class BASE_EXPORT WorkQueue { ...@@ -96,9 +96,11 @@ class BASE_EXPORT WorkQueue {
size_t work_queue_set_index() const { return work_queue_set_index_; } size_t work_queue_set_index() const { return work_queue_set_index_; }
HeapHandle heap_handle() const { return heap_handle_; } base::internal::HeapHandle heap_handle() const { return heap_handle_; }
void set_heap_handle(HeapHandle handle) { heap_handle_ = handle; } void set_heap_handle(base::internal::HeapHandle handle) {
heap_handle_ = handle;
}
QueueType queue_type() const { return queue_type_; } QueueType queue_type() const { return queue_type_; }
...@@ -142,7 +144,7 @@ class BASE_EXPORT WorkQueue { ...@@ -142,7 +144,7 @@ class BASE_EXPORT WorkQueue {
WorkQueueSets* work_queue_sets_ = nullptr; // NOT OWNED. WorkQueueSets* work_queue_sets_ = nullptr; // NOT OWNED.
TaskQueueImpl* const task_queue_; // NOT OWNED. TaskQueueImpl* const task_queue_; // NOT OWNED.
size_t work_queue_set_index_ = 0; size_t work_queue_set_index_ = 0;
HeapHandle heap_handle_; base::internal::HeapHandle heap_handle_;
const char* const name_; const char* const name_;
EnqueueOrder fence_; EnqueueOrder fence_;
const QueueType queue_type_; const QueueType queue_type_;
......
...@@ -30,7 +30,7 @@ void WorkQueueSets::AddQueue(WorkQueue* work_queue, size_t set_index) { ...@@ -30,7 +30,7 @@ void WorkQueueSets::AddQueue(WorkQueue* work_queue, size_t set_index) {
void WorkQueueSets::RemoveQueue(WorkQueue* work_queue) { void WorkQueueSets::RemoveQueue(WorkQueue* work_queue) {
DCHECK_EQ(this, work_queue->work_queue_sets()); DCHECK_EQ(this, work_queue->work_queue_sets());
work_queue->AssignToWorkQueueSets(nullptr); work_queue->AssignToWorkQueueSets(nullptr);
HeapHandle heap_handle = work_queue->heap_handle(); base::internal::HeapHandle heap_handle = work_queue->heap_handle();
if (!heap_handle.IsValid()) if (!heap_handle.IsValid())
return; return;
size_t set_index = work_queue->work_queue_set_index(); size_t set_index = work_queue->work_queue_set_index();
...@@ -100,7 +100,7 @@ void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) { ...@@ -100,7 +100,7 @@ void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) {
void WorkQueueSets::OnQueueBlocked(WorkQueue* work_queue) { void WorkQueueSets::OnQueueBlocked(WorkQueue* work_queue) {
DCHECK_EQ(this, work_queue->work_queue_sets()); DCHECK_EQ(this, work_queue->work_queue_sets());
HeapHandle heap_handle = work_queue->heap_handle(); base::internal::HeapHandle heap_handle = work_queue->heap_handle();
if (!heap_handle.IsValid()) if (!heap_handle.IsValid())
return; return;
size_t set_index = work_queue->work_queue_set_index(); size_t set_index = work_queue->work_queue_set_index();
...@@ -147,7 +147,8 @@ bool WorkQueueSets::ContainsWorkQueueForTest( ...@@ -147,7 +147,8 @@ bool WorkQueueSets::ContainsWorkQueueForTest(
EnqueueOrder enqueue_order; EnqueueOrder enqueue_order;
bool has_enqueue_order = work_queue->GetFrontTaskEnqueueOrder(&enqueue_order); bool has_enqueue_order = work_queue->GetFrontTaskEnqueueOrder(&enqueue_order);
for (const IntrusiveHeap<OldestTaskEnqueueOrder>& heap : work_queue_heaps_) { for (const base::internal::IntrusiveHeap<OldestTaskEnqueueOrder>& heap :
work_queue_heaps_) {
for (const OldestTaskEnqueueOrder& heap_value_pair : heap) { for (const OldestTaskEnqueueOrder& heap_value_pair : heap) {
if (heap_value_pair.value == work_queue) { if (heap_value_pair.value == work_queue) {
DCHECK(has_enqueue_order); DCHECK(has_enqueue_order);
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "base/base_export.h" #include "base/base_export.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/task/sequence_manager/intrusive_heap.h" #include "base/task/common/intrusive_heap.h"
#include "base/task/sequence_manager/task_queue_impl.h" #include "base/task/sequence_manager/task_queue_impl.h"
#include "base/task/sequence_manager/work_queue.h" #include "base/task/sequence_manager/work_queue.h"
#include "base/trace_event/trace_event_argument.h" #include "base/trace_event/trace_event_argument.h"
...@@ -82,14 +82,19 @@ class BASE_EXPORT WorkQueueSets { ...@@ -82,14 +82,19 @@ class BASE_EXPORT WorkQueueSets {
return key <= other.key; return key <= other.key;
} }
void SetHeapHandle(HeapHandle handle) { value->set_heap_handle(handle); } void SetHeapHandle(base::internal::HeapHandle handle) {
value->set_heap_handle(handle);
}
void ClearHeapHandle() { value->set_heap_handle(HeapHandle()); } void ClearHeapHandle() {
value->set_heap_handle(base::internal::HeapHandle());
}
}; };
// For each set |work_queue_heaps_| has a queue of WorkQueue ordered by the // For each set |work_queue_heaps_| has a queue of WorkQueue ordered by the
// oldest task in each WorkQueue. // oldest task in each WorkQueue.
std::vector<IntrusiveHeap<OldestTaskEnqueueOrder>> work_queue_heaps_; std::vector<base::internal::IntrusiveHeap<OldestTaskEnqueueOrder>>
work_queue_heaps_;
const char* const name_; const char* const name_;
DISALLOW_COPY_AND_ASSIGN(WorkQueueSets); DISALLOW_COPY_AND_ASSIGN(WorkQueueSets);
......
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