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

Side by Side 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 unified diff | 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 »
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 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 LayerTreeHostImplClient* client, 165 LayerTreeHostImplClient* client,
166 Proxy* proxy, 166 Proxy* proxy,
167 RenderingStatsInstrumentation* rendering_stats_instrumentation, 167 RenderingStatsInstrumentation* rendering_stats_instrumentation,
168 SharedBitmapManager* shared_bitmap_manager, 168 SharedBitmapManager* shared_bitmap_manager,
169 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 169 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
170 TaskGraphRunner* task_graph_runner, 170 TaskGraphRunner* task_graph_runner,
171 int id) 171 int id)
172 : client_(client), 172 : client_(client),
173 proxy_(proxy), 173 proxy_(proxy),
174 current_begin_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE), 174 current_begin_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE),
175 output_surface_(nullptr),
175 content_is_suitable_for_gpu_rasterization_(true), 176 content_is_suitable_for_gpu_rasterization_(true),
176 has_gpu_rasterization_trigger_(false), 177 has_gpu_rasterization_trigger_(false),
177 use_gpu_rasterization_(false), 178 use_gpu_rasterization_(false),
178 use_msaa_(false), 179 use_msaa_(false),
179 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE), 180 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE),
180 tree_resources_for_gpu_rasterization_dirty_(false), 181 tree_resources_for_gpu_rasterization_dirty_(false),
181 input_handler_client_(NULL), 182 input_handler_client_(NULL),
182 did_lock_scrolling_layer_(false), 183 did_lock_scrolling_layer_(false),
183 should_bubble_scrolls_(false), 184 should_bubble_scrolls_(false),
184 wheel_scrolling_(false), 185 wheel_scrolling_(false),
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 recycle_tree_ = nullptr; 278 recycle_tree_ = nullptr;
278 pending_tree_ = nullptr; 279 pending_tree_ = nullptr;
279 active_tree_ = nullptr; 280 active_tree_ = nullptr;
280 281
281 if (animation_host_) { 282 if (animation_host_) {
282 animation_host_->ClearTimelines(); 283 animation_host_->ClearTimelines();
283 animation_host_->SetMutatorHostClient(nullptr); 284 animation_host_->SetMutatorHostClient(nullptr);
284 } 285 }
285 286
286 CleanUpTileManager(); 287 CleanUpTileManager();
288 renderer_ = nullptr;
289 resource_provider_ = nullptr;
290
291 if (output_surface_) {
292 output_surface_->DetachFromClient();
293 output_surface_ = nullptr;
294 }
287 } 295 }
288 296
289 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) { 297 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) {
290 // If the begin frame data was handled, then scroll and scale set was applied 298 // If the begin frame data was handled, then scroll and scale set was applied
291 // by the main thread, so the active tree needs to be updated as if these sent 299 // by the main thread, so the active tree needs to be updated as if these sent
292 // values were applied and committed. 300 // values were applied and committed.
293 if (CommitEarlyOutHandledCommit(reason)) 301 if (CommitEarlyOutHandledCommit(reason))
294 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); 302 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit();
295 } 303 }
296 304
(...skipping 1261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1558 } 1566 }
1559 1567
1560 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) { 1568 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) {
1561 bool disable_picture_quad_image_filtering = 1569 bool disable_picture_quad_image_filtering =
1562 IsActivelyScrolling() || 1570 IsActivelyScrolling() ||
1563 (animation_host_ ? animation_host_->NeedsAnimateLayers() 1571 (animation_host_ ? animation_host_->NeedsAnimateLayers()
1564 : animation_registrar_->needs_animate_layers()); 1572 : animation_registrar_->needs_animate_layers());
1565 1573
1566 scoped_ptr<SoftwareRenderer> temp_software_renderer = 1574 scoped_ptr<SoftwareRenderer> temp_software_renderer =
1567 SoftwareRenderer::Create(this, &settings_.renderer_settings, 1575 SoftwareRenderer::Create(this, &settings_.renderer_settings,
1568 output_surface_.get(), NULL); 1576 output_surface_, NULL);
1569 temp_software_renderer->DrawFrame(&frame->render_passes, 1577 temp_software_renderer->DrawFrame(&frame->render_passes,
1570 device_scale_factor_, 1578 device_scale_factor_,
1571 DeviceViewport(), 1579 DeviceViewport(),
1572 DeviceClip(), 1580 DeviceClip(),
1573 disable_picture_quad_image_filtering); 1581 disable_picture_quad_image_filtering);
1574 } else { 1582 } else {
1575 renderer_->DrawFrame(&frame->render_passes, 1583 renderer_->DrawFrame(&frame->render_passes,
1576 device_scale_factor_, 1584 device_scale_factor_,
1577 DeviceViewport(), 1585 DeviceViewport(),
1578 DeviceClip(), 1586 DeviceClip(),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 return settings_.gpu_rasterization_msaa_sample_count; 1628 return settings_.gpu_rasterization_msaa_sample_count;
1621 } 1629 }
1622 1630
1623 bool LayerTreeHostImpl::CanUseGpuRasterization() { 1631 bool LayerTreeHostImpl::CanUseGpuRasterization() {
1624 if (!(output_surface_ && output_surface_->context_provider() && 1632 if (!(output_surface_ && output_surface_->context_provider() &&
1625 output_surface_->worker_context_provider())) 1633 output_surface_->worker_context_provider()))
1626 return false; 1634 return false;
1627 1635
1628 ContextProvider* context_provider = 1636 ContextProvider* context_provider =
1629 output_surface_->worker_context_provider(); 1637 output_surface_->worker_context_provider();
1630 base::AutoLock context_lock(*context_provider->GetLock()); 1638 ContextProvider::ScopedContextLock scoped_context(context_provider);
1631 if (!context_provider->GrContext()) 1639 if (!context_provider->GrContext())
1632 return false; 1640 return false;
1633 1641
1634 return true; 1642 return true;
1635 } 1643 }
1636 1644
1637 void LayerTreeHostImpl::UpdateGpuRasterizationStatus() { 1645 void LayerTreeHostImpl::UpdateGpuRasterizationStatus() {
1638 bool use_gpu = false; 1646 bool use_gpu = false;
1639 bool use_msaa = false; 1647 bool use_msaa = false;
1640 bool using_msaa_for_complex_content = 1648 bool using_msaa_for_complex_content =
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
2003 if (recycle_tree_) 2011 if (recycle_tree_)
2004 recycle_tree_->RecreateResources(); 2012 recycle_tree_->RecreateResources();
2005 } 2013 }
2006 2014
2007 void LayerTreeHostImpl::CreateAndSetRenderer() { 2015 void LayerTreeHostImpl::CreateAndSetRenderer() {
2008 DCHECK(!renderer_); 2016 DCHECK(!renderer_);
2009 DCHECK(output_surface_); 2017 DCHECK(output_surface_);
2010 DCHECK(resource_provider_); 2018 DCHECK(resource_provider_);
2011 2019
2012 if (output_surface_->capabilities().delegated_rendering) { 2020 if (output_surface_->capabilities().delegated_rendering) {
2013 renderer_ = DelegatingRenderer::Create(this, &settings_.renderer_settings, 2021 renderer_ =
2014 output_surface_.get(), 2022 DelegatingRenderer::Create(this, &settings_.renderer_settings,
2015 resource_provider_.get()); 2023 output_surface_, resource_provider_.get());
2016 } else if (output_surface_->context_provider()) { 2024 } else if (output_surface_->context_provider()) {
2017 renderer_ = GLRenderer::Create( 2025 renderer_ = GLRenderer::Create(
2018 this, &settings_.renderer_settings, output_surface_.get(), 2026 this, &settings_.renderer_settings, output_surface_,
2019 resource_provider_.get(), texture_mailbox_deleter_.get(), 2027 resource_provider_.get(), texture_mailbox_deleter_.get(),
2020 settings_.renderer_settings.highp_threshold_min); 2028 settings_.renderer_settings.highp_threshold_min);
2021 } else if (output_surface_->software_device()) { 2029 } else if (output_surface_->software_device()) {
2022 renderer_ = SoftwareRenderer::Create(this, &settings_.renderer_settings, 2030 renderer_ =
2023 output_surface_.get(), 2031 SoftwareRenderer::Create(this, &settings_.renderer_settings,
2024 resource_provider_.get()); 2032 output_surface_, resource_provider_.get());
2025 } 2033 }
2026 DCHECK(renderer_); 2034 DCHECK(renderer_);
2027 2035
2028 renderer_->SetVisible(visible_); 2036 renderer_->SetVisible(visible_);
2029 SetFullRootLayerDamage(); 2037 SetFullRootLayerDamage();
2030 2038
2031 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be 2039 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be
2032 // initialized to get max texture size. Also, after releasing resources, 2040 // initialized to get max texture size. Also, after releasing resources,
2033 // trees need another update to generate new ones. 2041 // trees need another update to generate new ones.
2034 active_tree_->set_needs_update_draw_properties(); 2042 active_tree_->set_needs_update_draw_properties();
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2143 main_frame_events.Pass()); 2151 main_frame_events.Pass());
2144 } 2152 }
2145 2153
2146 void LayerTreeHostImpl::CleanUpTileManager() { 2154 void LayerTreeHostImpl::CleanUpTileManager() {
2147 tile_manager_->FinishTasksAndCleanUp(); 2155 tile_manager_->FinishTasksAndCleanUp();
2148 resource_pool_ = nullptr; 2156 resource_pool_ = nullptr;
2149 tile_task_worker_pool_ = nullptr; 2157 tile_task_worker_pool_ = nullptr;
2150 single_thread_synchronous_task_graph_runner_ = nullptr; 2158 single_thread_synchronous_task_graph_runner_ = nullptr;
2151 } 2159 }
2152 2160
2153 scoped_ptr<OutputSurface> LayerTreeHostImpl::ReleaseOutputSurface() { 2161 void LayerTreeHostImpl::ReleaseOutputSurface() {
2154 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface"); 2162 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface");
2155 2163
2156 // Since we will create a new resource provider, we cannot continue to use 2164 // Since we will create a new resource provider, we cannot continue to use
2157 // the old resources (i.e. render_surfaces and texture IDs). Clear them 2165 // the old resources (i.e. render_surfaces and texture IDs). Clear them
2158 // before we destroy the old resource provider. 2166 // before we destroy the old resource provider.
2159 ReleaseTreeResources(); 2167 ReleaseTreeResources();
2160 2168
2161 // Note: order is important here. 2169 // Note: order is important here.
2162 renderer_ = nullptr; 2170 renderer_ = nullptr;
2163 CleanUpTileManager(); 2171 CleanUpTileManager();
2164 resource_provider_ = nullptr; 2172 resource_provider_ = nullptr;
2165 2173
2166 return output_surface_.Pass(); 2174 // Detach from the old output surface and reset |output_surface_| pointer
2175 // as this surface is going to be destroyed independent of if binding the
2176 // new output surface succeeds or not.
2177 if (output_surface_) {
2178 output_surface_->DetachFromClient();
2179 output_surface_ = nullptr;
2180 }
2167 } 2181 }
2168 2182
2169 bool LayerTreeHostImpl::InitializeRenderer( 2183 bool LayerTreeHostImpl::InitializeRenderer(OutputSurface* output_surface) {
2170 scoped_ptr<OutputSurface> output_surface) {
2171 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); 2184 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer");
2172 2185
2173 ReleaseOutputSurface(); 2186 ReleaseOutputSurface();
2174 if (!output_surface->BindToClient(this)) { 2187 if (!output_surface->BindToClient(this)) {
2175 // Avoid recreating tree resources because we might not have enough 2188 // Avoid recreating tree resources because we might not have enough
2176 // information to do this yet (eg. we don't have a TileManager at this 2189 // information to do this yet (eg. we don't have a TileManager at this
2177 // point). 2190 // point).
2178 return false; 2191 return false;
2179 } 2192 }
2180 2193
2181 output_surface_ = output_surface.Pass(); 2194 output_surface_ = output_surface;
2182 resource_provider_ = ResourceProvider::Create( 2195 resource_provider_ = ResourceProvider::Create(
2183 output_surface_.get(), shared_bitmap_manager_, gpu_memory_buffer_manager_, 2196 output_surface_, shared_bitmap_manager_, gpu_memory_buffer_manager_,
2184 proxy_->blocking_main_thread_task_runner(), 2197 proxy_->blocking_main_thread_task_runner(),
2185 settings_.renderer_settings.highp_threshold_min, 2198 settings_.renderer_settings.highp_threshold_min,
2186 settings_.renderer_settings.use_rgba_4444_textures, 2199 settings_.renderer_settings.use_rgba_4444_textures,
2187 settings_.renderer_settings.texture_id_allocation_chunk_size, 2200 settings_.renderer_settings.texture_id_allocation_chunk_size,
2188 settings_.use_image_texture_targets); 2201 settings_.use_image_texture_targets);
2189 2202
2190 CreateAndSetRenderer(); 2203 CreateAndSetRenderer();
2191 2204
2192 // Since the new renderer may be capable of MSAA, update status here. 2205 // Since the new renderer may be capable of MSAA, update status here.
2193 UpdateGpuRasterizationStatus(); 2206 UpdateGpuRasterizationStatus();
(...skipping 1406 matching lines...) Expand 10 before | Expand all | Expand 10 after
3600 if (active_tree()) { 3613 if (active_tree()) {
3601 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id); 3614 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id);
3602 if (layer) 3615 if (layer)
3603 return layer->ScrollOffsetForAnimation(); 3616 return layer->ScrollOffsetForAnimation();
3604 } 3617 }
3605 3618
3606 return gfx::ScrollOffset(); 3619 return gfx::ScrollOffset();
3607 } 3620 }
3608 3621
3609 } // namespace cc 3622 } // 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