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 2b8d453ea916e48f3ba9d5710915225a2f99a8f9..d384ea716996f05d7171f3ddb04a0a1f284d1c6a 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -1454,7 +1454,15 @@ bool LayerTreeHostImpl::InitializeRenderer( |
if (!output_surface->BindToClient(this)) |
return false; |
- if (output_surface->capabilities().deferred_gl_initialization) { |
+ return DoInitializeRenderer(output_surface.Pass(), |
+ false /* is_deferred_init */); |
+} |
+ |
+bool LayerTreeHostImpl::DoInitializeRenderer( |
+ scoped_ptr<OutputSurface> output_surface, |
+ bool is_deferred_init) { |
+ if (output_surface->capabilities().deferred_gl_initialization && |
+ !is_deferred_init) { |
// TODO(joth): Defer creating the Renderer too, until GL is initialized. |
// See http://crbug.com/230197 |
renderer_ = SoftwareRenderer::Create(this, output_surface.get(), NULL); |
@@ -1511,6 +1519,22 @@ bool LayerTreeHostImpl::InitializeRenderer( |
return true; |
} |
+bool LayerTreeHostImpl::DeferredInitialize( |
+ scoped_refptr<ContextProvider> offscreen_context_provider) { |
+ DCHECK(output_surface_->capabilities().deferred_gl_initialization); |
+ DCHECK(output_surface_->context3d()); |
+ |
+ // TODO(boliu): This is temporary until proper resource clean up is possible |
+ // without resetting |tile_manager_| or |resource_provider_|. |
+ DCHECK(!resource_provider_); |
+ |
+ bool success = |
+ DoInitializeRenderer(output_surface_.Pass(), true /* is_deferred_init */); |
+ client_->DidTryInitializeRendererOnImplThread(success, |
+ offscreen_context_provider); |
+ return success; |
+} |
+ |
void LayerTreeHostImpl::SetViewportSize(gfx::Size device_viewport_size) { |
if (device_viewport_size == device_viewport_size_) |
return; |