Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 | |
| OLD | NEW |