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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 251343002: Remove offscreen compositor contexts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rm-offscreencontext: include Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 1408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1419 GetDrawMode(output_surface_.get()), resource_provider_.get()); 1419 GetDrawMode(output_surface_.get()), resource_provider_.get());
1420 } 1420 }
1421 1421
1422 if (output_surface_->ForcedDrawToSoftwareDevice()) { 1422 if (output_surface_->ForcedDrawToSoftwareDevice()) {
1423 bool disable_picture_quad_image_filtering = 1423 bool disable_picture_quad_image_filtering =
1424 IsCurrentlyScrolling() || needs_animate_layers(); 1424 IsCurrentlyScrolling() || needs_animate_layers();
1425 1425
1426 scoped_ptr<SoftwareRenderer> temp_software_renderer = 1426 scoped_ptr<SoftwareRenderer> temp_software_renderer =
1427 SoftwareRenderer::Create(this, &settings_, output_surface_.get(), NULL); 1427 SoftwareRenderer::Create(this, &settings_, output_surface_.get(), NULL);
1428 temp_software_renderer->DrawFrame(&frame->render_passes, 1428 temp_software_renderer->DrawFrame(&frame->render_passes,
1429 NULL,
1430 device_scale_factor_, 1429 device_scale_factor_,
1431 DeviceViewport(), 1430 DeviceViewport(),
1432 DeviceClip(), 1431 DeviceClip(),
1433 disable_picture_quad_image_filtering); 1432 disable_picture_quad_image_filtering);
1434 } else { 1433 } else {
1435 renderer_->DrawFrame(&frame->render_passes, 1434 renderer_->DrawFrame(&frame->render_passes,
1436 offscreen_context_provider_.get(),
1437 device_scale_factor_, 1435 device_scale_factor_,
1438 DeviceViewport(), 1436 DeviceViewport(),
1439 DeviceClip(), 1437 DeviceClip(),
1440 false); 1438 false);
1441 } 1439 }
1442 // The render passes should be consumed by the renderer. 1440 // The render passes should be consumed by the renderer.
1443 DCHECK(frame->render_passes.empty()); 1441 DCHECK(frame->render_passes.empty());
1444 frame->render_passes_by_id.clear(); 1442 frame->render_passes_by_id.clear();
1445 1443
1446 // The next frame should start by assuming nothing has changed, and changes 1444 // The next frame should start by assuming nothing has changed, and changes
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 client_->SetMaxSwapsPendingOnImplThread(max_frames_pending); 1908 client_->SetMaxSwapsPendingOnImplThread(max_frames_pending);
1911 1909
1912 resource_provider_ = resource_provider.Pass(); 1910 resource_provider_ = resource_provider.Pass();
1913 output_surface_ = output_surface.Pass(); 1911 output_surface_ = output_surface.Pass();
1914 1912
1915 client_->OnCanDrawStateChanged(CanDraw()); 1913 client_->OnCanDrawStateChanged(CanDraw());
1916 1914
1917 return true; 1915 return true;
1918 } 1916 }
1919 1917
1920 bool LayerTreeHostImpl::DeferredInitialize( 1918 void LayerTreeHostImpl::DeferredInitialize() {
1921 scoped_refptr<ContextProvider> offscreen_context_provider) {
1922 DCHECK(output_surface_->capabilities().deferred_gl_initialization); 1919 DCHECK(output_surface_->capabilities().deferred_gl_initialization);
1923 DCHECK(settings_.impl_side_painting); 1920 DCHECK(settings_.impl_side_painting);
1924 DCHECK(output_surface_->context_provider()); 1921 DCHECK(output_surface_->context_provider());
1925 1922
1926 ReleaseTreeResources(); 1923 ReleaseTreeResources();
1927 renderer_.reset(); 1924 renderer_.reset();
1928 1925
1929 resource_provider_->InitializeGL(); 1926 resource_provider_->InitializeGL();
1930 1927
1931 bool skip_gl_renderer = false; 1928 bool skip_gl_renderer = false;
1932 CreateAndSetRenderer( 1929 CreateAndSetRenderer(
1933 output_surface_.get(), resource_provider_.get(), skip_gl_renderer); 1930 output_surface_.get(), resource_provider_.get(), skip_gl_renderer);
1934 1931
1935 bool success = true; 1932 EnforceZeroBudget(false);
1936 if (offscreen_context_provider.get() && 1933 client_->SetNeedsCommitOnImplThread();
1937 !offscreen_context_provider->BindToCurrentThread())
1938 success = false;
1939
1940 if (success) {
1941 EnforceZeroBudget(false);
1942 client_->SetNeedsCommitOnImplThread();
1943 } else {
1944 if (offscreen_context_provider.get()) {
1945 if (offscreen_context_provider->BindToCurrentThread())
1946 offscreen_context_provider->VerifyContexts();
1947 offscreen_context_provider = NULL;
1948 }
1949
1950 client_->DidLoseOutputSurfaceOnImplThread();
1951
1952 // If this method fails, the context provider will be dropped from the
1953 // output surface and destroyed. But the GLRenderer expects the output
1954 // surface to stick around - and hold onto the context3d - as long as it is
1955 // alive.
1956 // TODO(danakj): Remove the need for this code path: crbug.com/276411
1957 renderer_.reset();
1958
1959 // The resource provider can't stay in GL mode or it tries to clean up GL
1960 // stuff, but the context provider is going away on the output surface
1961 // which contradicts being in GL mode.
1962 // TODO(danakj): Remove the need for this code path: crbug.com/276411
1963 resource_provider_->InitializeSoftware();
1964 }
1965
1966 SetOffscreenContextProvider(offscreen_context_provider);
1967 return success;
1968 } 1934 }
1969 1935
1970 void LayerTreeHostImpl::ReleaseGL() { 1936 void LayerTreeHostImpl::ReleaseGL() {
1971 DCHECK(output_surface_->capabilities().deferred_gl_initialization); 1937 DCHECK(output_surface_->capabilities().deferred_gl_initialization);
1972 DCHECK(settings_.impl_side_painting); 1938 DCHECK(settings_.impl_side_painting);
1973 DCHECK(output_surface_->context_provider()); 1939 DCHECK(output_surface_->context_provider());
1974 1940
1975 ReleaseTreeResources(); 1941 ReleaseTreeResources();
1976 renderer_.reset(); 1942 renderer_.reset();
1977 tile_manager_.reset(); 1943 tile_manager_.reset();
1978 resource_pool_.reset(); 1944 resource_pool_.reset();
1979 raster_worker_pool_.reset(); 1945 raster_worker_pool_.reset();
1980 direct_raster_worker_pool_.reset(); 1946 direct_raster_worker_pool_.reset();
1981 resource_provider_->InitializeSoftware(); 1947 resource_provider_->InitializeSoftware();
1982 1948
1983 bool skip_gl_renderer = true; 1949 bool skip_gl_renderer = true;
1984 CreateAndSetRenderer( 1950 CreateAndSetRenderer(
1985 output_surface_.get(), resource_provider_.get(), skip_gl_renderer); 1951 output_surface_.get(), resource_provider_.get(), skip_gl_renderer);
1986 1952
1987 EnforceZeroBudget(true); 1953 EnforceZeroBudget(true);
1988 CreateAndSetTileManager(resource_provider_.get(), 1954 CreateAndSetTileManager(resource_provider_.get(),
1989 NULL, 1955 NULL,
1990 GetRendererCapabilities().using_map_image, 1956 GetRendererCapabilities().using_map_image,
1991 GetRendererCapabilities().allow_rasterize_on_demand); 1957 GetRendererCapabilities().allow_rasterize_on_demand);
1992 DCHECK(tile_manager_); 1958 DCHECK(tile_manager_);
1993 1959
1994 SetOffscreenContextProvider(NULL);
1995
1996 client_->SetNeedsCommitOnImplThread(); 1960 client_->SetNeedsCommitOnImplThread();
1997 } 1961 }
1998 1962
1999 void LayerTreeHostImpl::SetViewportSize(const gfx::Size& device_viewport_size) { 1963 void LayerTreeHostImpl::SetViewportSize(const gfx::Size& device_viewport_size) {
2000 if (device_viewport_size == device_viewport_size_) 1964 if (device_viewport_size == device_viewport_size_)
2001 return; 1965 return;
2002 1966
2003 if (pending_tree_) 1967 if (pending_tree_)
2004 active_tree_->SetViewportSizeInvalid(); 1968 active_tree_->SetViewportSizeInvalid();
2005 1969
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after
2814 DCHECK(current); 2778 DCHECK(current);
2815 current->ReleaseResources(); 2779 current->ReleaseResources();
2816 if (current->mask_layer()) 2780 if (current->mask_layer())
2817 SendReleaseResourcesRecursive(current->mask_layer()); 2781 SendReleaseResourcesRecursive(current->mask_layer());
2818 if (current->replica_layer()) 2782 if (current->replica_layer())
2819 SendReleaseResourcesRecursive(current->replica_layer()); 2783 SendReleaseResourcesRecursive(current->replica_layer());
2820 for (size_t i = 0; i < current->children().size(); ++i) 2784 for (size_t i = 0; i < current->children().size(); ++i)
2821 SendReleaseResourcesRecursive(current->children()[i]); 2785 SendReleaseResourcesRecursive(current->children()[i]);
2822 } 2786 }
2823 2787
2824 void LayerTreeHostImpl::SetOffscreenContextProvider(
2825 const scoped_refptr<ContextProvider>& offscreen_context_provider) {
2826 if (!offscreen_context_provider.get()) {
2827 offscreen_context_provider_ = NULL;
2828 return;
2829 }
2830
2831 if (!offscreen_context_provider->BindToCurrentThread()) {
2832 offscreen_context_provider_ = NULL;
2833 return;
2834 }
2835
2836 offscreen_context_provider_ = offscreen_context_provider;
2837 }
2838
2839 std::string LayerTreeHostImpl::LayerTreeAsJson() const { 2788 std::string LayerTreeHostImpl::LayerTreeAsJson() const {
2840 std::string str; 2789 std::string str;
2841 if (active_tree_->root_layer()) { 2790 if (active_tree_->root_layer()) {
2842 scoped_ptr<base::Value> json(active_tree_->root_layer()->LayerTreeAsJson()); 2791 scoped_ptr<base::Value> json(active_tree_->root_layer()->LayerTreeAsJson());
2843 base::JSONWriter::WriteWithOptions( 2792 base::JSONWriter::WriteWithOptions(
2844 json.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &str); 2793 json.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &str);
2845 } 2794 }
2846 return str; 2795 return str;
2847 } 2796 }
2848 2797
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
3102 swap_promise_monitor_.erase(monitor); 3051 swap_promise_monitor_.erase(monitor);
3103 } 3052 }
3104 3053
3105 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { 3054 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() {
3106 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); 3055 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin();
3107 for (; it != swap_promise_monitor_.end(); it++) 3056 for (; it != swap_promise_monitor_.end(); it++)
3108 (*it)->OnSetNeedsRedrawOnImpl(); 3057 (*it)->OnSetNeedsRedrawOnImpl();
3109 } 3058 }
3110 3059
3111 } // namespace cc 3060 } // namespace cc
OLDNEW
« 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