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

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: Switch TaskTimeTracker over to WebThread::TaskTimeObserver 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/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 18 matching lines...) Expand all
29 // the cost of loading tasks. 29 // the cost of loading tasks.
30 const int kLoadingTaskEstimationSampleCount = 1000; 30 const int kLoadingTaskEstimationSampleCount = 1000;
31 const double kLoadingTaskEstimationPercentile = 99; 31 const double kLoadingTaskEstimationPercentile = 99;
32 const int kTimerTaskEstimationSampleCount = 1000; 32 const int kTimerTaskEstimationSampleCount = 1000;
33 const double kTimerTaskEstimationPercentile = 99; 33 const double kTimerTaskEstimationPercentile = 99;
34 const int kShortIdlePeriodDurationSampleCount = 10; 34 const int kShortIdlePeriodDurationSampleCount = 10;
35 const double kShortIdlePeriodDurationPercentile = 50; 35 const double kShortIdlePeriodDurationPercentile = 50;
36 // Amount of idle time left in a frame (as a ratio of the vsync interval) above 36 // Amount of idle time left in a frame (as a ratio of the vsync interval) above
37 // which main thread compositing can be considered fast. 37 // which main thread compositing can be considered fast.
38 const double kFastCompositingIdleTimeThreshold = .2; 38 const double kFastCompositingIdleTimeThreshold = .2;
39
40 base::TimeTicks MonotonicTimeInSecondsToTimeTicks(double monotonicTimeInSeconds) {
41 return base::TimeTicks::FromInternalValue(
alph 2016/08/22 22:21:27 nit: Consider the following one, as it ensures bet
panicker 2016/08/22 23:29:46 What's the an equivalent counterpart for convertin
alph 2016/08/22 23:51:07 Added it as a comment.
panicker 2016/08/25 23:11:52 Done.
42 monotonicTimeInSeconds * base::Time::kMicrosecondsPerSecond);
43 }
39 } // namespace 44 } // namespace
40 45
41 RendererSchedulerImpl::RendererSchedulerImpl( 46 RendererSchedulerImpl::RendererSchedulerImpl(
42 scoped_refptr<SchedulerTqmDelegate> main_task_runner) 47 scoped_refptr<SchedulerTqmDelegate> main_task_runner)
43 : helper_(main_task_runner, 48 : helper_(main_task_runner,
44 "renderer.scheduler", 49 "renderer.scheduler",
45 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 50 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
46 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")), 51 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")),
47 idle_helper_(&helper_, 52 idle_helper_(&helper_,
48 this, 53 this,
(...skipping 25 matching lines...) Expand all
74 weak_factory_.GetWeakPtr())); 79 weak_factory_.GetWeakPtr()));
75 80
76 default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq"); 81 default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq");
77 default_timer_task_runner_ = NewTimerTaskRunner("default_timer_tq"); 82 default_timer_task_runner_ = NewTimerTaskRunner("default_timer_tq");
78 83
79 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 84 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
80 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", 85 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
81 this); 86 this);
82 87
83 helper_.SetObserver(this); 88 helper_.SetObserver(this);
84 helper_.SetTaskTimeTracker(this); 89 helper_.AddTaskTimeObserver(this);
85 } 90 }
86 91
87 RendererSchedulerImpl::~RendererSchedulerImpl() { 92 RendererSchedulerImpl::~RendererSchedulerImpl() {
88 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 93 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
89 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", 94 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
90 this); 95 this);
91 96
92 for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) { 97 for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) {
93 loading_queue->RemoveTaskObserver( 98 loading_queue->RemoveTaskObserver(
94 &MainThreadOnly().loading_task_cost_estimator); 99 &MainThreadOnly().loading_task_cost_estimator);
95 } 100 }
96 for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) { 101 for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) {
97 timer_queue->RemoveTaskObserver( 102 timer_queue->RemoveTaskObserver(
98 &MainThreadOnly().timer_task_cost_estimator); 103 &MainThreadOnly().timer_task_cost_estimator);
99 } 104 }
100 105
101 if (virtual_time_domain_) 106 if (virtual_time_domain_)
102 UnregisterTimeDomain(virtual_time_domain_.get()); 107 UnregisterTimeDomain(virtual_time_domain_.get());
103 108
109 helper_.RemoveTaskTimeObserver(this);
110
104 // Ensure the renderer scheduler was shut down explicitly, because otherwise 111 // Ensure the renderer scheduler was shut down explicitly, because otherwise
105 // we could end up having stale pointers to the Blink heap which has been 112 // we could end up having stale pointers to the Blink heap which has been
106 // terminated by this point. 113 // terminated by this point.
107 DCHECK(MainThreadOnly().was_shutdown); 114 DCHECK(MainThreadOnly().was_shutdown);
108 } 115 }
109 116
110 RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( 117 RendererSchedulerImpl::MainThreadOnly::MainThreadOnly(
111 RendererSchedulerImpl* renderer_scheduler_impl, 118 RendererSchedulerImpl* renderer_scheduler_impl,
112 const scoped_refptr<TaskQueue>& compositor_task_runner, 119 const scoped_refptr<TaskQueue>& compositor_task_runner,
113 base::TickClock* time_source) 120 base::TickClock* time_source)
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 true; 1407 true;
1401 BroadcastIntervention( 1408 BroadcastIntervention(
1402 "Blink deferred a task in order to make scrolling smoother. " 1409 "Blink deferred a task in order to make scrolling smoother. "
1403 "Your timer and network tasks should take less than 50ms to run " 1410 "Your timer and network tasks should take less than 50ms to run "
1404 "to avoid this. Please see " 1411 "to avoid this. Please see "
1405 "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat e-performance/rail" 1412 "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat e-performance/rail"
1406 " and https://crbug.com/574343#c40 for more information."); 1413 " and https://crbug.com/574343#c40 for more information.");
1407 } 1414 }
1408 } 1415 }
1409 1416
1410 void RendererSchedulerImpl::ReportTaskTime(base::TimeTicks start_time, 1417 void RendererSchedulerImpl::reportTaskTime(double start_time,
Sami 2016/08/22 15:51:30 FYI, altimin@ is adding another task time consumer
panicker 2016/08/22 23:14:15 Acknowledged.
1411 base::TimeTicks end_time) { 1418 double end_time) {
1412 MainThreadOnly().queueing_time_estimator.OnToplevelTaskCompleted(start_time, 1419 base::TimeTicks start_time_ticks = MonotonicTimeInSecondsToTimeTicks(start_tim e);
1413 end_time); 1420 base::TimeTicks end_time_ticks = MonotonicTimeInSecondsToTimeTicks(end_time);
1414 MainThreadOnly().long_task_tracker.RecordLongTask( 1421
1415 start_time, end_time - start_time); 1422 MainThreadOnly().queueing_time_estimator.OnToplevelTaskCompleted(start_time_ti cks,
1423 end_time_tick s);
1416 UMA_HISTOGRAM_CUSTOM_COUNTS("RendererScheduler.TaskTime", 1424 UMA_HISTOGRAM_CUSTOM_COUNTS("RendererScheduler.TaskTime",
1417 (end_time - start_time).InMicroseconds(), 1, 1425 (end_time_ticks - start_time_ticks).InMicroseconds (), 1,
1418 1000000, 50); 1426 1000000, 50);
1419 } 1427 }
1420 1428
1421 LongTaskTracker::LongTaskTiming RendererSchedulerImpl::GetLongTaskTiming() { 1429 void RendererSchedulerImpl::AddTaskTimeObserver(
1422 return MainThreadOnly().long_task_tracker.GetLongTaskTiming(); 1430 WebThread::TaskTimeObserver* task_time_observer) {
1431 helper_.AddTaskTimeObserver(task_time_observer);
1432 }
1433
1434 void RendererSchedulerImpl::RemoveTaskTimeObserver(
1435 WebThread::TaskTimeObserver* task_time_observer) {
1436 helper_.RemoveTaskTimeObserver(task_time_observer);
1423 } 1437 }
1424 1438
1425 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated( 1439 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
1426 base::TimeDelta queueing_time) { 1440 base::TimeDelta queueing_time) {
1427 UMA_HISTOGRAM_TIMES("RendererScheduler.ExpectedTaskQueueingDuration", 1441 UMA_HISTOGRAM_TIMES("RendererScheduler.ExpectedTaskQueueingDuration",
1428 queueing_time); 1442 queueing_time);
1429 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1443 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1430 "estimated_queueing_time_for_window", 1444 "estimated_queueing_time_for_window",
1431 queueing_time.InMillisecondsF()); 1445 queueing_time.InMillisecondsF());
1432 } 1446 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1488 case v8::PERFORMANCE_LOAD: 1502 case v8::PERFORMANCE_LOAD:
1489 return "load"; 1503 return "load";
1490 default: 1504 default:
1491 NOTREACHED(); 1505 NOTREACHED();
1492 return nullptr; 1506 return nullptr;
1493 } 1507 }
1494 } 1508 }
1495 1509
1496 } // namespace scheduler 1510 } // namespace scheduler
1497 } // namespace blink 1511 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698