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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.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: address nit: task_start_time initialization 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 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/renderer/renderer_scheduler_impl.h" 5 #include "platform/scheduler/renderer/renderer_scheduler_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/stack_trace.h" 8 #include "base/debug/stack_trace.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 "RendererScheduler.ForegroundRendererLoad", load); 44 "RendererScheduler.ForegroundRendererLoad", load);
45 } 45 }
46 46
47 void ReportBackgroundRendererTaskLoad(base::TimeTicks time, double load) { 47 void ReportBackgroundRendererTaskLoad(base::TimeTicks time, double load) {
48 UMA_HISTOGRAM_PERCENTAGE("RendererScheduler.BackgroundRendererMainThreadLoad", 48 UMA_HISTOGRAM_PERCENTAGE("RendererScheduler.BackgroundRendererMainThreadLoad",
49 static_cast<int>(load * 100)); 49 static_cast<int>(load * 100));
50 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 50 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
51 "RendererScheduler.BackgroundRendererLoad", load); 51 "RendererScheduler.BackgroundRendererLoad", load);
52 } 52 }
53 53
54 base::TimeTicks MonotonicTimeInSecondsToTimeTicks(
55 double monotonicTimeInSeconds) {
56 return base::TimeTicks() + base::TimeDelta::FromSecondsD(
57 monotonicTimeInSeconds);
58 }
54 } // namespace 59 } // namespace
55 60
56 RendererSchedulerImpl::RendererSchedulerImpl( 61 RendererSchedulerImpl::RendererSchedulerImpl(
57 scoped_refptr<SchedulerTqmDelegate> main_task_runner) 62 scoped_refptr<SchedulerTqmDelegate> main_task_runner)
58 : helper_(main_task_runner, 63 : helper_(main_task_runner,
59 "renderer.scheduler", 64 "renderer.scheduler",
60 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 65 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
61 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")), 66 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")),
62 idle_helper_(&helper_, 67 idle_helper_(&helper_,
63 this, 68 this,
(...skipping 26 matching lines...) Expand all
90 weak_factory_.GetWeakPtr())); 95 weak_factory_.GetWeakPtr()));
91 96
92 default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq"); 97 default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq");
93 default_timer_task_runner_ = NewTimerTaskRunner("default_timer_tq"); 98 default_timer_task_runner_ = NewTimerTaskRunner("default_timer_tq");
94 99
95 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 100 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
96 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", 101 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
97 this); 102 this);
98 103
99 helper_.SetObserver(this); 104 helper_.SetObserver(this);
100 helper_.SetTaskTimeTracker(this); 105 helper_.AddTaskTimeObserver(this);
101 } 106 }
102 107
103 RendererSchedulerImpl::~RendererSchedulerImpl() { 108 RendererSchedulerImpl::~RendererSchedulerImpl() {
104 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 109 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
105 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", 110 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
106 this); 111 this);
107 112
108 for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) { 113 for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) {
109 loading_queue->RemoveTaskObserver( 114 loading_queue->RemoveTaskObserver(
110 &MainThreadOnly().loading_task_cost_estimator); 115 &MainThreadOnly().loading_task_cost_estimator);
111 } 116 }
112 for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) { 117 for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) {
113 timer_queue->RemoveTaskObserver( 118 timer_queue->RemoveTaskObserver(
114 &MainThreadOnly().timer_task_cost_estimator); 119 &MainThreadOnly().timer_task_cost_estimator);
115 } 120 }
116 121
117 if (virtual_time_domain_) 122 if (virtual_time_domain_)
118 UnregisterTimeDomain(virtual_time_domain_.get()); 123 UnregisterTimeDomain(virtual_time_domain_.get());
119 124
125 helper_.RemoveTaskTimeObserver(this);
126
120 // Ensure the renderer scheduler was shut down explicitly, because otherwise 127 // Ensure the renderer scheduler was shut down explicitly, because otherwise
121 // we could end up having stale pointers to the Blink heap which has been 128 // we could end up having stale pointers to the Blink heap which has been
122 // terminated by this point. 129 // terminated by this point.
123 DCHECK(MainThreadOnly().was_shutdown); 130 DCHECK(MainThreadOnly().was_shutdown);
124 } 131 }
125 132
126 RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( 133 RendererSchedulerImpl::MainThreadOnly::MainThreadOnly(
127 RendererSchedulerImpl* renderer_scheduler_impl, 134 RendererSchedulerImpl* renderer_scheduler_impl,
128 const scoped_refptr<TaskQueue>& compositor_task_runner, 135 const scoped_refptr<TaskQueue>& compositor_task_runner,
129 base::TickClock* time_source, 136 base::TickClock* time_source,
(...skipping 1315 matching lines...) Expand 10 before | Expand all | Expand 10 after
1445 true; 1452 true;
1446 BroadcastIntervention( 1453 BroadcastIntervention(
1447 "Blink deferred a task in order to make scrolling smoother. " 1454 "Blink deferred a task in order to make scrolling smoother. "
1448 "Your timer and network tasks should take less than 50ms to run " 1455 "Your timer and network tasks should take less than 50ms to run "
1449 "to avoid this. Please see " 1456 "to avoid this. Please see "
1450 "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat e-performance/rail" 1457 "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat e-performance/rail"
1451 " and https://crbug.com/574343#c40 for more information."); 1458 " and https://crbug.com/574343#c40 for more information.");
1452 } 1459 }
1453 } 1460 }
1454 1461
1455 void RendererSchedulerImpl::ReportTaskTime(base::TimeTicks start_time, 1462 void RendererSchedulerImpl::ReportTaskTime(double start_time, double end_time) {
1456 base::TimeTicks end_time) { 1463 base::TimeTicks start_time_ticks =
1457 MainThreadOnly().queueing_time_estimator.OnToplevelTaskCompleted(start_time, 1464 MonotonicTimeInSecondsToTimeTicks(start_time);
1458 end_time); 1465 base::TimeTicks end_time_ticks = MonotonicTimeInSecondsToTimeTicks(end_time);
1459 MainThreadOnly().long_task_tracker.RecordLongTask( 1466
1460 start_time, end_time - start_time); 1467 MainThreadOnly().queueing_time_estimator.OnToplevelTaskCompleted(
1468 start_time_ticks, end_time_ticks);
1461 // We want to measure thread time here, but for efficiency reasons 1469 // We want to measure thread time here, but for efficiency reasons
1462 // we stick with wall time. 1470 // we stick with wall time.
1463 MainThreadOnly().foreground_main_thread_load_tracker.RecordTaskTime( 1471 MainThreadOnly().foreground_main_thread_load_tracker.RecordTaskTime(
1464 start_time, end_time); 1472 start_time_ticks, end_time_ticks);
1465 MainThreadOnly().background_main_thread_load_tracker.RecordTaskTime( 1473 MainThreadOnly().background_main_thread_load_tracker.RecordTaskTime(
1466 start_time, end_time); 1474 start_time_ticks, end_time_ticks);
1467 // TODO(altimin): Per-page metrics should also be considered. 1475 // TODO(altimin): Per-page metrics should also be considered.
1468 UMA_HISTOGRAM_CUSTOM_COUNTS("RendererScheduler.TaskTime", 1476 UMA_HISTOGRAM_CUSTOM_COUNTS("RendererScheduler.TaskTime",
1469 (end_time - start_time).InMicroseconds(), 1, 1477 (end_time_ticks - start_time_ticks).InMicroseconds (), 1,
1470 1000000, 50); 1478 1000000, 50);
1471 } 1479 }
1472 1480
1473 LongTaskTracker::LongTaskTiming RendererSchedulerImpl::GetLongTaskTiming() { 1481 void RendererSchedulerImpl::AddTaskTimeObserver(
1474 return MainThreadOnly().long_task_tracker.GetLongTaskTiming(); 1482 TaskTimeObserver* task_time_observer) {
1483 helper_.AddTaskTimeObserver(task_time_observer);
1484 }
1485
1486 void RendererSchedulerImpl::RemoveTaskTimeObserver(
1487 TaskTimeObserver* task_time_observer) {
1488 helper_.RemoveTaskTimeObserver(task_time_observer);
1475 } 1489 }
1476 1490
1477 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated( 1491 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
1478 base::TimeDelta queueing_time) { 1492 base::TimeDelta queueing_time) {
1479 UMA_HISTOGRAM_TIMES("RendererScheduler.ExpectedTaskQueueingDuration", 1493 UMA_HISTOGRAM_TIMES("RendererScheduler.ExpectedTaskQueueingDuration",
1480 queueing_time); 1494 queueing_time);
1481 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1495 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1482 "estimated_queueing_time_for_window", 1496 "estimated_queueing_time_for_window",
1483 queueing_time.InMillisecondsF()); 1497 queueing_time.InMillisecondsF());
1484 } 1498 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 case v8::PERFORMANCE_LOAD: 1554 case v8::PERFORMANCE_LOAD:
1541 return "load"; 1555 return "load";
1542 default: 1556 default:
1543 NOTREACHED(); 1557 NOTREACHED();
1544 return nullptr; 1558 return nullptr;
1545 } 1559 }
1546 } 1560 }
1547 1561
1548 } // namespace scheduler 1562 } // namespace scheduler
1549 } // namespace blink 1563 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698