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

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

Issue 2259013003: Move and rename TaskTimeTracker to public interface exposed to WebThread, use in WebPerf Agent. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remaining fixes for remove observer 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 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"
(...skipping 16 matching lines...) Expand all
27 void RecordDelayedTaskLateness(base::TimeDelta lateness) { 27 void RecordDelayedTaskLateness(base::TimeDelta lateness) {
28 UMA_HISTOGRAM_TIMES("RendererScheduler.TaskQueueManager.DelayedTaskLateness", 28 UMA_HISTOGRAM_TIMES("RendererScheduler.TaskQueueManager.DelayedTaskLateness",
29 lateness); 29 lateness);
30 } 30 }
31 31
32 void RecordImmediateTaskQueueingDuration(tracked_objects::Duration duration) { 32 void RecordImmediateTaskQueueingDuration(tracked_objects::Duration duration) {
33 UMA_HISTOGRAM_TIMES( 33 UMA_HISTOGRAM_TIMES(
34 "RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration", 34 "RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration",
35 base::TimeDelta::FromMilliseconds(duration.InMilliseconds())); 35 base::TimeDelta::FromMilliseconds(duration.InMilliseconds()));
36 } 36 }
37
38 double MonotonicTimeInSeconds(base::TimeTicks timeTicks) {
39 return (timeTicks.ToInternalValue() / static_cast<double>(
40 base::Time::kMicrosecondsPerSecond));
41 }
37 } 42 }
38 43
39 TaskQueueManager::TaskQueueManager( 44 TaskQueueManager::TaskQueueManager(
40 scoped_refptr<TaskQueueManagerDelegate> delegate, 45 scoped_refptr<TaskQueueManagerDelegate> delegate,
41 const char* tracing_category, 46 const char* tracing_category,
42 const char* disabled_by_default_tracing_category, 47 const char* disabled_by_default_tracing_category,
43 const char* disabled_by_default_verbose_tracing_category) 48 const char* disabled_by_default_verbose_tracing_category)
44 : real_time_domain_(new RealTimeDomain(tracing_category)), 49 : real_time_domain_(new RealTimeDomain(tracing_category)),
45 delegate_(delegate), 50 delegate_(delegate),
46 task_was_run_on_quiescence_monitored_queue_(false), 51 task_was_run_on_quiescence_monitored_queue_(false),
47 work_batch_size_(1), 52 work_batch_size_(1),
48 task_count_(0), 53 task_count_(0),
49 task_time_tracker_(nullptr), 54 task_time_tracker_(nullptr),
55 task_time_observer_(nullptr),
50 tracing_category_(tracing_category), 56 tracing_category_(tracing_category),
51 disabled_by_default_tracing_category_( 57 disabled_by_default_tracing_category_(
52 disabled_by_default_tracing_category), 58 disabled_by_default_tracing_category),
53 disabled_by_default_verbose_tracing_category_( 59 disabled_by_default_verbose_tracing_category_(
54 disabled_by_default_verbose_tracing_category), 60 disabled_by_default_verbose_tracing_category),
55 currently_executing_task_queue_(nullptr), 61 currently_executing_task_queue_(nullptr),
56 observer_(nullptr), 62 observer_(nullptr),
57 deletion_sentinel_(new DeletionSentinel()), 63 deletion_sentinel_(new DeletionSentinel()),
58 weak_factory_(this) { 64 weak_factory_(this) {
59 DCHECK(delegate->RunsTasksOnCurrentThread()); 65 DCHECK(delegate->RunsTasksOnCurrentThread());
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 214
209 for (int i = 0; i < work_batch_size_; i++) { 215 for (int i = 0; i < work_batch_size_; i++) {
210 internal::WorkQueue* work_queue; 216 internal::WorkQueue* work_queue;
211 if (!SelectWorkQueueToService(&work_queue)) { 217 if (!SelectWorkQueueToService(&work_queue)) {
212 break; 218 break;
213 } 219 }
214 220
215 bool should_trigger_wakeup = work_queue->task_queue()->wakeup_policy() == 221 bool should_trigger_wakeup = work_queue->task_queue()->wakeup_policy() ==
216 TaskQueue::WakeupPolicy::CAN_WAKE_OTHER_QUEUES; 222 TaskQueue::WakeupPolicy::CAN_WAKE_OTHER_QUEUES;
217 223
218 switch (ProcessTaskFromWorkQueue(work_queue, &previous_task)) { 224 if (!delegate_->IsNested() && task_time_observer_)
225 task_time_observer_->willProcessTask();
226 TaskQueueManager::ProcessTaskResult result = ProcessTaskFromWorkQueue(
227 work_queue, &previous_task);
228 if (!delegate_->IsNested() && task_time_observer_)
229 task_time_observer_->didProcessTask();
230
231 switch (result) {
219 case ProcessTaskResult::DEFERRED: 232 case ProcessTaskResult::DEFERRED:
220 // If a task was deferred, try again with another task. Note that this 233 // If a task was deferred, try again with another task. Note that this
221 // means deferred tasks (i.e. non-nestable tasks) will never trigger 234 // means deferred tasks (i.e. non-nestable tasks) will never trigger
222 // queue wake-ups. 235 // queue wake-ups.
223 continue; 236 continue;
224 case ProcessTaskResult::EXECUTED: 237 case ProcessTaskResult::EXECUTED:
225 break; 238 break;
226 case ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED: 239 case ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED:
227 return; // The TaskQueueManager got deleted, we must bail out. 240 return; // The TaskQueueManager got deleted, we must bail out.
228 } 241 }
229 242
230 lazy_now = real_time_domain()->CreateLazyNow(); 243 lazy_now = real_time_domain()->CreateLazyNow();
231 if (!delegate_->IsNested() && task_time_tracker_) { 244 if (!delegate_->IsNested() && task_time_tracker_) {
232 // Only report top level task durations. 245 // Only report top level task durations.
233 base::TimeTicks task_end_time = lazy_now.Now(); 246 base::TimeTicks task_end_time = lazy_now.Now();
234 task_time_tracker_->ReportTaskTime(task_start_time, task_end_time); 247 task_time_tracker_->ReportTaskTime(task_start_time, task_end_time);
248 if (task_time_observer_)
249 task_time_observer_->reportTaskTime(
250 MonotonicTimeInSeconds(task_start_time),
251 MonotonicTimeInSeconds(task_end_time));
235 task_start_time = task_end_time; 252 task_start_time = task_end_time;
236 } 253 }
237 254
238 work_queue = nullptr; // The queue may have been unregistered. 255 work_queue = nullptr; // The queue may have been unregistered.
239 256
240 UpdateWorkQueues(should_trigger_wakeup, &previous_task, lazy_now); 257 UpdateWorkQueues(should_trigger_wakeup, &previous_task, lazy_now);
241 258
242 // Only run a single task per batch in nested run loops so that we can 259 // Only run a single task per batch in nested run loops so that we can
243 // properly exit the nested loop when someone calls RunLoop::Quit(). 260 // properly exit the nested loop when someone calls RunLoop::Quit().
244 if (delegate_->IsNested()) 261 if (delegate_->IsNested())
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 DCHECK(main_thread_checker_.CalledOnValidThread()); 451 DCHECK(main_thread_checker_.CalledOnValidThread());
435 DCHECK(!work_queue->Empty()); 452 DCHECK(!work_queue->Empty());
436 if (observer_) { 453 if (observer_) {
437 observer_->OnTriedToExecuteBlockedTask(*work_queue->task_queue(), 454 observer_->OnTriedToExecuteBlockedTask(*work_queue->task_queue(),
438 *work_queue->GetFrontTask()); 455 *work_queue->GetFrontTask());
439 } 456 }
440 } 457 }
441 458
442 } // namespace scheduler 459 } // namespace scheduler
443 } // namespace blink 460 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698