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

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

Issue 2693423005: DelegatedFrameHost should use CompositorFrameSinkSupport (Closed)
Patch Set: c Created 3 years, 10 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 3539e0a3c70ef9e0804132f549bb8b508e6fddfd..d2fec22cc14f71641b91c33b6dd8c9976a3f149f 100644
--- a/content/browser/renderer_host/delegated_frame_host.cc
+++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -18,6 +18,7 @@
#include "cc/output/copy_output_request.h"
#include "cc/resources/single_release_callback.h"
#include "cc/resources/texture_mailbox.h"
+#include "cc/surfaces/compositor_frame_sink_support.h"
#include "cc/surfaces/surface.h"
#include "cc/surfaces/surface_factory.h"
#include "cc/surfaces/surface_hittest.h"
@@ -48,7 +49,6 @@ DelegatedFrameHost::DelegatedFrameHost(const cc::FrameSinkId& frame_sink_id,
compositor_(nullptr),
tick_clock_(new base::DefaultTickClock()),
last_compositor_frame_sink_id_(0),
- pending_delegated_ack_count_(0),
skipped_frames_(false),
background_color_(SK_ColorRED),
current_scale_factor_(1.f),
@@ -59,12 +59,13 @@ DelegatedFrameHost::DelegatedFrameHost(const cc::FrameSinkId& frame_sink_id,
id_allocator_.reset(new cc::SurfaceIdAllocator());
factory->GetContextFactoryPrivate()->GetSurfaceManager()->RegisterFrameSinkId(
frame_sink_id_);
- factory->GetContextFactoryPrivate()
- ->GetSurfaceManager()
- ->RegisterSurfaceFactoryClient(frame_sink_id_, this);
- surface_factory_ = base::MakeUnique<cc::SurfaceFactory>(
- frame_sink_id_, factory->GetContextFactoryPrivate()->GetSurfaceManager(),
- this);
+ support_ = base::MakeUnique<cc::CompositorFrameSinkSupport>(
Fady Samuel 2017/02/23 18:32:40 Maybe we can move creating a support to a helper m
Saman Sami 2017/02/23 18:34:40 Acknowledged.
+ this, factory->GetContextFactoryPrivate()->GetSurfaceManager(),
+ frame_sink_id_, false /* is_root */,
+ false /* handles_frame_sink_id_invalidation */,
+ true /* needs_sync_points */);
+ begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
+ client_->SetBeginFrameSource(begin_frame_source_.get());
}
void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) {
@@ -378,7 +379,7 @@ void DelegatedFrameHost::AttemptFrameSubscriberCapture(
if (!request_copy_of_output_callback_for_testing_.is_null())
request_copy_of_output_callback_for_testing_.Run(std::move(request));
else
- surface_factory_->RequestCopyOfSurface(std::move(request));
+ support_->RequestCopyOfSurface(std::move(request));
} else {
request->set_area(gfx::Rect(current_frame_size_in_dip_));
RequestCopyOfOutput(std::move(request));
@@ -438,12 +439,26 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id,
// have the same id. Changing the layer to showing painted content destroys
// the DelegatedRendererLayer.
EvictDelegatedFrame();
- surface_factory_->Reset();
- surface_returned_resources_.clear();
+ DCHECK(support_);
+ support_.reset();
+ support_ = base::MakeUnique<cc::CompositorFrameSinkSupport>(
+ this,
+ ImageTransportFactory::GetInstance()
+ ->GetContextFactoryPrivate()
+ ->GetSurfaceManager(),
+ frame_sink_id_, false /* is_root */,
+ false /* handles_frame_sink_id_invalidation */,
+ true /* needs_sync_points */);
+ if (compositor_) {
+ compositor_->RemoveFrameSink(frame_sink_id_);
Fady Samuel 2017/02/23 18:32:40 Remind me why you remove the FrameSink first and t
Saman Sami 2017/02/23 18:34:40 The link already exists. We need to remove and re-
+ compositor_->AddFrameSink(frame_sink_id_);
+ }
+ if (needs_begin_frame_)
+ support_->SetNeedsBeginFrame(true);
last_compositor_frame_sink_id_ = compositor_frame_sink_id;
}
+
bool skip_frame = false;
- pending_delegated_ack_count_++;
background_color_ = frame.metadata.root_background_color;
@@ -475,13 +490,8 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id,
skipped_latency_info_list_.clear();
}
- cc::SurfaceFactory::DrawCallback ack_callback;
- if (!skip_frame) {
- ack_callback = base::Bind(&DelegatedFrameHost::SurfaceDrawn, AsWeakPtr(),
- compositor_frame_sink_id);
- }
- surface_factory_->SubmitCompositorFrame(local_surface_id_, std::move(frame),
- ack_callback);
+ support_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
+
if (allocated_new_local_surface_id) {
// manager must outlive compositors using it.
cc::SurfaceId surface_id(frame_sink_id_, local_surface_id_);
@@ -504,11 +514,6 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id,
damage_rect_in_dip);
}
- if (skip_frame) {
- SendReclaimCompositorResources(compositor_frame_sink_id,
- true /* is_swap_ack */);
- }
-
if (compositor_ && !skip_frame)
can_lock_compositor_ = NO_PENDING_COMMIT;
@@ -524,33 +529,18 @@ void DelegatedFrameHost::ClearDelegatedFrame() {
EvictDelegatedFrame();
}
-void DelegatedFrameHost::SendReclaimCompositorResources(
- uint32_t compositor_frame_sink_id,
- bool is_swap_ack) {
+void DelegatedFrameHost::DidReceiveCompositorFrameAck() {
+ LOG(ERROR) << "Ack";
client_->DelegatedFrameHostSendReclaimCompositorResources(
- compositor_frame_sink_id, is_swap_ack, surface_returned_resources_);
- surface_returned_resources_.clear();
- if (is_swap_ack) {
- DCHECK_GT(pending_delegated_ack_count_, 0);
- pending_delegated_ack_count_--;
- }
-}
-
-void DelegatedFrameHost::SurfaceDrawn(uint32_t compositor_frame_sink_id) {
- SendReclaimCompositorResources(compositor_frame_sink_id,
- true /* is_swap_ack */);
+ last_compositor_frame_sink_id_, true /* is_swap_ack */,
+ cc::ReturnedResourceArray());
}
-void DelegatedFrameHost::ReturnResources(
+void DelegatedFrameHost::ReclaimResources(
const cc::ReturnedResourceArray& resources) {
- if (resources.empty())
- return;
- std::copy(resources.begin(), resources.end(),
- std::back_inserter(surface_returned_resources_));
- if (!pending_delegated_ack_count_) {
- SendReclaimCompositorResources(last_compositor_frame_sink_id_,
- false /* is_swap_ack */);
- }
+ LOG(ERROR) << resources.size();
+ client_->DelegatedFrameHostSendReclaimCompositorResources(
+ last_compositor_frame_sink_id_, false /* is_swap_ack */, resources);
}
void DelegatedFrameHost::WillDrawSurface(const cc::LocalSurfaceId& id,
@@ -564,15 +554,14 @@ void DelegatedFrameHost::WillDrawSurface(const cc::LocalSurfaceId& id,
AttemptFrameSubscriberCapture(damage_rect);
}
-void DelegatedFrameHost::SetBeginFrameSource(
- cc::BeginFrameSource* begin_frame_source) {
- client_->SetBeginFrameSource(begin_frame_source);
+void DelegatedFrameHost::OnBeginFrame(const cc::BeginFrameArgs& args) {
+ begin_frame_source_->OnBeginFrame(args);
}
void DelegatedFrameHost::EvictDelegatedFrame() {
client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent();
if (local_surface_id_.is_valid()) {
- surface_factory_->EvictSurface();
+ support_->EvictFrame();
local_surface_id_ = cc::LocalSurfaceId();
}
delegated_frame_evictor_->DiscardedFrame();
@@ -806,10 +795,10 @@ DelegatedFrameHost::~DelegatedFrameHost() {
DCHECK(!compositor_);
ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
factory->GetContextFactory()->RemoveObserver(this);
- surface_factory_->EvictSurface();
- factory->GetContextFactoryPrivate()
- ->GetSurfaceManager()
- ->UnregisterSurfaceFactoryClient(frame_sink_id_);
+
+ begin_frame_source_.reset();
+ support_.reset();
+
factory->GetContextFactoryPrivate()
->GetSurfaceManager()
->InvalidateFrameSinkId(frame_sink_id_);
@@ -868,4 +857,11 @@ 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) {}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698