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

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

Issue 2485473003: Remove SurfaceFactory::Create and SurfaceFactory::Destroy (Closed)
Patch Set: up Created 4 years, 1 month 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 9505792fd0c14a225865dafd7ca08cd099daf730..840d3a4b6cd0de7497cb37b6e50f9534dbf89efa 100644
--- a/content/browser/renderer_host/delegated_frame_host.cc
+++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -396,8 +396,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(local_frame_id_,
- std::move(request));
+ surface_factory_->RequestCopyOfSurface(std::move(request));
} else {
request->set_area(gfx::Rect(current_frame_size_in_dip_));
RequestCopyOfOutput(std::move(request));
@@ -470,26 +469,18 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id,
background_color_ = frame.metadata.root_background_color;
+ bool did_send_ack_callback = false;
if (frame_size.IsEmpty()) {
DCHECK(frame.resource_list.empty());
EvictDelegatedFrame();
} else {
ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
cc::SurfaceManager* manager = factory->GetSurfaceManager();
+ bool allocated_new_local_frame_id = false;
if (!local_frame_id_.is_valid() || frame_size != current_surface_size_ ||
frame_size_in_dip != current_frame_size_in_dip_) {
- if (local_frame_id_.is_valid())
- surface_factory_->Destroy(local_frame_id_);
local_frame_id_ = id_allocator_->GenerateId();
- surface_factory_->Create(local_frame_id_);
- // manager must outlive compositors using it.
- client_->DelegatedFrameHostGetLayer()->SetShowSurface(
- cc::SurfaceId(frame_sink_id_, local_frame_id_),
- base::Bind(&SatisfyCallback, base::Unretained(manager)),
- base::Bind(&RequireCallback, base::Unretained(manager)), frame_size,
- frame_device_scale_factor, frame_size_in_dip);
- current_surface_size_ = frame_size;
- current_scale_factor_ = frame_device_scale_factor;
+ allocated_new_local_frame_id = true;
}
gfx::Size desired_size = client_->DelegatedFrameHostDesiredSizeInDIP();
@@ -510,9 +501,20 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id,
if (compositor_ && !skip_frame) {
ack_callback = base::Bind(&DelegatedFrameHost::SurfaceDrawn, AsWeakPtr(),
compositor_frame_sink_id);
+ did_send_ack_callback = true;
}
surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame),
ack_callback);
+ if (allocated_new_local_frame_id) {
+ // manager must outlive compositors using it.
+ client_->DelegatedFrameHostGetLayer()->SetShowSurface(
+ cc::SurfaceId(frame_sink_id_, local_frame_id_),
+ base::Bind(&SatisfyCallback, base::Unretained(manager)),
+ base::Bind(&RequireCallback, base::Unretained(manager)), frame_size,
+ frame_device_scale_factor, frame_size_in_dip);
+ current_surface_size_ = frame_size;
+ current_scale_factor_ = frame_device_scale_factor;
+ }
}
released_front_lock_ = NULL;
current_frame_size_in_dip_ = frame_size_in_dip;
@@ -529,7 +531,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id,
// SetShowDelegatedContent above.
if (!compositor_ || skip_frame) {
SendReclaimCompositorResources(compositor_frame_sink_id,
- true /* is_swap_ack */);
+ !did_send_ack_callback /* is_swap_ack */);
} else {
can_lock_compositor_ = NO_PENDING_COMMIT;
}
@@ -593,7 +595,7 @@ void DelegatedFrameHost::SetBeginFrameSource(
void DelegatedFrameHost::EvictDelegatedFrame() {
client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent();
if (local_frame_id_.is_valid()) {
- surface_factory_->Destroy(local_frame_id_);
+ surface_factory_->EvictSurface();
local_frame_id_ = cc::LocalFrameId();
}
delegated_frame_evictor_->DiscardedFrame();
@@ -827,9 +829,7 @@ DelegatedFrameHost::~DelegatedFrameHost() {
DCHECK(!compositor_);
ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
factory->GetContextFactory()->RemoveObserver(this);
-
- if (local_frame_id_.is_valid())
- surface_factory_->Destroy(local_frame_id_);
+ surface_factory_->EvictSurface();
factory->GetSurfaceManager()->UnregisterSurfaceFactoryClient(frame_sink_id_);
factory->GetSurfaceManager()->InvalidateFrameSinkId(frame_sink_id_);

Powered by Google App Engine
This is Rietveld 408576698