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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/base/time_domain.cc

Issue 2258133002: [scheduler] Implement time-based cpu throttling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Renamed Enable/Disable to Enable/DisableThrottling. Created 4 years, 3 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/scheduler/base/time_domain.h" 5 #include "platform/scheduler/base/time_domain.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "platform/scheduler/base/task_queue_impl.h" 9 #include "platform/scheduler/base/task_queue_impl.h"
10 #include "platform/scheduler/base/task_queue_manager_delegate.h" 10 #include "platform/scheduler/base/task_queue_manager_delegate.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 base::TimeTicks now) { 74 base::TimeTicks now) {
75 DCHECK(main_thread_checker_.CalledOnValidThread()); 75 DCHECK(main_thread_checker_.CalledOnValidThread());
76 if (delayed_wakeup_multimap_.empty() || 76 if (delayed_wakeup_multimap_.empty() ||
77 delayed_run_time < delayed_wakeup_multimap_.begin()->first) { 77 delayed_run_time < delayed_wakeup_multimap_.begin()->first) {
78 base::TimeDelta delay = std::max(base::TimeDelta(), delayed_run_time - now); 78 base::TimeDelta delay = std::max(base::TimeDelta(), delayed_run_time - now);
79 RequestWakeup(now, delay); 79 RequestWakeup(now, delay);
80 } 80 }
81 81
82 delayed_wakeup_multimap_.insert(std::make_pair(delayed_run_time, queue)); 82 delayed_wakeup_multimap_.insert(std::make_pair(delayed_run_time, queue));
83 if (observer_) 83 if (observer_)
84 observer_->OnTimeDomainHasDelayedWork(); 84 observer_->OnTimeDomainHasDelayedWork(queue);
85 } 85 }
86 86
87 void TimeDomain::CancelDelayedWork(internal::TaskQueueImpl* queue, 87 void TimeDomain::CancelDelayedWork(internal::TaskQueueImpl* queue,
88 base::TimeTicks delayed_run_time) { 88 base::TimeTicks delayed_run_time) {
89 DCHECK(main_thread_checker_.CalledOnValidThread()); 89 DCHECK(main_thread_checker_.CalledOnValidThread());
90 90
91 auto iterpair = delayed_wakeup_multimap_.equal_range(delayed_run_time); 91 auto iterpair = delayed_wakeup_multimap_.equal_range(delayed_run_time);
92 for (auto it = iterpair.first; it != iterpair.second; ++it) { 92 for (auto it = iterpair.first; it != iterpair.second; ++it) {
93 if (it->second == queue) { 93 if (it->second == queue) {
94 base::TimeTicks prev_first_wakeup = 94 base::TimeTicks prev_first_wakeup =
(...skipping 25 matching lines...) Expand all
120 } 120 }
121 } 121 }
122 } 122 }
123 123
124 void TimeDomain::RegisterAsUpdatableTaskQueue(internal::TaskQueueImpl* queue) { 124 void TimeDomain::RegisterAsUpdatableTaskQueue(internal::TaskQueueImpl* queue) {
125 { 125 {
126 base::AutoLock lock(newly_updatable_lock_); 126 base::AutoLock lock(newly_updatable_lock_);
127 newly_updatable_.push_back(queue); 127 newly_updatable_.push_back(queue);
128 } 128 }
129 if (observer_) 129 if (observer_)
130 observer_->OnTimeDomainHasImmediateWork(); 130 observer_->OnTimeDomainHasImmediateWork(queue);
131 } 131 }
132 132
133 bool TimeDomain::UnregisterAsUpdatableTaskQueue( 133 bool TimeDomain::UnregisterAsUpdatableTaskQueue(
134 internal::TaskQueueImpl* queue) { 134 internal::TaskQueueImpl* queue) {
135 DCHECK(main_thread_checker_.CalledOnValidThread()); 135 DCHECK(main_thread_checker_.CalledOnValidThread());
136 136
137 bool was_updatable = updatable_queue_set_.erase(queue) != 0; 137 bool was_updatable = updatable_queue_set_.erase(queue) != 0;
138 138
139 base::AutoLock lock(newly_updatable_lock_); 139 base::AutoLock lock(newly_updatable_lock_);
140 // Remove all copies of |queue| from |newly_updatable_|. 140 // Remove all copies of |queue| from |newly_updatable_|.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 if (!delayed_wakeup_multimap_.empty()) { 243 if (!delayed_wakeup_multimap_.empty()) {
244 base::TimeDelta delay = delayed_wakeup_multimap_.begin()->first - Now(); 244 base::TimeDelta delay = delayed_wakeup_multimap_.begin()->first - Now();
245 state->SetDouble("next_delay_ms", delay.InMillisecondsF()); 245 state->SetDouble("next_delay_ms", delay.InMillisecondsF());
246 } 246 }
247 AsValueIntoInternal(state); 247 AsValueIntoInternal(state);
248 state->EndDictionary(); 248 state->EndDictionary();
249 } 249 }
250 250
251 } // namespace scheduler 251 } // namespace scheduler
252 } // namespace blink 252 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698