Index: components/scheduler/renderer/renderer_scheduler_impl.cc |
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc |
index 51015be4f074331d8c7b114d13da895e6365063c..49e6605d32561ee1f27efa31efd6553d9c11597d 100644 |
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc |
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc |
@@ -6,6 +6,7 @@ |
#include "base/bind.h" |
#include "base/debug/stack_trace.h" |
+#include "base/logging.h" |
#include "base/trace_event/trace_event.h" |
#include "base/trace_event/trace_event_argument.h" |
#include "cc/output/begin_frame_args.h" |
@@ -28,7 +29,8 @@ const double kShortIdlePeriodDurationPercentile = 50; |
} |
RendererSchedulerImpl::RendererSchedulerImpl( |
- scoped_refptr<SchedulerTaskRunnerDelegate> main_task_runner) |
+ scoped_refptr<SchedulerTaskRunnerDelegate> main_task_runner, |
+ TimeSource time_source) |
: helper_(main_task_runner, |
"renderer.scheduler", |
TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
@@ -48,7 +50,8 @@ RendererSchedulerImpl::RendererSchedulerImpl( |
base::Bind(&RendererSchedulerImpl::UpdatePolicy, |
base::Unretained(this)), |
helper_.ControlTaskRunner()), |
- main_thread_only_(compositor_task_runner_), |
+ time_source_(time_source), |
+ main_thread_only_(compositor_task_runner_, helper_.tick_clock()), |
policy_may_need_update_(&any_thread_lock_), |
weak_factory_(this) { |
update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy, |
@@ -97,12 +100,16 @@ RendererSchedulerImpl::Policy::Policy() |
default_queue_priority(TaskQueue::NORMAL_PRIORITY) {} |
RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
- const scoped_refptr<TaskQueue>& compositor_task_runner) |
- : loading_task_cost_estimator(kLoadingTaskEstimationSampleCount, |
+ const scoped_refptr<TaskQueue>& compositor_task_runner, |
+ base::TickClock* time_source) |
+ : loading_task_cost_estimator(time_source, |
+ kLoadingTaskEstimationSampleCount, |
kLoadingTaskEstimationPercentile), |
- timer_task_cost_estimator(kTimerTaskEstimationSampleCount, |
+ timer_task_cost_estimator(time_source, |
+ kTimerTaskEstimationSampleCount, |
kTimerTaskEstimationPercentile), |
idle_time_estimator(compositor_task_runner, |
+ time_source, |
kShortIdlePeriodDurationSampleCount, |
kShortIdlePeriodDurationPercentile), |
current_use_case(UseCase::NONE), |
@@ -956,4 +963,24 @@ void RendererSchedulerImpl::ResetForNavigationLocked() { |
UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED); |
} |
+double RendererSchedulerImpl::currentTime() const { |
+ switch (time_source_) { |
Sami
2015/10/28 20:00:35
Do we need to make this distinction here? Why not
alex clarke (OOO till 29th)
2015/10/29 18:07:30
As far as I can tell the distinction is important.
|
+ case TimeSource::NORMAL: |
+ return base::Time::Now().ToDoubleT(); |
+ |
+ case TimeSource::VIRTUAL: |
+ return (helper_.Now() - base::TimeTicks::UnixEpoch()).InSecondsF(); |
+ |
+ default: |
+ break; |
+ } |
+ NOTREACHED(); |
+ return 0; |
+} |
+ |
+double RendererSchedulerImpl::monotonicallyIncreasingTime() const { |
+ return helper_.Now().ToInternalValue() / |
+ static_cast<double>(base::Time::kMicrosecondsPerSecond); |
+} |
+ |
} // namespace scheduler |