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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 1336733002: Re-land: cc: Implement shared worker contexts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix LayerTreeHostClientTakeAwayOutputSurface test. Content provider is always destroyed on the clie… Created 5 years, 3 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 36e7bdd879eb9fe90e622b4db1611502f8f6f1d4..de1e213bf970f61c2f8f3d1ecbb78846af203cb4 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -172,6 +172,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(
: 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),
@@ -284,6 +285,13 @@ LayerTreeHostImpl::~LayerTreeHostImpl() {
}
CleanUpTileManager();
+ renderer_ = nullptr;
+ resource_provider_ = nullptr;
+
+ if (output_surface_) {
+ output_surface_->DetachFromClient();
+ output_surface_ = nullptr;
+ }
}
void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) {
@@ -1565,7 +1573,7 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame) {
scoped_ptr<SoftwareRenderer> temp_software_renderer =
SoftwareRenderer::Create(this, &settings_.renderer_settings,
- output_surface_.get(), NULL);
+ output_surface_, NULL);
temp_software_renderer->DrawFrame(&frame->render_passes,
device_scale_factor_,
DeviceViewport(),
@@ -1627,7 +1635,7 @@ bool LayerTreeHostImpl::CanUseGpuRasterization() {
ContextProvider* context_provider =
output_surface_->worker_context_provider();
- base::AutoLock context_lock(*context_provider->GetLock());
+ ContextProvider::ScopedContextLock scoped_context(context_provider);
if (!context_provider->GrContext())
return false;
@@ -2010,18 +2018,18 @@ void LayerTreeHostImpl::CreateAndSetRenderer() {
DCHECK(resource_provider_);
if (output_surface_->capabilities().delegated_rendering) {
- renderer_ = DelegatingRenderer::Create(this, &settings_.renderer_settings,
- output_surface_.get(),
- resource_provider_.get());
+ renderer_ =
+ DelegatingRenderer::Create(this, &settings_.renderer_settings,
+ output_surface_, resource_provider_.get());
} else if (output_surface_->context_provider()) {
renderer_ = GLRenderer::Create(
- this, &settings_.renderer_settings, output_surface_.get(),
+ this, &settings_.renderer_settings, output_surface_,
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_.get(),
- resource_provider_.get());
+ renderer_ =
+ SoftwareRenderer::Create(this, &settings_.renderer_settings,
+ output_surface_, resource_provider_.get());
}
DCHECK(renderer_);
@@ -2150,7 +2158,7 @@ void LayerTreeHostImpl::CleanUpTileManager() {
single_thread_synchronous_task_graph_runner_ = nullptr;
}
-scoped_ptr<OutputSurface> LayerTreeHostImpl::ReleaseOutputSurface() {
+void LayerTreeHostImpl::ReleaseOutputSurface() {
TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface");
// Since we will create a new resource provider, we cannot continue to use
@@ -2163,11 +2171,16 @@ scoped_ptr<OutputSurface> LayerTreeHostImpl::ReleaseOutputSurface() {
CleanUpTileManager();
resource_provider_ = nullptr;
- return output_surface_.Pass();
+ // 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;
+ }
}
-bool LayerTreeHostImpl::InitializeRenderer(
- scoped_ptr<OutputSurface> output_surface) {
+bool LayerTreeHostImpl::InitializeRenderer(OutputSurface* output_surface) {
TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer");
ReleaseOutputSurface();
@@ -2178,9 +2191,9 @@ bool LayerTreeHostImpl::InitializeRenderer(
return false;
}
- output_surface_ = output_surface.Pass();
+ output_surface_ = output_surface;
resource_provider_ = ResourceProvider::Create(
- output_surface_.get(), shared_bitmap_manager_, gpu_memory_buffer_manager_,
+ output_surface_, 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,
« 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