| 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
|
|
|