| Index: cc/scheduler/begin_frame_source.cc
 | 
| diff --git a/cc/scheduler/begin_frame_source.cc b/cc/scheduler/begin_frame_source.cc
 | 
| index 5af7b4cd14a8d2a969e141603f612094d652c2ba..be6394e617a88882f5806432ef0d3de16927d2cc 100644
 | 
| --- a/cc/scheduler/begin_frame_source.cc
 | 
| +++ b/cc/scheduler/begin_frame_source.cc
 | 
| @@ -252,112 +252,6 @@ void DelayBasedBeginFrameSource::OnTimerTick() {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -// BeginFrameObserverAckTracker -------------------------------------------
 | 
| -BeginFrameObserverAckTracker::BeginFrameObserverAckTracker() = default;
 | 
| -
 | 
| -BeginFrameObserverAckTracker::~BeginFrameObserverAckTracker() = default;
 | 
| -
 | 
| -void BeginFrameObserverAckTracker::OnBeginFrame(const BeginFrameArgs& args) {
 | 
| -  if (current_source_id_ != args.source_id)
 | 
| -    SourceChanged(args);
 | 
| -
 | 
| -  DCHECK_GE(args.sequence_number, current_sequence_number_);
 | 
| -  // Reset for new BeginFrame.
 | 
| -  current_sequence_number_ = args.sequence_number;
 | 
| -  finished_observers_.clear();
 | 
| -  observers_had_damage_ = false;
 | 
| -}
 | 
| -
 | 
| -void BeginFrameObserverAckTracker::SourceChanged(const BeginFrameArgs& args) {
 | 
| -  current_source_id_ = args.source_id;
 | 
| -  current_sequence_number_ = args.sequence_number;
 | 
| -
 | 
| -  // Mark all observers invalid: We report an invalid frame until every observer
 | 
| -  // has confirmed the frame.
 | 
| -  for (auto& entry : latest_confirmed_sequence_numbers_)
 | 
| -    entry.second = BeginFrameArgs::kInvalidFrameNumber;
 | 
| -}
 | 
| -
 | 
| -void BeginFrameObserverAckTracker::OnObserverFinishedFrame(
 | 
| -    BeginFrameObserver* obs,
 | 
| -    const BeginFrameAck& ack) {
 | 
| -  if (ack.source_id != current_source_id_)
 | 
| -    return;
 | 
| -
 | 
| -  DCHECK_LE(ack.sequence_number, current_sequence_number_);
 | 
| -  if (ack.sequence_number != current_sequence_number_)
 | 
| -    return;
 | 
| -
 | 
| -  finished_observers_.insert(obs);
 | 
| -  observers_had_damage_ |= ack.has_damage;
 | 
| -
 | 
| -  // We max() with the current value in |latest_confirmed_sequence_numbers_| to
 | 
| -  // handle situations where an observer just started observing (again) and may
 | 
| -  // acknowledge with an ancient latest_confirmed_sequence_number.
 | 
| -  latest_confirmed_sequence_numbers_[obs] =
 | 
| -      std::max(ack.latest_confirmed_sequence_number,
 | 
| -               latest_confirmed_sequence_numbers_[obs]);
 | 
| -}
 | 
| -
 | 
| -void BeginFrameObserverAckTracker::OnObserverAdded(BeginFrameObserver* obs) {
 | 
| -  observers_.insert(obs);
 | 
| -
 | 
| -  // Since the observer didn't want BeginFrames before, we consider it
 | 
| -  // up-to-date up to the last BeginFrame, except if it already handled the
 | 
| -  // current BeginFrame. In which case, we consider it up-to-date up to the
 | 
| -  // current one.
 | 
| -  DCHECK_LT(BeginFrameArgs::kInvalidFrameNumber, current_sequence_number_);
 | 
| -  const BeginFrameArgs& last_args = obs->LastUsedBeginFrameArgs();
 | 
| -  if (last_args.IsValid() &&
 | 
| -      last_args.sequence_number == current_sequence_number_ &&
 | 
| -      last_args.source_id == current_source_id_) {
 | 
| -    latest_confirmed_sequence_numbers_[obs] = current_sequence_number_;
 | 
| -    finished_observers_.insert(obs);
 | 
| -  } else {
 | 
| -    latest_confirmed_sequence_numbers_[obs] = current_sequence_number_ - 1;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void BeginFrameObserverAckTracker::OnObserverRemoved(BeginFrameObserver* obs) {
 | 
| -  observers_.erase(obs);
 | 
| -  finished_observers_.erase(obs);
 | 
| -  latest_confirmed_sequence_numbers_.erase(obs);
 | 
| -}
 | 
| -
 | 
| -bool BeginFrameObserverAckTracker::AllObserversFinishedFrame() const {
 | 
| -  if (finished_observers_.size() < observers_.size())
 | 
| -    return false;
 | 
| -  return base::STLIncludes(finished_observers_, observers_);
 | 
| -}
 | 
| -
 | 
| -bool BeginFrameObserverAckTracker::AnyObserversHadDamage() const {
 | 
| -  return observers_had_damage_;
 | 
| -}
 | 
| -
 | 
| -uint64_t BeginFrameObserverAckTracker::LatestConfirmedSequenceNumber() const {
 | 
| -  uint64_t latest_confirmed_sequence_number = current_sequence_number_;
 | 
| -  for (const auto& entry : latest_confirmed_sequence_numbers_) {
 | 
| -    latest_confirmed_sequence_number =
 | 
| -        std::min(latest_confirmed_sequence_number, entry.second);
 | 
| -  }
 | 
| -  return latest_confirmed_sequence_number;
 | 
| -}
 | 
| -
 | 
| -void BeginFrameObserverAckTracker::AsValueInto(
 | 
| -    base::trace_event::TracedValue* state) const {
 | 
| -  state->SetInteger("current_source_id", current_source_id_);
 | 
| -  state->SetInteger("current_sequence_number", current_sequence_number_);
 | 
| -  state->SetInteger("num_observers", observers_.size());
 | 
| -  state->SetInteger("num_finished_observers", finished_observers_.size());
 | 
| -  state->SetBoolean("observers_had_damage", observers_had_damage_);
 | 
| -
 | 
| -  state->BeginArray("latest_confirmed_sequence_numbers");
 | 
| -  for (const auto& kv : latest_confirmed_sequence_numbers_) {
 | 
| -    state->AppendInteger(kv.second);
 | 
| -  }
 | 
| -  state->EndArray();
 | 
| -}
 | 
| -
 | 
|  // ExternalBeginFrameSource -----------------------------------------------
 | 
|  ExternalBeginFrameSource::ExternalBeginFrameSource(
 | 
|      ExternalBeginFrameSourceClient* client)
 | 
| @@ -372,16 +266,11 @@ void ExternalBeginFrameSource::AsValueInto(
 | 
|    BeginFrameSource::AsValueInto(state);
 | 
|  
 | 
|    state->SetBoolean("paused", paused_);
 | 
| -  state->SetBoolean("frame_active", frame_active_);
 | 
|    state->SetInteger("num_observers", observers_.size());
 | 
|  
 | 
|    state->BeginDictionary("last_begin_frame_args");
 | 
|    last_begin_frame_args_.AsValueInto(state);
 | 
|    state->EndDictionary();
 | 
| -
 | 
| -  state->BeginDictionary("ack_tracker_state");
 | 
| -  ack_tracker_.AsValueInto(state);
 | 
| -  state->EndDictionary();
 | 
|  }
 | 
|  
 | 
|  void ExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
 | 
| @@ -390,7 +279,6 @@ void ExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
 | 
|  
 | 
|    bool observers_was_empty = observers_.empty();
 | 
|    observers_.insert(obs);
 | 
| -  ack_tracker_.OnObserverAdded(obs);
 | 
|    obs->OnBeginFrameSourcePausedChanged(paused_);
 | 
|    if (observers_was_empty)
 | 
|      client_->OnNeedsBeginFrames(true);
 | 
| @@ -417,8 +305,6 @@ void ExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
 | 
|    DCHECK(observers_.find(obs) != observers_.end());
 | 
|  
 | 
|    observers_.erase(obs);
 | 
| -  ack_tracker_.OnObserverRemoved(obs);
 | 
| -  MaybeFinishFrame();
 | 
|    if (observers_.empty()) {
 | 
|      last_begin_frame_args_ = BeginFrameArgs();
 | 
|      client_->OnNeedsBeginFrames(false);
 | 
| @@ -426,10 +312,7 @@ void ExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
 | 
|  }
 | 
|  
 | 
|  void ExternalBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs,
 | 
| -                                              const BeginFrameAck& ack) {
 | 
| -  ack_tracker_.OnObserverFinishedFrame(obs, ack);
 | 
| -  MaybeFinishFrame();
 | 
| -}
 | 
| +                                              const BeginFrameAck& ack) {}
 | 
|  
 | 
|  bool ExternalBeginFrameSource::IsThrottled() const {
 | 
|    return true;
 | 
| @@ -445,12 +328,7 @@ void ExternalBeginFrameSource::OnSetBeginFrameSourcePaused(bool paused) {
 | 
|  }
 | 
|  
 | 
|  void ExternalBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) {
 | 
| -  if (frame_active_)
 | 
| -    FinishFrame();
 | 
| -
 | 
| -  frame_active_ = true;
 | 
|    last_begin_frame_args_ = args;
 | 
| -  ack_tracker_.OnBeginFrame(args);
 | 
|    std::unordered_set<BeginFrameObserver*> observers(observers_);
 | 
|    for (auto* obs : observers) {
 | 
|      // It is possible that the source in which |args| originate changes, or that
 | 
| @@ -465,23 +343,6 @@ void ExternalBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) {
 | 
|        obs->OnBeginFrame(args);
 | 
|      }
 | 
|    }
 | 
| -  MaybeFinishFrame();
 | 
| -}
 | 
| -
 | 
| -void ExternalBeginFrameSource::MaybeFinishFrame() {
 | 
| -  if (!frame_active_ || !ack_tracker_.AllObserversFinishedFrame())
 | 
| -    return;
 | 
| -  FinishFrame();
 | 
| -}
 | 
| -
 | 
| -void ExternalBeginFrameSource::FinishFrame() {
 | 
| -  frame_active_ = false;
 | 
| -
 | 
| -  BeginFrameAck ack(last_begin_frame_args_.source_id,
 | 
| -                    last_begin_frame_args_.sequence_number,
 | 
| -                    ack_tracker_.LatestConfirmedSequenceNumber(),
 | 
| -                    ack_tracker_.AnyObserversHadDamage());
 | 
| -  client_->OnDidFinishFrame(ack);
 | 
|  }
 | 
|  
 | 
|  }  // namespace cc
 | 
| 
 |