OLD | NEW |
---|---|
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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
57 #include "cc/resources/texture_mailbox_deleter.h" | 57 #include "cc/resources/texture_mailbox_deleter.h" |
58 #include "cc/resources/ui_resource_bitmap.h" | 58 #include "cc/resources/ui_resource_bitmap.h" |
59 #include "cc/scheduler/delay_based_time_source.h" | 59 #include "cc/scheduler/delay_based_time_source.h" |
60 #include "cc/trees/damage_tracker.h" | 60 #include "cc/trees/damage_tracker.h" |
61 #include "cc/trees/layer_tree_host.h" | 61 #include "cc/trees/layer_tree_host.h" |
62 #include "cc/trees/layer_tree_host_common.h" | 62 #include "cc/trees/layer_tree_host_common.h" |
63 #include "cc/trees/layer_tree_impl.h" | 63 #include "cc/trees/layer_tree_impl.h" |
64 #include "cc/trees/occlusion_tracker.h" | 64 #include "cc/trees/occlusion_tracker.h" |
65 #include "cc/trees/single_thread_proxy.h" | 65 #include "cc/trees/single_thread_proxy.h" |
66 #include "cc/trees/tree_synchronizer.h" | 66 #include "cc/trees/tree_synchronizer.h" |
67 #include "gpu/command_buffer/client/gles2_interface.h" | |
67 #include "gpu/GLES2/gl2extchromium.h" | 68 #include "gpu/GLES2/gl2extchromium.h" |
68 #include "ui/gfx/frame_time.h" | 69 #include "ui/gfx/frame_time.h" |
69 #include "ui/gfx/size_conversions.h" | 70 #include "ui/gfx/size_conversions.h" |
70 #include "ui/gfx/vector2d_conversions.h" | 71 #include "ui/gfx/vector2d_conversions.h" |
71 | 72 |
73 using gpu::gles2::GLES2Interface; | |
74 | |
72 namespace { | 75 namespace { |
73 | 76 |
74 void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) { | 77 void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) { |
75 if (visible) { | 78 if (visible) { |
76 TRACE_EVENT_ASYNC_BEGIN1("webkit", | 79 TRACE_EVENT_ASYNC_BEGIN1("webkit", |
77 "LayerTreeHostImpl::SetVisible", | 80 "LayerTreeHostImpl::SetVisible", |
78 id, | 81 id, |
79 "LayerTreeHostImpl", | 82 "LayerTreeHostImpl", |
80 id); | 83 id); |
81 return; | 84 return; |
(...skipping 1285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1367 // because they were exported. | 1370 // because they were exported. |
1368 if (tile_manager_) { | 1371 if (tile_manager_) { |
1369 DCHECK(resource_pool_); | 1372 DCHECK(resource_pool_); |
1370 | 1373 |
1371 resource_pool_->CheckBusyResources(); | 1374 resource_pool_->CheckBusyResources(); |
1372 resource_pool_->ReduceResourceUsage(); | 1375 resource_pool_->ReduceResourceUsage(); |
1373 } | 1376 } |
1374 // If we're not visible, we likely released resources, so we want to | 1377 // If we're not visible, we likely released resources, so we want to |
1375 // aggressively flush here to make sure those DeleteTextures make it to the | 1378 // aggressively flush here to make sure those DeleteTextures make it to the |
1376 // GPU process to free up the memory. | 1379 // GPU process to free up the memory. |
1377 if (resource_provider_ && !visible_) | 1380 if (output_surface_ && !visible_) { |
danakj
2014/07/11 16:49:04
if os and os->context_provider() && !visible
| |
1378 resource_provider_->ShallowFlushIfSupported(); | 1381 GLES2Interface* gl = output_surface_->context_provider()->ContextGL(); |
1382 if (gl) | |
danakj
2014/07/11 16:49:04
don't need to check gl
| |
1383 gl->ShallowFlushCHROMIUM(); | |
1384 } | |
1379 } | 1385 } |
1380 | 1386 |
1381 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { | 1387 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { |
1382 client_->OnCanDrawStateChanged(CanDraw()); | 1388 client_->OnCanDrawStateChanged(CanDraw()); |
1383 } | 1389 } |
1384 | 1390 |
1385 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { | 1391 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { |
1386 CompositorFrameMetadata metadata; | 1392 CompositorFrameMetadata metadata; |
1387 metadata.device_scale_factor = device_scale_factor_; | 1393 metadata.device_scale_factor = device_scale_factor_; |
1388 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); | 1394 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1902 ContextProvider* context_provider = output_surface_->context_provider(); | 1908 ContextProvider* context_provider = output_surface_->context_provider(); |
1903 transfer_buffer_memory_limit_ = | 1909 transfer_buffer_memory_limit_ = |
1904 GetMaxTransferBufferUsageBytes(context_provider); | 1910 GetMaxTransferBufferUsageBytes(context_provider); |
1905 | 1911 |
1906 if (use_gpu_rasterization_) { | 1912 if (use_gpu_rasterization_) { |
1907 resource_pool_ = | 1913 resource_pool_ = |
1908 ResourcePool::Create(resource_provider_.get(), | 1914 ResourcePool::Create(resource_provider_.get(), |
1909 GL_TEXTURE_2D, | 1915 GL_TEXTURE_2D, |
1910 resource_provider_->best_texture_format()); | 1916 resource_provider_->best_texture_format()); |
1911 | 1917 |
1912 raster_worker_pool_ = GpuRasterWorkerPool::Create( | 1918 raster_worker_pool_ = |
1913 proxy_->ImplThreadTaskRunner(), resource_provider_.get()); | 1919 GpuRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1920 context_provider, | |
1921 resource_provider_.get()); | |
1914 on_demand_task_graph_runner_ = &synchronous_task_graph_runner_; | 1922 on_demand_task_graph_runner_ = &synchronous_task_graph_runner_; |
1915 } else if (UseZeroCopyTextureUpload()) { | 1923 } else if (UseZeroCopyTextureUpload()) { |
1916 resource_pool_ = | 1924 resource_pool_ = |
1917 ResourcePool::Create(resource_provider_.get(), | 1925 ResourcePool::Create(resource_provider_.get(), |
1918 GetMapImageTextureTarget(context_provider), | 1926 GetMapImageTextureTarget(context_provider), |
1919 resource_provider_->best_texture_format()); | 1927 resource_provider_->best_texture_format()); |
1920 | 1928 |
1921 raster_worker_pool_ = | 1929 raster_worker_pool_ = |
1922 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1930 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1923 RasterWorkerPool::GetTaskGraphRunner(), | 1931 RasterWorkerPool::GetTaskGraphRunner(), |
1924 resource_provider_.get()); | 1932 resource_provider_.get()); |
1925 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | 1933 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); |
1926 } else if (UseOneCopyTextureUpload()) { | 1934 } else if (UseOneCopyTextureUpload()) { |
1927 // We need to create a staging resource pool when using copy rasterizer. | 1935 // We need to create a staging resource pool when using copy rasterizer. |
1928 staging_resource_pool_ = | 1936 staging_resource_pool_ = |
1929 ResourcePool::Create(resource_provider_.get(), | 1937 ResourcePool::Create(resource_provider_.get(), |
1930 GetMapImageTextureTarget(context_provider), | 1938 GetMapImageTextureTarget(context_provider), |
1931 resource_provider_->best_texture_format()); | 1939 resource_provider_->best_texture_format()); |
1932 resource_pool_ = | 1940 resource_pool_ = |
1933 ResourcePool::Create(resource_provider_.get(), | 1941 ResourcePool::Create(resource_provider_.get(), |
1934 GL_TEXTURE_2D, | 1942 GL_TEXTURE_2D, |
1935 resource_provider_->best_texture_format()); | 1943 resource_provider_->best_texture_format()); |
1936 | 1944 |
1937 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | 1945 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( |
1938 proxy_->ImplThreadTaskRunner(), | 1946 proxy_->ImplThreadTaskRunner(), |
1939 RasterWorkerPool::GetTaskGraphRunner(), | 1947 RasterWorkerPool::GetTaskGraphRunner(), |
1948 context_provider, | |
1940 resource_provider_.get(), | 1949 resource_provider_.get(), |
1941 staging_resource_pool_.get()); | 1950 staging_resource_pool_.get()); |
1942 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | 1951 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); |
1943 } else { | 1952 } else { |
1944 resource_pool_ = ResourcePool::Create( | 1953 resource_pool_ = ResourcePool::Create( |
1945 resource_provider_.get(), | 1954 resource_provider_.get(), |
1946 GL_TEXTURE_2D, | 1955 GL_TEXTURE_2D, |
1947 resource_provider_->memory_efficient_texture_format()); | 1956 resource_provider_->memory_efficient_texture_format()); |
1948 | 1957 |
1949 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 1958 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
1950 proxy_->ImplThreadTaskRunner(), | 1959 proxy_->ImplThreadTaskRunner(), |
1951 RasterWorkerPool::GetTaskGraphRunner(), | 1960 RasterWorkerPool::GetTaskGraphRunner(), |
1961 context_provider, | |
1952 resource_provider_.get(), | 1962 resource_provider_.get(), |
1953 transfer_buffer_memory_limit_); | 1963 transfer_buffer_memory_limit_); |
1954 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | 1964 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); |
1955 } | 1965 } |
1956 | 1966 |
1957 tile_manager_ = | 1967 tile_manager_ = |
1958 TileManager::Create(this, | 1968 TileManager::Create(this, |
1959 proxy_->ImplThreadTaskRunner(), | 1969 proxy_->ImplThreadTaskRunner(), |
1960 resource_pool_.get(), | 1970 resource_pool_.get(), |
1961 raster_worker_pool_->AsRasterizer(), | 1971 raster_worker_pool_->AsRasterizer(), |
(...skipping 1283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3245 } | 3255 } |
3246 | 3256 |
3247 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3257 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3248 std::vector<PictureLayerImpl*>::iterator it = | 3258 std::vector<PictureLayerImpl*>::iterator it = |
3249 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3259 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3250 DCHECK(it != picture_layers_.end()); | 3260 DCHECK(it != picture_layers_.end()); |
3251 picture_layers_.erase(it); | 3261 picture_layers_.erase(it); |
3252 } | 3262 } |
3253 | 3263 |
3254 } // namespace cc | 3264 } // namespace cc |
OLD | NEW |