[Task] Add a second heap handle for delayed priority queue

Bug: 1127430
Change-Id: I96cb57dafc4378ac4bd4d4c7addcbf148e7fb83b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3846596
Commit-Queue: Abdias Dagbekpo <[email protected]>
Reviewed-by: Etienne Pierre-Doray <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1037927}
diff --git a/base/task/thread_pool/task_source.h b/base/task/thread_pool/task_source.h
index 7be8157..70f9b00 100644
--- a/base/task/thread_pool/task_source.h
+++ b/base/task/thread_pool/task_source.h
@@ -153,12 +153,21 @@
   // TaskSource.
   virtual TimeTicks GetDelayedSortKey() const = 0;
 
-  // Support for IntrusiveHeap.
-  void SetHeapHandle(const HeapHandle& handle);
-  void ClearHeapHandle();
-  HeapHandle GetHeapHandle() const { return heap_handle_; }
+  // Support for IntrusiveHeap in ThreadGroup::PriorityQueue.
+  void SetImmediateHeapHandle(const HeapHandle& handle);
+  void ClearImmediateHeapHandle();
+  HeapHandle GetImmediateHeapHandle() const {
+    return immediate_pq_heap_handle_;
+  }
 
-  HeapHandle heap_handle() const { return heap_handle_; }
+  HeapHandle immediate_heap_handle() const { return immediate_pq_heap_handle_; }
+
+  // Support for IntrusiveHeap in ThreadGroup::DelayedPriorityQueue.
+  void SetDelayedHeapHandle(const HeapHandle& handle);
+  void ClearDelayedHeapHandle();
+  HeapHandle GetDelayedHeapHandle() const { return delayed_pq_heap_handle_; }
+
+  HeapHandle delayed_heap_handle() const { return delayed_pq_heap_handle_; }
 
   // Returns the shutdown behavior of all Tasks in the TaskSource. Can be
   // accessed without a Transaction because it is never mutated.
@@ -219,7 +228,11 @@
 
   // The TaskSource's position in its current PriorityQueue. Access is protected
   // by the PriorityQueue's lock.
-  HeapHandle heap_handle_;
+  HeapHandle immediate_pq_heap_handle_;
+
+  // The TaskSource's position in its current DelayedPriorityQueue. Access is
+  // protected by the DelayedPriorityQueue's lock.
+  HeapHandle delayed_pq_heap_handle_;
 
   // A pointer to the TaskRunner that posts to this TaskSource, if any. The
   // derived class is responsible for calling AddRef() when a TaskSource from