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

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

Issue 2506883002: Revert of Remove SurfaceFactory::Create and SurfaceFactory::Destroy (Closed)
Patch Set: 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 eb0d0e176419bb239826ca7d16cb5d3ebacd1d9a..9505792fd0c14a225865dafd7ca08cd099daf730 100644
--- a/content/browser/renderer_host/delegated_frame_host.cc
+++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -396,7 +396,8 @@
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));
+ surface_factory_->RequestCopyOfSurface(local_frame_id_,
+ std::move(request));
} else {
request->set_area(gfx::Rect(current_frame_size_in_dip_));
RequestCopyOfOutput(std::move(request));
@@ -475,11 +476,20 @@
} 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();
- allocated_new_local_frame_id = true;
+ 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;
}
gfx::Size desired_size = client_->DelegatedFrameHostDesiredSizeInDIP();
@@ -503,16 +513,6 @@
}
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;
@@ -593,7 +593,7 @@
void DelegatedFrameHost::EvictDelegatedFrame() {
client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent();
if (local_frame_id_.is_valid()) {
- surface_factory_->EvictSurface();
+ surface_factory_->Destroy(local_frame_id_);
local_frame_id_ = cc::LocalFrameId();
}
delegated_frame_evictor_->DiscardedFrame();
@@ -827,7 +827,9 @@
DCHECK(!compositor_);
ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
factory->GetContextFactory()->RemoveObserver(this);
- surface_factory_->EvictSurface();
+
+ if (local_frame_id_.is_valid())
+ surface_factory_->Destroy(local_frame_id_);
factory->GetSurfaceManager()->UnregisterSurfaceFactoryClient(frame_sink_id_);
factory->GetSurfaceManager()->InvalidateFrameSinkId(frame_sink_id_);

Powered by Google App Engine
This is Rietveld 408576698