Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1247)

Unified Diff: third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc

Issue 2546423002: [Try # 3] Scheduler refactoring to virtually eliminate redundant DoWorks (Closed)
Patch Set: Rebased Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc b/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc
index bec08d1125db9d303c2f6487b116b1a017642460..8c608b09fba71a437b2d8382a6783e3f7f1cd6a6 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc
@@ -63,6 +63,8 @@ void WorkQueueSets::OnPushQueue(WorkQueue* work_queue) {
size_t set_index = work_queue->work_queue_set_index();
DCHECK_LT(set_index, work_queue_heaps_.size()) << " set_index = "
<< set_index;
+ // |work_queue| should not be in work_queue_heaps_[set_index].
+ DCHECK(!work_queue->heap_handle().IsValid());
work_queue_heaps_[set_index].insert({enqueue_order, work_queue});
}
@@ -81,6 +83,8 @@ void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) {
} else {
// O(log n)
work_queue_heaps_[set_index].pop();
+ DCHECK(work_queue_heaps_[set_index].empty() ||
+ work_queue_heaps_[set_index].min().value != work_queue);
}
}
@@ -103,6 +107,18 @@ bool WorkQueueSets::GetOldestQueueInSet(size_t set_index,
return true;
}
+bool WorkQueueSets::GetOldestQueueAndEnqueueOrderInSet(
+ size_t set_index,
+ WorkQueue** out_work_queue,
+ EnqueueOrder* out_enqueue_order) const {
+ DCHECK_LT(set_index, work_queue_heaps_.size());
+ if (work_queue_heaps_[set_index].empty())
+ return false;
+ *out_work_queue = work_queue_heaps_[set_index].min().value;
+ *out_enqueue_order = work_queue_heaps_[set_index].min().key;
+ return true;
+}
+
bool WorkQueueSets::IsSetEmpty(size_t set_index) const {
DCHECK_LT(set_index, work_queue_heaps_.size()) << " set_index = "
<< set_index;

Powered by Google App Engine
This is Rietveld 408576698