Index: third_party/WebKit/Source/platform/scheduler/base/time_domain.h |
diff --git a/third_party/WebKit/Source/platform/scheduler/base/time_domain.h b/third_party/WebKit/Source/platform/scheduler/base/time_domain.h |
index 52c7678eea23ac5de1257546e25a5172f24ea4fa..666ea12399dcf003f0391889ff67c8ec9e9b8671 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/base/time_domain.h |
+++ b/third_party/WebKit/Source/platform/scheduler/base/time_domain.h |
@@ -13,6 +13,7 @@ |
#include "base/memory/ref_counted.h" |
#include "base/memory/weak_ptr.h" |
#include "base/time/time.h" |
+#include "platform/scheduler/base/intrusive_heap.h" |
#include "platform/scheduler/base/lazy_now.h" |
#include "platform/scheduler/base/task_queue_impl.h" |
@@ -131,23 +132,38 @@ class BLINK_PLATFORM_EXPORT TimeDomain { |
// has elapsed. |
void WakeupReadyDelayedQueues(LazyNow* lazy_now); |
+ size_t NumberOfScheduledWakeups() const { |
+ return delayed_wakeup_queue_.size(); |
+ } |
+ |
private: |
void MoveNewlyUpdatableQueuesIntoUpdatableQueueSet(); |
- using DelayedWakeupMultimap = |
- std::multimap<base::TimeTicks, internal::TaskQueueImpl*>; |
+ struct DelayedWakeup { |
+ base::TimeTicks time; |
+ internal::TaskQueueImpl* queue; |
+ |
+ bool operator<=(const DelayedWakeup& other) const { |
+ if (time == other.time) |
+ return queue <= other.queue; |
+ return time < other.time; |
+ } |
- DelayedWakeupMultimap delayed_wakeup_multimap_; |
+ void SetHeapHandle(HeapHandle handle) { |
+ DCHECK(handle.IsValid()); |
+ queue->set_heap_handle(handle); |
+ } |
- // This map makes it easy to remove a queue from |delayed_wakeup_multimap_|. |
- // NOTE inserting or removing elements from a std::map does not invalidate any |
- // iterators. |
- using QueueToDelayedWakeupMultimapIteratorMap = |
- std::unordered_map<internal::TaskQueueImpl*, |
- DelayedWakeupMultimap::iterator>; |
+ void ClearHeapHandle() { |
+ DCHECK(queue->heap_handle().IsValid()); |
+ queue->set_heap_handle(HeapHandle()); |
+ |
+ DCHECK_NE(queue->scheduled_time_domain_wakeup(), base::TimeTicks()); |
+ queue->set_scheduled_time_domain_wakeup(base::TimeTicks()); |
+ } |
+ }; |
- QueueToDelayedWakeupMultimapIteratorMap |
- queue_to_delayed_wakeup_multimap_iterator_map_; |
+ IntrusiveHeap<DelayedWakeup> delayed_wakeup_queue_; |
// This lock guards only |newly_updatable_|. It's not expected to be heavily |
// contended. |