Chromium Code Reviews| 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 f58f3c2d7add8598fe445712494c94050ceaebcd..41e57a21ad64c835bbad7e60639b24153c23838b 100644 |
| --- a/cc/trees/layer_tree_host_impl.cc |
| +++ b/cc/trees/layer_tree_host_impl.cc |
| @@ -1035,6 +1035,16 @@ void LayerTreeHostImpl::SetManagedMemoryPolicy( |
| client_->SetNeedsCommitOnImplThread(); |
| } |
| +bool LayerTreeHostImpl::InitializeForGL( |
| + scoped_refptr<ContextProvider> offscreen_context_provider) { |
| + scoped_ptr<OutputSurface> output_surface = CleanupForRendererInitialization(); |
| + bool success = |
| + DoInitializeRenderer(output_surface.Pass(), true /* is_deffered_init */); |
| + client_->DidUpdateCapabilitiesOnImplThread(success, |
| + offscreen_context_provider); |
| + return success; |
| +} |
| + |
| void LayerTreeHostImpl::SetNeedsRedrawRect(gfx::Rect damage_rect) { |
| client_->SetNeedsRedrawRectOnImplThread(damage_rect); |
| } |
| @@ -1398,8 +1408,8 @@ ManagedMemoryPolicy LayerTreeHostImpl::ActualManagedMemoryPolicy() const { |
| return actual; |
| } |
| -bool LayerTreeHostImpl::InitializeRenderer( |
| - scoped_ptr<OutputSurface> output_surface) { |
| +scoped_ptr<OutputSurface> |
| +LayerTreeHostImpl::CleanupForRendererInitialization() { |
| // Since we will create a new resource provider, we cannot continue to use |
| // the old resources (i.e. render_surfaces and texture IDs). Clear them |
| // before we destroy the old resource provider. |
| @@ -1418,12 +1428,14 @@ bool LayerTreeHostImpl::InitializeRenderer( |
| renderer_.reset(); |
| tile_manager_.reset(); |
| resource_provider_.reset(); |
| - output_surface_.reset(); |
| - |
| - if (!output_surface->BindToClient(this)) |
| - return false; |
| + return output_surface_.Pass(); |
| +} |
| - if (output_surface->capabilities().deferred_gl_initialization) { |
| +bool LayerTreeHostImpl::DoInitializeRenderer( |
| + scoped_ptr<OutputSurface> output_surface, |
| + bool is_deffered_init) { |
| + if (output_surface->capabilities().deferred_gl_initialization && |
| + !is_deffered_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); |
| @@ -1434,8 +1446,8 @@ bool LayerTreeHostImpl::InitializeRenderer( |
| return false; |
| if (output_surface->capabilities().has_parent_compositor) { |
| - renderer_ = DelegatingRenderer::Create(this, output_surface.get(), |
| - resource_provider.get()); |
| + renderer_ = DelegatingRenderer::Create( |
| + this, output_surface.get(), resource_provider.get()); |
| } else if (output_surface->context3d()) { |
| renderer_ = GLRenderer::Create(this, |
| output_surface.get(), |
| @@ -1443,9 +1455,8 @@ bool LayerTreeHostImpl::InitializeRenderer( |
| settings_.highp_threshold_min, |
| settings_.force_direct_layer_drawing); |
| } else if (output_surface->software_device()) { |
| - renderer_ = SoftwareRenderer::Create(this, |
| - output_surface.get(), |
| - resource_provider.get()); |
| + renderer_ = SoftwareRenderer::Create( |
| + this, output_surface.get(), resource_provider.get()); |
| } |
| if (!renderer_) |
| return false; |
| @@ -1480,6 +1491,19 @@ bool LayerTreeHostImpl::InitializeRenderer( |
| return true; |
| } |
| +bool LayerTreeHostImpl::InitializeRenderer( |
|
danakj
2013/05/24 19:02:30
Move this function up by the deferred init method?
|
| + scoped_ptr<OutputSurface> output_surface) { |
| + scoped_ptr<OutputSurface> old_output_surface = |
| + CleanupForRendererInitialization(); |
| + old_output_surface.reset(); |
| + |
| + if (!output_surface->BindToClient(this)) |
| + return false; |
| + |
| + return DoInitializeRenderer(output_surface.Pass(), |
| + false /* is_deffered_init */); |
| +} |
| + |
| void LayerTreeHostImpl::SetViewportSize(gfx::Size device_viewport_size) { |
| if (device_viewport_size == device_viewport_size_) |
| return; |