Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3258)

Unified Diff: cc/scheduler/begin_frame_source.cc

Issue 2888043004: [cc] Add and plumb CFS::DidNotProduceFrame. (Closed)
Patch Set: address nits, rename to DidNotProduceFrame. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/scheduler/begin_frame_source.h ('k') | cc/scheduler/begin_frame_source_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « cc/scheduler/begin_frame_source.h ('k') | cc/scheduler/begin_frame_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698