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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 14772021: cc::OutputSurfaceClient::InitializeForGL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Renamed to DeferredInitialize. Added smoke tests. Created 7 years, 6 months 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ef2b53dcc00a6cb2bbbf6d8d38bfd3307cfa55c8..eb936989803eafbf6a60b20d646ffcac76ebe0df 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1436,6 +1436,23 @@ bool LayerTreeHostImpl::InitializeRenderer(
// 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.
+ DropLayerResources();
+
+ // Note: order is important here.
+ renderer_.reset();
+ tile_manager_.reset();
+ resource_provider_.reset();
+ output_surface_.reset();
+
+ if (!output_surface->BindToClient(this))
+ return false;
+
+ return DoInitializeRenderer(output_surface.Pass(),
+ false /* is_deferred_init */);
+}
+
+void LayerTreeHostImpl::DropLayerResources() {
+ // TODO(boliu): Rename LoseOutputSurface to DrawLayerResources.
if (active_tree_->root_layer())
ClearRenderSurfaces();
if (active_tree_->root_layer())
@@ -1446,17 +1463,13 @@ bool LayerTreeHostImpl::InitializeRenderer(
SendDidLoseOutputSurfaceRecursive(recycle_tree_->root_layer());
if (resource_provider_)
resource_provider_->DidLoseOutputSurface();
piman 2013/06/05 00:39:37 You don't want to do that in the re-initialization
boliu 2013/06/05 01:01:54 Actually this needs more work as I remembered Dana
+}
- // Note: order is important here.
- renderer_.reset();
- tile_manager_.reset();
- resource_provider_.reset();
- output_surface_.reset();
-
- if (!output_surface->BindToClient(this))
- return false;
-
- if (output_surface->capabilities().deferred_gl_initialization) {
+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);
@@ -1513,6 +1526,19 @@ 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());
+
+ DropLayerResources();
+ 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;
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698