Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index 45cd0c8b4e809780b8779247ecd53aeea3aa2be2..a7af98350fd28eef53eb393b8b3b37f2b268f78c 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -172,7 +172,6 @@ |
: client_(client), |
proxy_(proxy), |
current_begin_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE), |
- output_surface_(nullptr), |
content_is_suitable_for_gpu_rasterization_(true), |
has_gpu_rasterization_trigger_(false), |
use_gpu_rasterization_(false), |
@@ -286,13 +285,6 @@ |
} |
CleanUpTileManager(); |
- renderer_ = nullptr; |
- resource_provider_ = nullptr; |
- |
- if (output_surface_) { |
- output_surface_->DetachFromClient(); |
- output_surface_ = nullptr; |
- } |
} |
void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) { |
@@ -1570,7 +1562,7 @@ |
scoped_ptr<SoftwareRenderer> temp_software_renderer = |
SoftwareRenderer::Create(this, &settings_.renderer_settings, |
- output_surface_, NULL); |
+ output_surface_.get(), NULL); |
temp_software_renderer->DrawFrame(&frame->render_passes, |
device_scale_factor_, |
DeviceViewport(), |
@@ -1632,7 +1624,7 @@ |
ContextProvider* context_provider = |
output_surface_->worker_context_provider(); |
- ContextProvider::ScopedContextLock scoped_context(context_provider); |
+ base::AutoLock context_lock(*context_provider->GetLock()); |
if (!context_provider->GrContext()) |
return false; |
@@ -2016,18 +2008,18 @@ |
DCHECK(resource_provider_); |
if (output_surface_->capabilities().delegated_rendering) { |
- renderer_ = |
- DelegatingRenderer::Create(this, &settings_.renderer_settings, |
- output_surface_, resource_provider_.get()); |
+ renderer_ = DelegatingRenderer::Create(this, &settings_.renderer_settings, |
+ output_surface_.get(), |
+ resource_provider_.get()); |
} else if (output_surface_->context_provider()) { |
renderer_ = GLRenderer::Create( |
- this, &settings_.renderer_settings, output_surface_, |
+ this, &settings_.renderer_settings, output_surface_.get(), |
resource_provider_.get(), texture_mailbox_deleter_.get(), |
settings_.renderer_settings.highp_threshold_min); |
} else if (output_surface_->software_device()) { |
- renderer_ = |
- SoftwareRenderer::Create(this, &settings_.renderer_settings, |
- output_surface_, resource_provider_.get()); |
+ renderer_ = SoftwareRenderer::Create(this, &settings_.renderer_settings, |
+ output_surface_.get(), |
+ resource_provider_.get()); |
} |
DCHECK(renderer_); |
@@ -2156,7 +2148,8 @@ |
single_thread_synchronous_task_graph_runner_ = nullptr; |
} |
-bool LayerTreeHostImpl::InitializeRenderer(OutputSurface* output_surface) { |
+bool LayerTreeHostImpl::InitializeRenderer( |
+ scoped_ptr<OutputSurface> output_surface) { |
TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); |
// Since we will create a new resource provider, we cannot continue to use |
@@ -2168,14 +2161,7 @@ |
renderer_ = nullptr; |
CleanUpTileManager(); |
resource_provider_ = nullptr; |
- |
- // Detach from the old output surface and reset |output_surface_| pointer |
- // as this surface is going to be destroyed independent of if binding the |
- // new output surface succeeds or not. |
- if (output_surface_) { |
- output_surface_->DetachFromClient(); |
- output_surface_ = nullptr; |
- } |
+ output_surface_ = nullptr; |
if (!output_surface->BindToClient(this)) { |
// Avoid recreating tree resources because we might not have enough |
@@ -2184,9 +2170,9 @@ |
return false; |
} |
- output_surface_ = output_surface; |
+ output_surface_ = output_surface.Pass(); |
resource_provider_ = ResourceProvider::Create( |
- output_surface_, shared_bitmap_manager_, gpu_memory_buffer_manager_, |
+ output_surface_.get(), shared_bitmap_manager_, gpu_memory_buffer_manager_, |
proxy_->blocking_main_thread_task_runner(), |
settings_.renderer_settings.highp_threshold_min, |
settings_.renderer_settings.use_rgba_4444_textures, |