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

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: shutdown fix 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
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 fda8eda50c1fc71635c7d228bf24779b47eb3d8c..aa2e8abeacca6d24d5430b403c14cfce0cef4903 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -173,6 +173,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),
@@ -287,6 +288,13 @@ LayerTreeHostImpl::~LayerTreeHostImpl() {
}
CleanUpTileManager();
+ renderer_ = nullptr;
+ resource_provider_ = nullptr;
+
+ if (output_surface_) {
+ output_surface_->DetachFromClient();
+ output_surface_ = nullptr;
+ }
}
void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) {
@@ -1564,7 +1572,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(),
@@ -1626,7 +1634,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;
@@ -2020,18 +2028,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_);
@@ -2160,8 +2168,7 @@ void LayerTreeHostImpl::CleanUpTileManager() {
single_thread_synchronous_task_graph_runner_ = nullptr;
}
-bool LayerTreeHostImpl::InitializeRenderer(
- scoped_ptr<OutputSurface> output_surface) {
+bool LayerTreeHostImpl::InitializeRenderer(OutputSurface* output_surface) {
TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer");
// Since we will create a new resource provider, we cannot continue to use
@@ -2173,7 +2180,11 @@ bool LayerTreeHostImpl::InitializeRenderer(
renderer_ = nullptr;
CleanUpTileManager();
resource_provider_ = nullptr;
- output_surface_ = nullptr;
+
+ if (output_surface_) {
+ output_surface_->DetachFromClient();
+ output_surface_ = nullptr;
+ }
if (!output_surface->BindToClient(this)) {
// Avoid recreating tree resources because we might not have enough
@@ -2182,9 +2193,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,

Powered by Google App Engine
This is Rietveld 408576698