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

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

Issue 2528963002: [scheduler] Fix TaskQueueThrottler::SetQueueEnabled logic. (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/task_queue_manager.h" 5 #include "platform/scheduler/base/task_queue_manager.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/format_macros.h"
11 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
13 #include "base/strings/stringprintf.h"
12 #include "base/trace_event/trace_event.h" 14 #include "base/trace_event/trace_event.h"
13 #include "platform/scheduler/base/real_time_domain.h" 15 #include "platform/scheduler/base/real_time_domain.h"
14 #include "platform/scheduler/base/task_queue_impl.h" 16 #include "platform/scheduler/base/task_queue_impl.h"
15 #include "platform/scheduler/base/task_queue_manager_delegate.h" 17 #include "platform/scheduler/base/task_queue_manager_delegate.h"
16 #include "platform/scheduler/base/task_queue_selector.h" 18 #include "platform/scheduler/base/task_queue_selector.h"
17 #include "platform/scheduler/base/work_queue.h" 19 #include "platform/scheduler/base/work_queue.h"
18 #include "platform/scheduler/base/work_queue_sets.h" 20 #include "platform/scheduler/base/work_queue_sets.h"
19 #include "public/platform/scheduler/base/task_time_observer.h" 21 #include "public/platform/scheduler/base/task_time_observer.h"
20 22
21 namespace blink { 23 namespace blink {
(...skipping 19 matching lines...) Expand all
41 43
42 // Converts a OnceClosure to a RepeatingClosure. It hits CHECK failure to run 44 // Converts a OnceClosure to a RepeatingClosure. It hits CHECK failure to run
43 // the resulting RepeatingClosure more than once. 45 // the resulting RepeatingClosure more than once.
44 // TODO(tzik): This will be unneeded after the Closure-to-OnceClosure migration 46 // TODO(tzik): This will be unneeded after the Closure-to-OnceClosure migration
45 // on TaskRunner finished. Remove it once it gets unneeded. 47 // on TaskRunner finished. Remove it once it gets unneeded.
46 base::RepeatingClosure UnsafeConvertOnceClosureToRepeating( 48 base::RepeatingClosure UnsafeConvertOnceClosureToRepeating(
47 base::OnceClosure cb) { 49 base::OnceClosure cb) {
48 return base::BindRepeating([](base::OnceClosure cb) { std::move(cb).Run(); }, 50 return base::BindRepeating([](base::OnceClosure cb) { std::move(cb).Run(); },
49 base::Passed(&cb)); 51 base::Passed(&cb));
50 } 52 }
53
54 std::string PointerToId(void* pointer) {
alex clarke (OOO till 29th) 2016/11/24 14:45:07 Can we land this separately? It seems unrelated t
altimin 2016/11/24 15:00:55 Oops, sorry.
55 return base::StringPrintf(
56 "%" PRIx64, static_cast<uint64_t>(reinterpret_cast<uintptr_t>(pointer)));
51 } 57 }
52 58
59 } // namespace
60
53 TaskQueueManager::TaskQueueManager( 61 TaskQueueManager::TaskQueueManager(
54 scoped_refptr<TaskQueueManagerDelegate> delegate, 62 scoped_refptr<TaskQueueManagerDelegate> delegate,
55 const char* tracing_category, 63 const char* tracing_category,
56 const char* disabled_by_default_tracing_category, 64 const char* disabled_by_default_tracing_category,
57 const char* disabled_by_default_verbose_tracing_category) 65 const char* disabled_by_default_verbose_tracing_category)
58 : real_time_domain_(new RealTimeDomain(tracing_category)), 66 : real_time_domain_(new RealTimeDomain(tracing_category)),
59 delegate_(delegate), 67 delegate_(delegate),
60 task_was_run_on_quiescence_monitored_queue_(false), 68 task_was_run_on_quiescence_monitored_queue_(false),
61 other_thread_pending_wakeup_(false), 69 other_thread_pending_wakeup_(false),
62 work_batch_size_(1), 70 work_batch_size_(1),
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 348
341 MaybeRecordTaskDelayHistograms(pending_task, queue); 349 MaybeRecordTaskDelayHistograms(pending_task, queue);
342 350
343 TRACE_TASK_EXECUTION("TaskQueueManager::ProcessTaskFromWorkQueue", 351 TRACE_TASK_EXECUTION("TaskQueueManager::ProcessTaskFromWorkQueue",
344 pending_task); 352 pending_task);
345 if (queue->GetShouldNotifyObservers()) { 353 if (queue->GetShouldNotifyObservers()) {
346 for (auto& observer : task_observers_) 354 for (auto& observer : task_observers_)
347 observer.WillProcessTask(pending_task); 355 observer.WillProcessTask(pending_task);
348 queue->NotifyWillProcessTask(pending_task); 356 queue->NotifyWillProcessTask(pending_task);
349 } 357 }
350 TRACE_EVENT1(tracing_category_, "TaskQueueManager::RunTask", "queue", 358 TRACE_EVENT2(tracing_category_, "TaskQueueManager::RunTask", "queue",
351 queue->GetName()); 359 queue->GetName(), "queue_id", PointerToId(queue));
352 // NOTE when TaskQueues get unregistered a reference ends up getting retained 360 // NOTE when TaskQueues get unregistered a reference ends up getting retained
353 // by |queues_to_delete_| which is cleared at the top of |DoWork|. This means 361 // by |queues_to_delete_| which is cleared at the top of |DoWork|. This means
354 // we are OK to use raw pointers here. 362 // we are OK to use raw pointers here.
355 internal::TaskQueueImpl* prev_executing_task_queue = 363 internal::TaskQueueImpl* prev_executing_task_queue =
356 currently_executing_task_queue_; 364 currently_executing_task_queue_;
357 currently_executing_task_queue_ = queue; 365 currently_executing_task_queue_ = queue;
358 task_annotator_.RunTask("TaskQueueManager::PostTask", &pending_task); 366 task_annotator_.RunTask("TaskQueueManager::PostTask", &pending_task);
359 // Detect if the TaskQueueManager just got deleted. If this happens we must 367 // Detect if the TaskQueueManager just got deleted. If this happens we must
360 // not access any member variables after this point. 368 // not access any member variables after this point.
361 if (protect->HasOneRef()) 369 if (protect->HasOneRef())
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 *work_queue->GetFrontTask()); 498 *work_queue->GetFrontTask());
491 } 499 }
492 } 500 }
493 501
494 bool TaskQueueManager::HasImmediateWorkForTesting() const { 502 bool TaskQueueManager::HasImmediateWorkForTesting() const {
495 return !selector_.EnabledWorkQueuesEmpty(); 503 return !selector_.EnabledWorkQueuesEmpty();
496 } 504 }
497 505
498 } // namespace scheduler 506 } // namespace scheduler
499 } // namespace blink 507 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698