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

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

Issue 2265873004: [scheduler] Monitor renderer load level. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
(Empty)
1 #include "platform/scheduler/renderer/renderer_load_tracker.h"
2
3 namespace blink {
4 namespace scheduler {
5
6 namespace {
7
8 const int kLoadReportingIntervalInMilliseconds = 1000;
9 const int kWaitingPeriodBeforeReportingInSeconds = 10;
10
11 } // namespace
12
13 RendererLoadTracker::RendererLoadTracker(base::TimeTicks now,
14 const Callback& callback)
15 : current_time_(now),
16 next_reporting_time_(now),
17 active_(true),
18 last_status_change_time_(now),
19 waiting_period_(
20 base::TimeDelta::FromSeconds(kWaitingPeriodBeforeReportingInSeconds)),
21 reporting_interval_(base::TimeDelta::FromMilliseconds(
22 kLoadReportingIntervalInMilliseconds)),
23 callback_(callback) {}
24
25 RendererLoadTracker::~RendererLoadTracker() {}
26
27 void RendererLoadTracker::Pause(base::TimeTicks now) {
28 Advance(now, true, false);
29 active_ = false;
30 last_status_change_time_ = now;
31 }
32
33 void RendererLoadTracker::Resume(base::TimeTicks now) {
34 Advance(now, false, false);
35 active_ = true;
36 last_status_change_time_ = now;
37 }
38
39 void RendererLoadTracker::RecordTaskTime(base::TimeTicks start_time,
40 base::TimeTicks end_time) {
41 start_time = std::max(last_status_change_time_, start_time);
42 end_time = std::max(last_status_change_time_, end_time);
43
44 Advance(start_time, active_, false);
45 Advance(end_time, active_, true);
46 }
47
48 void RendererLoadTracker::RecordIdle(base::TimeTicks now) {
49 Advance(now, active_, false);
50 }
51
52 void RendererLoadTracker::Advance(base::TimeTicks now,
53 bool is_active,
Sami 2016/08/22 14:33:16 nit: The call sites would be a bit easier to read
altimin 2016/08/22 15:36:23 Done.
54 bool is_task_running) {
55 if (current_time_ > now) {
56 return;
57 }
58
59 while (true) {
60 base::TimeTicks next_current_time = std::min(next_reporting_time_, now);
61
62 base::TimeDelta delta = next_current_time - current_time_;
63
64 if (is_active) {
65 total_time_ += delta;
66 if (is_task_running) {
67 total_runtime_ += delta;
68 }
69 }
70 current_time_ = next_current_time;
71
72 if (current_time_ == next_reporting_time_) {
73 if (is_active && total_time_ >= waiting_period_) {
74 callback_.Run(current_time_, Load());
75 }
76 next_reporting_time_ += reporting_interval_;
77 } else {
78 break;
79 }
80 }
81 }
82
83 double RendererLoadTracker::Load() {
84 if (total_time_.is_zero()) {
85 return 0;
86 }
87 return total_runtime_.InSecondsF() / total_time_.InSecondsF();
88 }
89
90 } // namespace scheduler
91 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698