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

Unified Diff: content/browser/renderer_host/delegated_frame_host.cc

Issue 2776973002: DelegatedFrameHost should not create an ExternalBeginFrameSource (Closed)
Patch Set: c Created 3 years, 9 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
Index: content/browser/renderer_host/delegated_frame_host.cc
diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc
index 2f9b767e4bb39b200a1af851c531b66791734b34..a844d65c25fac8c0edf4de89211ff54d819d73a6 100644
--- a/content/browser/renderer_host/delegated_frame_host.cc
+++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -59,8 +59,6 @@ DelegatedFrameHost::DelegatedFrameHost(const cc::FrameSinkId& frame_sink_id,
factory->GetContextFactoryPrivate()->GetSurfaceManager()->RegisterFrameSinkId(
frame_sink_id_);
CreateCompositorFrameSinkSupport();
- begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
- client_->SetBeginFrameSource(begin_frame_source_.get());
}
void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) {
@@ -231,6 +229,27 @@ bool DelegatedFrameHost::TransformPointToCoordSpaceForView(
transformed_point);
}
+void DelegatedFrameHost::SetNeedsBeginFrames(bool needs_begin_frames) {
+ needs_begin_frame_ = needs_begin_frames;
+ support_->SetNeedsBeginFrame(needs_begin_frames);
+}
+
+void DelegatedFrameHost::BeginFrameDidNotSwap(const cc::BeginFrameAck& ack) {
+ DidFinishFrame(ack);
+
+ cc::BeginFrameAck modified_ack = ack;
+ if (skipped_frames_) {
+ // If we skipped the last frame(s), we didn't incorporate the last
+ // CompositorFrame's damage, so need to wait for the next one before
+ // confirming newer sequence numbers.
+ modified_ack.has_damage = false;
+ modified_ack.latest_confirmed_sequence_number =
+ latest_confirmed_begin_frame_sequence_number_;
+ }
+
+ support_->BeginFrameDidNotSwap(modified_ack);
+}
+
bool DelegatedFrameHost::ShouldSkipFrame(gfx::Size size_in_dip) const {
// Should skip a frame only when another frame from the renderer is guaranteed
// to replace it. Otherwise may cause hangs when the renderer is waiting for
@@ -379,6 +398,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(
DCHECK(!resize_lock_ || !client_->IsAutoResizeEnabled());
#endif
float frame_device_scale_factor = frame.metadata.device_scale_factor;
+ cc::BeginFrameAck ack(frame.metadata.begin_frame_ack);
DCHECK(!frame.render_pass_list.empty());
@@ -404,6 +424,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(
client_->DelegatedFrameHostSendReclaimCompositorResources(
compositor_frame_sink_id, true /* is_swap_ack*/, resources);
skipped_frames_ = true;
+ BeginFrameDidNotSwap(ack);
return;
}
@@ -482,6 +503,8 @@ void DelegatedFrameHost::SwapDelegatedFrame(
client_->DelegatedFrameHostIsVisible());
}
// Note: the frame may have been evicted immediately.
+
+ DidFinishFrame(ack);
}
void DelegatedFrameHost::ClearDelegatedFrame() {
@@ -512,7 +535,7 @@ void DelegatedFrameHost::WillDrawSurface(const cc::LocalSurfaceId& id,
}
void DelegatedFrameHost::OnBeginFrame(const cc::BeginFrameArgs& args) {
- begin_frame_source_->OnBeginFrame(args);
+ client_->OnBeginFrame(args);
}
void DelegatedFrameHost::EvictDelegatedFrame() {
@@ -756,7 +779,6 @@ DelegatedFrameHost::~DelegatedFrameHost() {
ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
factory->GetContextFactory()->RemoveObserver(this);
- begin_frame_source_.reset();
ResetCompositorFrameSinkSupport();
factory->GetContextFactoryPrivate()
@@ -822,37 +844,6 @@ void DelegatedFrameHost::UnlockResources() {
delegated_frame_evictor_->UnlockFrame();
}
-void DelegatedFrameHost::OnNeedsBeginFrames(bool needs_begin_frames) {
- needs_begin_frame_ = needs_begin_frames;
- support_->SetNeedsBeginFrame(needs_begin_frames);
-}
-
-void DelegatedFrameHost::OnDidFinishFrame(const cc::BeginFrameAck& ack) {
- if (ack.source_id != latest_confirmed_begin_frame_source_id_) {
- // Source changed, we don't know our freshness anymore.
- latest_confirmed_begin_frame_sequence_number_ =
- cc::BeginFrameArgs::kInvalidFrameNumber;
- }
-
- cc::BeginFrameAck modified_ack = ack;
- if (skipped_frames_) {
- // If we skipped the last frame(s), we didn't incorporate the last
- // CompositorFrame's damage, so need to wait for the next one before
- // confirming newer sequence numbers.
- modified_ack.has_damage = false;
- modified_ack.latest_confirmed_sequence_number =
- latest_confirmed_begin_frame_sequence_number_;
- } else {
- latest_confirmed_begin_frame_source_id_ = modified_ack.source_id;
- latest_confirmed_begin_frame_sequence_number_ =
- modified_ack.latest_confirmed_sequence_number;
- }
-
- // If there was damage, the unmodified ack was sent with the CompositorFrame.
- if (!modified_ack.has_damage)
- support_->BeginFrameDidNotSwap(modified_ack);
-}
-
void DelegatedFrameHost::CreateCompositorFrameSinkSupport() {
DCHECK(!support_);
ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
@@ -875,4 +866,18 @@ void DelegatedFrameHost::ResetCompositorFrameSinkSupport() {
support_.reset();
}
+void DelegatedFrameHost::DidFinishFrame(const cc::BeginFrameAck& ack) {
+ if (ack.source_id != latest_confirmed_begin_frame_source_id_) {
+ // Source changed, we don't know our freshness anymore.
+ latest_confirmed_begin_frame_sequence_number_ =
+ cc::BeginFrameArgs::kInvalidFrameNumber;
+ }
+
+ if (!skipped_frames_) {
+ latest_confirmed_begin_frame_source_id_ = ack.source_id;
+ latest_confirmed_begin_frame_sequence_number_ =
+ ack.latest_confirmed_sequence_number;
+ }
+}
+
} // namespace content
« no previous file with comments | « content/browser/renderer_host/delegated_frame_host.h ('k') | content/browser/renderer_host/delegated_frame_host_client_aura.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698