| Index: cc/scheduler/scheduler.cc
|
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
|
| index a84c1ba8a67c4b2b01c8705b248821683be4100a..3f5c3a39e3a429680375f6cb665bff39dc519c0f 100644
|
| --- a/cc/scheduler/scheduler.cc
|
| +++ b/cc/scheduler/scheduler.cc
|
| @@ -31,19 +31,11 @@ scoped_ptr<Scheduler> Scheduler::Create(
|
| const SchedulerSettings& settings,
|
| int layer_tree_host_id,
|
| base::SingleThreadTaskRunner* task_runner,
|
| - BeginFrameSource* external_frame_source,
|
| + BeginFrameSource* begin_frame_source,
|
| scoped_ptr<CompositorTimingHistory> compositor_timing_history) {
|
| - scoped_ptr<SyntheticBeginFrameSource> synthetic_frame_source;
|
| - if (!settings.use_external_begin_frame_source) {
|
| - synthetic_frame_source = SyntheticBeginFrameSource::Create(
|
| - task_runner, BeginFrameArgs::DefaultInterval());
|
| - }
|
| - scoped_ptr<BackToBackBeginFrameSource> unthrottled_frame_source =
|
| - BackToBackBeginFrameSource::Create(task_runner);
|
| - return make_scoped_ptr(new Scheduler(
|
| - client, settings, layer_tree_host_id, task_runner, external_frame_source,
|
| - std::move(synthetic_frame_source), std::move(unthrottled_frame_source),
|
| - std::move(compositor_timing_history)));
|
| + return make_scoped_ptr(new Scheduler(client, settings, layer_tree_host_id,
|
| + task_runner, begin_frame_source,
|
| + std::move(compositor_timing_history)));
|
| }
|
|
|
| Scheduler::Scheduler(
|
| @@ -51,19 +43,14 @@ Scheduler::Scheduler(
|
| const SchedulerSettings& settings,
|
| int layer_tree_host_id,
|
| base::SingleThreadTaskRunner* task_runner,
|
| - BeginFrameSource* external_frame_source,
|
| - scoped_ptr<SyntheticBeginFrameSource> synthetic_frame_source,
|
| - scoped_ptr<BackToBackBeginFrameSource> unthrottled_frame_source,
|
| + BeginFrameSource* begin_frame_source,
|
| scoped_ptr<CompositorTimingHistory> compositor_timing_history)
|
| : settings_(settings),
|
| client_(client),
|
| layer_tree_host_id_(layer_tree_host_id),
|
| task_runner_(task_runner),
|
| - external_frame_source_(external_frame_source),
|
| - synthetic_frame_source_(std::move(synthetic_frame_source)),
|
| - unthrottled_frame_source_(std::move(unthrottled_frame_source)),
|
| - frame_source_(BeginFrameSourceMultiplexer::Create()),
|
| - observing_frame_source_(false),
|
| + begin_frame_source_(begin_frame_source),
|
| + observing_begin_frame_source_(false),
|
| compositor_timing_history_(std::move(compositor_timing_history)),
|
| begin_impl_frame_deadline_mode_(
|
| SchedulerStateMachine::BEGIN_IMPL_FRAME_DEADLINE_MODE_NONE),
|
| @@ -75,33 +62,19 @@ Scheduler::Scheduler(
|
| TRACE_EVENT1("cc", "Scheduler::Scheduler", "settings", settings_.AsValue());
|
| DCHECK(client_);
|
| DCHECK(!state_machine_.BeginFrameNeeded());
|
| - DCHECK(!settings_.use_external_begin_frame_source || external_frame_source_);
|
| - DCHECK(settings_.use_external_begin_frame_source || synthetic_frame_source_);
|
| - DCHECK(unthrottled_frame_source_);
|
|
|
| begin_retro_frame_closure_ =
|
| base::Bind(&Scheduler::BeginRetroFrame, weak_factory_.GetWeakPtr());
|
| begin_impl_frame_deadline_closure_ = base::Bind(
|
| &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr());
|
|
|
| - frame_source_->AddSource(primary_frame_source());
|
| - primary_frame_source()->SetClientReady();
|
| -
|
| - frame_source_->AddSource(unthrottled_frame_source_.get());
|
| - unthrottled_frame_source_->SetClientReady();
|
| -
|
| - if (settings_.throttle_frame_production) {
|
| - frame_source_->SetActiveSource(primary_frame_source());
|
| - } else {
|
| - frame_source_->SetActiveSource(unthrottled_frame_source_.get());
|
| - }
|
| + begin_frame_source_->SetClientReady();
|
| ProcessScheduledActions();
|
| }
|
|
|
| Scheduler::~Scheduler() {
|
| - if (observing_frame_source_)
|
| - frame_source_->RemoveObserver(this);
|
| - frame_source_->SetActiveSource(nullptr);
|
| + if (observing_begin_frame_source_)
|
| + begin_frame_source_->RemoveObserver(this);
|
| }
|
|
|
| base::TimeTicks Scheduler::Now() const {
|
| @@ -113,21 +86,6 @@ base::TimeTicks Scheduler::Now() const {
|
| return now;
|
| }
|
|
|
| -void Scheduler::CommitVSyncParameters(base::TimeTicks timebase,
|
| - base::TimeDelta interval) {
|
| - if (authoritative_vsync_interval_ != base::TimeDelta()) {
|
| - interval = authoritative_vsync_interval_;
|
| - } else if (interval == base::TimeDelta()) {
|
| - // TODO(brianderson): We should not be receiving 0 intervals.
|
| - interval = BeginFrameArgs::DefaultInterval();
|
| - }
|
| -
|
| - last_vsync_timebase_ = timebase;
|
| -
|
| - if (synthetic_frame_source_)
|
| - synthetic_frame_source_->OnUpdateVSyncParameters(timebase, interval);
|
| -}
|
| -
|
| void Scheduler::SetEstimatedParentDrawTime(base::TimeDelta draw_time) {
|
| DCHECK_GE(draw_time.ToInternalValue(), 0);
|
| estimated_parent_draw_time_ = draw_time;
|
| @@ -241,7 +199,7 @@ void Scheduler::DidLoseOutputSurface() {
|
|
|
| void Scheduler::DidCreateAndInitializeOutputSurface() {
|
| TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface");
|
| - DCHECK(!observing_frame_source_);
|
| + DCHECK(!observing_begin_frame_source_);
|
| DCHECK(begin_impl_frame_deadline_task_.IsCancelled());
|
| state_machine_.DidCreateAndInitializeOutputSurface();
|
| compositor_timing_history_->DidCreateAndInitializeOutputSurface();
|
| @@ -272,18 +230,18 @@ void Scheduler::BeginImplFrameNotExpectedSoon() {
|
| void Scheduler::SetupNextBeginFrameIfNeeded() {
|
| // Never call SetNeedsBeginFrames if the frame source already has the right
|
| // value.
|
| - if (observing_frame_source_ != state_machine_.BeginFrameNeeded()) {
|
| + if (observing_begin_frame_source_ != state_machine_.BeginFrameNeeded()) {
|
| if (state_machine_.BeginFrameNeeded()) {
|
| // Call AddObserver as soon as possible.
|
| - observing_frame_source_ = true;
|
| - frame_source_->AddObserver(this);
|
| + observing_begin_frame_source_ = true;
|
| + begin_frame_source_->AddObserver(this);
|
| devtools_instrumentation::NeedsBeginFrameChanged(layer_tree_host_id_,
|
| true);
|
| } else if (state_machine_.begin_impl_frame_state() ==
|
| SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE) {
|
| // Call RemoveObserver in between frames only.
|
| - observing_frame_source_ = false;
|
| - frame_source_->RemoveObserver(this);
|
| + observing_begin_frame_source_ = false;
|
| + begin_frame_source_->RemoveObserver(this);
|
| BeginImplFrameNotExpectedSoon();
|
| devtools_instrumentation::NeedsBeginFrameChanged(layer_tree_host_id_,
|
| false);
|
| @@ -340,7 +298,8 @@ bool Scheduler::OnBeginFrameDerivedImpl(const BeginFrameArgs& args) {
|
|
|
| bool should_defer_begin_frame =
|
| !begin_retro_frame_args_.empty() ||
|
| - !begin_retro_frame_task_.IsCancelled() || !observing_frame_source_ ||
|
| + !begin_retro_frame_task_.IsCancelled() ||
|
| + !observing_begin_frame_source_ ||
|
| (state_machine_.begin_impl_frame_state() !=
|
| SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
|
|
|
| @@ -360,14 +319,6 @@ void Scheduler::SetChildrenNeedBeginFrames(bool children_need_begin_frames) {
|
| ProcessScheduledActions();
|
| }
|
|
|
| -void Scheduler::SetAuthoritativeVSyncInterval(const base::TimeDelta& interval) {
|
| - authoritative_vsync_interval_ = interval;
|
| - if (synthetic_frame_source_) {
|
| - synthetic_frame_source_->OnUpdateVSyncParameters(last_vsync_timebase_,
|
| - interval);
|
| - }
|
| -}
|
| -
|
| void Scheduler::SetVideoNeedsBeginFrames(bool video_needs_begin_frames) {
|
| state_machine_.SetVideoNeedsBeginFrames(video_needs_begin_frames);
|
| ProcessScheduledActions();
|
| @@ -419,7 +370,7 @@ void Scheduler::BeginRetroFrame() {
|
| "expiration_time - now", (expiration_time - now).InMillisecondsF(),
|
| "BeginFrameArgs", begin_retro_frame_args_.front().AsValue());
|
| begin_retro_frame_args_.pop_front();
|
| - frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
|
| + begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
|
| }
|
|
|
| if (begin_retro_frame_args_.empty()) {
|
| @@ -442,7 +393,7 @@ void Scheduler::PostBeginRetroFrameIfNeeded() {
|
| "Scheduler::PostBeginRetroFrameIfNeeded",
|
| "state",
|
| AsValue());
|
| - if (!observing_frame_source_)
|
| + if (!observing_begin_frame_source_)
|
| return;
|
|
|
| if (begin_retro_frame_args_.empty() || !begin_retro_frame_task_.IsCancelled())
|
| @@ -512,7 +463,7 @@ void Scheduler::BeginImplFrameWithDeadline(const BeginFrameArgs& args) {
|
| can_activate_before_deadline)) {
|
| TRACE_EVENT_INSTANT0("cc", "SkipBeginImplFrameToReduceLatency",
|
| TRACE_EVENT_SCOPE_THREAD);
|
| - frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
|
| + begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
|
| return;
|
| }
|
|
|
| @@ -544,7 +495,7 @@ void Scheduler::FinishImplFrame() {
|
| ProcessScheduledActions();
|
|
|
| client_->DidFinishImplFrame();
|
| - frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
|
| + begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
|
| begin_impl_frame_tracker_.Finish();
|
| }
|
|
|
| @@ -795,23 +746,17 @@ void Scheduler::AsValueInto(base::trace_event::TracedValue* state) const {
|
| TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"),
|
| &frame_tracing_enabled);
|
| if (frame_tracing_enabled) {
|
| - state->BeginDictionary("frame_source_");
|
| - frame_source_->AsValueInto(state);
|
| + state->BeginDictionary("begin_frame_source_");
|
| + begin_frame_source_->AsValueInto(state);
|
| state->EndDictionary();
|
| }
|
|
|
| state->BeginDictionary("scheduler_state");
|
| - state->SetBoolean("external_frame_source_", !!external_frame_source_);
|
| state->SetBoolean("throttle_frame_production_",
|
| settings_.throttle_frame_production);
|
| - state->SetDouble("authoritative_vsync_interval_ms",
|
| - authoritative_vsync_interval_.InMillisecondsF());
|
| - state->SetDouble(
|
| - "last_vsync_timebase_ms",
|
| - (last_vsync_timebase_ - base::TimeTicks()).InMillisecondsF());
|
| state->SetDouble("estimated_parent_draw_time_ms",
|
| estimated_parent_draw_time_.InMillisecondsF());
|
| - state->SetBoolean("observing_frame_source", observing_frame_source_);
|
| + state->SetBoolean("observing_frame_source", observing_begin_frame_source_);
|
| state->SetInteger("begin_retro_frame_args",
|
| static_cast<int>(begin_retro_frame_args_.size()));
|
| state->SetBoolean("begin_retro_frame_task",
|
|
|