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

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

Issue 2118903002: scheduler: Move the Blink scheduler into Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 4 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 "components/scheduler/base/task_queue_impl.h" 5 #include "platform/scheduler/base/task_queue_impl.h"
6 6
7 #include "base/trace_event/blame_context.h" 7 #include "base/trace_event/blame_context.h"
8 #include "components/scheduler/base/task_queue_manager.h" 8 #include "platform/scheduler/base/task_queue_manager.h"
9 #include "components/scheduler/base/task_queue_manager_delegate.h" 9 #include "platform/scheduler/base/task_queue_manager_delegate.h"
10 #include "components/scheduler/base/time_domain.h" 10 #include "platform/scheduler/base/time_domain.h"
11 #include "components/scheduler/base/work_queue.h" 11 #include "platform/scheduler/base/work_queue.h"
12 12
13 namespace blink {
13 namespace scheduler { 14 namespace scheduler {
14 namespace internal { 15 namespace internal {
15 16
16 TaskQueueImpl::TaskQueueImpl( 17 TaskQueueImpl::TaskQueueImpl(
17 TaskQueueManager* task_queue_manager, 18 TaskQueueManager* task_queue_manager,
18 TimeDomain* time_domain, 19 TimeDomain* time_domain,
19 const Spec& spec, 20 const Spec& spec,
20 const char* disabled_by_default_tracing_category, 21 const char* disabled_by_default_tracing_category,
21 const char* disabled_by_default_verbose_tracing_category) 22 const char* disabled_by_default_verbose_tracing_category)
22 : thread_id_(base::PlatformThread::CurrentId()), 23 : thread_id_(base::PlatformThread::CurrentId()),
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 } 217 }
217 218
218 void TaskQueueImpl::PushOntoDelayedIncomingQueueFromMainThread( 219 void TaskQueueImpl::PushOntoDelayedIncomingQueueFromMainThread(
219 Task pending_task, 220 Task pending_task,
220 base::TimeTicks now) { 221 base::TimeTicks now) {
221 main_thread_only().task_queue_manager->DidQueueTask(pending_task); 222 main_thread_only().task_queue_manager->DidQueueTask(pending_task);
222 223
223 // Schedule a later call to MoveReadyDelayedTasksToDelayedWorkQueue. 224 // Schedule a later call to MoveReadyDelayedTasksToDelayedWorkQueue.
224 base::TimeTicks delayed_run_time = pending_task.delayed_run_time; 225 base::TimeTicks delayed_run_time = pending_task.delayed_run_time;
225 main_thread_only().delayed_incoming_queue.push(std::move(pending_task)); 226 main_thread_only().delayed_incoming_queue.push(std::move(pending_task));
226 main_thread_only().time_domain->ScheduleDelayedWork( 227 main_thread_only().time_domain->ScheduleDelayedWork(this, delayed_run_time,
227 this, delayed_run_time, now); 228 now);
228 TraceQueueSize(false); 229 TraceQueueSize(false);
229 } 230 }
230 231
231 void TaskQueueImpl::PushOntoDelayedIncomingQueueLocked(Task pending_task) { 232 void TaskQueueImpl::PushOntoDelayedIncomingQueueLocked(Task pending_task) {
232 any_thread().task_queue_manager->DidQueueTask(pending_task); 233 any_thread().task_queue_manager->DidQueueTask(pending_task);
233 234
234 int thread_hop_task_sequence_number = 235 int thread_hop_task_sequence_number =
235 any_thread().task_queue_manager->GetNextSequenceNumber(); 236 any_thread().task_queue_manager->GetNextSequenceNumber();
236 PushOntoImmediateIncomingQueueLocked(Task( 237 PushOntoImmediateIncomingQueueLocked(
237 FROM_HERE, 238 Task(FROM_HERE, base::Bind(&TaskQueueImpl::ScheduleDelayedWorkTask, this,
238 base::Bind(&TaskQueueImpl::ScheduleDelayedWorkTask, this, 239 base::Passed(&pending_task)),
239 base::Passed(&pending_task)), 240 base::TimeTicks(), thread_hop_task_sequence_number, false,
240 base::TimeTicks(), thread_hop_task_sequence_number, false, 241 thread_hop_task_sequence_number));
241 thread_hop_task_sequence_number));
242 } 242 }
243 243
244 void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked(Task pending_task) { 244 void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked(Task pending_task) {
245 if (any_thread().immediate_incoming_queue.empty()) 245 if (any_thread().immediate_incoming_queue.empty())
246 any_thread().time_domain->RegisterAsUpdatableTaskQueue(this); 246 any_thread().time_domain->RegisterAsUpdatableTaskQueue(this);
247 if (any_thread().pump_policy == PumpPolicy::AUTO && 247 if (any_thread().pump_policy == PumpPolicy::AUTO &&
248 any_thread().immediate_incoming_queue.empty()) { 248 any_thread().immediate_incoming_queue.empty()) {
249 any_thread().task_queue_manager->MaybeScheduleImmediateWork(FROM_HERE); 249 any_thread().task_queue_manager->MaybeScheduleImmediateWork(FROM_HERE);
250 } 250 }
251 any_thread().task_queue_manager->DidQueueTask(pending_task); 251 any_thread().task_queue_manager->DidQueueTask(pending_task);
252 any_thread().immediate_incoming_queue.push(std::move(pending_task)); 252 any_thread().immediate_incoming_queue.push(std::move(pending_task));
253 TraceQueueSize(true); 253 TraceQueueSize(true);
254 } 254 }
255 255
256 void TaskQueueImpl::ScheduleDelayedWorkTask(Task pending_task) { 256 void TaskQueueImpl::ScheduleDelayedWorkTask(Task pending_task) {
257 DCHECK(main_thread_checker_.CalledOnValidThread()); 257 DCHECK(main_thread_checker_.CalledOnValidThread());
258 base::TimeTicks delayed_run_time = pending_task.delayed_run_time; 258 base::TimeTicks delayed_run_time = pending_task.delayed_run_time;
259 main_thread_only().delayed_incoming_queue.push(std::move(pending_task)); 259 main_thread_only().delayed_incoming_queue.push(std::move(pending_task));
260 main_thread_only().time_domain->ScheduleDelayedWork( 260 main_thread_only().time_domain->ScheduleDelayedWork(
261 this, delayed_run_time, 261 this, delayed_run_time, main_thread_only().time_domain->Now());
262 main_thread_only().time_domain->Now());
263 } 262 }
264 263
265 void TaskQueueImpl::SetQueueEnabled(bool enabled) { 264 void TaskQueueImpl::SetQueueEnabled(bool enabled) {
266 if (main_thread_only().is_enabled == enabled) 265 if (main_thread_only().is_enabled == enabled)
267 return; 266 return;
268 main_thread_only().is_enabled = enabled; 267 main_thread_only().is_enabled = enabled;
269 if (!main_thread_only().task_queue_manager) 268 if (!main_thread_only().task_queue_manager)
270 return; 269 return;
271 if (enabled) { 270 if (enabled) {
272 main_thread_only().task_queue_manager->selector_.EnableQueue(this); 271 main_thread_only().task_queue_manager->selector_.EnableQueue(this);
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 main_thread_only().delayed_incoming_queue.size()); 572 main_thread_only().delayed_incoming_queue.size());
574 state->SetInteger("immediate_work_queue_size", 573 state->SetInteger("immediate_work_queue_size",
575 main_thread_only().immediate_work_queue->Size()); 574 main_thread_only().immediate_work_queue->Size());
576 state->SetInteger("delayed_work_queue_size", 575 state->SetInteger("delayed_work_queue_size",
577 main_thread_only().delayed_work_queue->Size()); 576 main_thread_only().delayed_work_queue->Size());
578 if (!main_thread_only().delayed_incoming_queue.empty()) { 577 if (!main_thread_only().delayed_incoming_queue.empty()) {
579 base::TimeDelta delay_to_next_task = 578 base::TimeDelta delay_to_next_task =
580 (main_thread_only().delayed_incoming_queue.top().delayed_run_time - 579 (main_thread_only().delayed_incoming_queue.top().delayed_run_time -
581 main_thread_only().time_domain->CreateLazyNow().Now()); 580 main_thread_only().time_domain->CreateLazyNow().Now());
582 state->SetDouble("delay_to_next_task_ms", 581 state->SetDouble("delay_to_next_task_ms",
583 delay_to_next_task.InMillisecondsF()); 582 delay_to_next_task.InMillisecondsF());
584 } 583 }
585 if (verbose_tracing_enabled) { 584 if (verbose_tracing_enabled) {
586 state->BeginArray("immediate_incoming_queue"); 585 state->BeginArray("immediate_incoming_queue");
587 QueueAsValueInto(any_thread().immediate_incoming_queue, state); 586 QueueAsValueInto(any_thread().immediate_incoming_queue, state);
588 state->EndArray(); 587 state->EndArray();
589 state->BeginArray("delayed_work_queue"); 588 state->BeginArray("delayed_work_queue");
590 main_thread_only().delayed_work_queue->AsValueInto(state); 589 main_thread_only().delayed_work_queue->AsValueInto(state);
591 state->EndArray(); 590 state->EndArray();
592 state->BeginArray("immediate_work_queue"); 591 state->BeginArray("immediate_work_queue");
593 main_thread_only().immediate_work_queue->AsValueInto(state); 592 main_thread_only().immediate_work_queue->AsValueInto(state);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 state->SetBoolean("nestable", task.nestable); 707 state->SetBoolean("nestable", task.nestable);
709 state->SetBoolean("is_high_res", task.is_high_res); 708 state->SetBoolean("is_high_res", task.is_high_res);
710 state->SetDouble( 709 state->SetDouble(
711 "delayed_run_time", 710 "delayed_run_time",
712 (task.delayed_run_time - base::TimeTicks()).InMicroseconds() / 1000.0L); 711 (task.delayed_run_time - base::TimeTicks()).InMicroseconds() / 1000.0L);
713 state->EndDictionary(); 712 state->EndDictionary();
714 } 713 }
715 714
716 } // namespace internal 715 } // namespace internal
717 } // namespace scheduler 716 } // namespace scheduler
717 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698