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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.cc

Issue 2708963002: Fix potential DCHECK in TaskQueueThrottler::IncreaseThrottleRefCount (Closed)
Patch Set: Addressing review comments. Created 3 years, 10 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/renderer/task_queue_throttler.h" 5 #include "platform/scheduler/renderer/task_queue_throttler.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 8
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 "task_queue", task_queue); 328 "task_queue", task_queue);
329 329
330 if (!allow_throttling_) 330 if (!allow_throttling_)
331 return; 331 return;
332 332
333 task_queue->SetTimeDomain(time_domain_.get()); 333 task_queue->SetTimeDomain(time_domain_.get());
334 // This blocks any tasks from |task_queue| until PumpThrottledTasks() to 334 // This blocks any tasks from |task_queue| until PumpThrottledTasks() to
335 // enforce task alignment. 335 // enforce task alignment.
336 task_queue->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME); 336 task_queue->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME);
337 337
338 if (!task_queue->IsQueueEnabled())
339 return;
340
338 if (!task_queue->IsEmpty()) { 341 if (!task_queue->IsEmpty()) {
339 if (task_queue->HasPendingImmediateWork()) { 342 if (task_queue->HasPendingImmediateWork()) {
340 OnTimeDomainHasImmediateWork(task_queue); 343 OnTimeDomainHasImmediateWork(task_queue);
341 } else { 344 } else {
342 OnTimeDomainHasDelayedWork(task_queue); 345 OnTimeDomainHasDelayedWork(task_queue);
343 } 346 }
344 } 347 }
345 } 348 }
346 349
347 void TaskQueueThrottler::DecreaseThrottleRefCount(TaskQueue* task_queue) { 350 void TaskQueueThrottler::DecreaseThrottleRefCount(TaskQueue* task_queue) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 void TaskQueueThrottler::OnTimeDomainHasImmediateWork(TaskQueue* queue) { 393 void TaskQueueThrottler::OnTimeDomainHasImmediateWork(TaskQueue* queue) {
391 // Forward to the main thread if called from another thread 394 // Forward to the main thread if called from another thread
392 if (!task_runner_->RunsTasksOnCurrentThread()) { 395 if (!task_runner_->RunsTasksOnCurrentThread()) {
393 task_runner_->PostTask(FROM_HERE, 396 task_runner_->PostTask(FROM_HERE,
394 base::Bind(forward_immediate_work_callback_, queue)); 397 base::Bind(forward_immediate_work_callback_, queue));
395 return; 398 return;
396 } 399 }
397 TRACE_EVENT0(tracing_category_, 400 TRACE_EVENT0(tracing_category_,
398 "TaskQueueThrottler::OnTimeDomainHasImmediateWork"); 401 "TaskQueueThrottler::OnTimeDomainHasImmediateWork");
399 402
403 // We don't expect this to get called for disabled queues, but we can't DCHECK
404 // because of the above thread hop. Just bail out if the queue is disabled.
405 if (!queue->IsQueueEnabled())
406 return;
407
400 base::TimeTicks now = tick_clock_->NowTicks(); 408 base::TimeTicks now = tick_clock_->NowTicks();
401 base::TimeTicks next_allowed_run_time = GetNextAllowedRunTime(now, queue); 409 base::TimeTicks next_allowed_run_time = GetNextAllowedRunTime(now, queue);
402 MaybeSchedulePumpThrottledTasks(FROM_HERE, now, next_allowed_run_time); 410 MaybeSchedulePumpThrottledTasks(FROM_HERE, now, next_allowed_run_time);
403 } 411 }
404 412
405 void TaskQueueThrottler::OnTimeDomainHasDelayedWork(TaskQueue* queue) { 413 void TaskQueueThrottler::OnTimeDomainHasDelayedWork(TaskQueue* queue) {
406 TRACE_EVENT0(tracing_category_, 414 TRACE_EVENT0(tracing_category_,
407 "TaskQueueThrottler::OnTimeDomainHasDelayedWork"); 415 "TaskQueueThrottler::OnTimeDomainHasDelayedWork");
416 DCHECK(queue->IsQueueEnabled());
408 base::TimeTicks now = tick_clock_->NowTicks(); 417 base::TimeTicks now = tick_clock_->NowTicks();
409 LazyNow lazy_now(now); 418 LazyNow lazy_now(now);
410 419
411 base::Optional<base::TimeTicks> next_scheduled_delayed_task = 420 base::Optional<base::TimeTicks> next_scheduled_delayed_task =
412 NextTaskRunTime(&lazy_now, queue); 421 NextTaskRunTime(&lazy_now, queue);
413 DCHECK(next_scheduled_delayed_task); 422 DCHECK(next_scheduled_delayed_task);
414 MaybeSchedulePumpThrottledTasks(FROM_HERE, now, 423 MaybeSchedulePumpThrottledTasks(FROM_HERE, now,
415 next_scheduled_delayed_task.value()); 424 next_scheduled_delayed_task.value());
416 } 425 }
417 426
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 queue->SetTimeDomain(time_domain_.get()); 649 queue->SetTimeDomain(time_domain_.get());
641 MaybeSchedulePumpQueue(FROM_HERE, lazy_now.Now(), queue, 650 MaybeSchedulePumpQueue(FROM_HERE, lazy_now.Now(), queue,
642 GetNextAllowedRunTime(lazy_now.Now(), queue)); 651 GetNextAllowedRunTime(lazy_now.Now(), queue));
643 } 652 }
644 653
645 TRACE_EVENT0(tracing_category_, "TaskQueueThrottler_EnableThrottling"); 654 TRACE_EVENT0(tracing_category_, "TaskQueueThrottler_EnableThrottling");
646 } 655 }
647 656
648 } // namespace scheduler 657 } // namespace scheduler
649 } // namespace blink 658 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698