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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
71 #include "gpu/command_buffer/client/gles2_interface.h" | 71 #include "gpu/command_buffer/client/gles2_interface.h" |
72 #include "gpu/GLES2/gl2extchromium.h" | 72 #include "gpu/GLES2/gl2extchromium.h" |
73 #include "ui/gfx/frame_time.h" | 73 #include "ui/gfx/frame_time.h" |
74 #include "ui/gfx/geometry/rect_conversions.h" | 74 #include "ui/gfx/geometry/rect_conversions.h" |
75 #include "ui/gfx/size_conversions.h" | 75 #include "ui/gfx/size_conversions.h" |
76 #include "ui/gfx/vector2d_conversions.h" | 76 #include "ui/gfx/vector2d_conversions.h" |
77 | 77 |
78 namespace cc { | 78 namespace cc { |
79 namespace { | 79 namespace { |
80 | 80 |
81 bool SupportsTextureTarget(unsigned target, | |
82 LayerTreeSettings::TextureTargetPrefs prefs) { | |
reveman
2014/10/22 12:40:39
I find this utility function a bit confusing. Base
| |
83 switch (prefs) { | |
84 case LayerTreeSettings::USE_DEFAULT_TEXTURE_TARGET: | |
85 return true; | |
86 case LayerTreeSettings::FORCE_TEXTURE_2D_TARGET: | |
87 return target == GL_TEXTURE_2D; | |
88 case LayerTreeSettings::FORCE_TEXTURE_RECT_TARGET: | |
89 return target == GL_TEXTURE_RECTANGLE_ARB; | |
90 } | |
91 NOTREACHED(); | |
92 return false; | |
93 } | |
94 | |
81 // Small helper class that saves the current viewport location as the user sees | 95 // Small helper class that saves the current viewport location as the user sees |
82 // it and resets to the same location. | 96 // it and resets to the same location. |
83 class ViewportAnchor { | 97 class ViewportAnchor { |
84 public: | 98 public: |
85 ViewportAnchor(LayerImpl* inner_scroll, LayerImpl* outer_scroll) | 99 ViewportAnchor(LayerImpl* inner_scroll, LayerImpl* outer_scroll) |
86 : inner_(inner_scroll), | 100 : inner_(inner_scroll), |
87 outer_(outer_scroll) { | 101 outer_(outer_scroll) { |
88 viewport_in_content_coordinates_ = inner_->TotalScrollOffset(); | 102 viewport_in_content_coordinates_ = inner_->TotalScrollOffset(); |
89 | 103 |
90 if (outer_) | 104 if (outer_) |
(...skipping 1915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2006 DCHECK(settings_.impl_side_painting); | 2020 DCHECK(settings_.impl_side_painting); |
2007 DCHECK(output_surface_); | 2021 DCHECK(output_surface_); |
2008 DCHECK(resource_provider_); | 2022 DCHECK(resource_provider_); |
2009 base::SingleThreadTaskRunner* task_runner = | 2023 base::SingleThreadTaskRunner* task_runner = |
2010 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2024 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
2011 : proxy_->MainThreadTaskRunner(); | 2025 : proxy_->MainThreadTaskRunner(); |
2012 DCHECK(task_runner); | 2026 DCHECK(task_runner); |
2013 | 2027 |
2014 ContextProvider* context_provider = output_surface_->context_provider(); | 2028 ContextProvider* context_provider = output_surface_->context_provider(); |
2015 if (!context_provider) { | 2029 if (!context_provider) { |
2030 DCHECK( | |
2031 SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); | |
2016 resource_pool_ = | 2032 resource_pool_ = |
2017 ResourcePool::Create(resource_provider_.get(), | 2033 ResourcePool::Create(resource_provider_.get(), |
2018 GL_TEXTURE_2D, | 2034 GL_TEXTURE_2D, |
2019 resource_provider_->best_texture_format()); | 2035 resource_provider_->best_texture_format()); |
2020 | 2036 |
2021 raster_worker_pool_ = | 2037 raster_worker_pool_ = |
2022 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2038 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
2023 RasterWorkerPool::GetTaskGraphRunner(), | 2039 RasterWorkerPool::GetTaskGraphRunner(), |
2024 resource_provider_.get()); | 2040 resource_provider_.get()); |
2025 } else if (use_gpu_rasterization_) { | 2041 } else if (use_gpu_rasterization_) { |
2042 DCHECK( | |
2043 SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); | |
2026 resource_pool_ = | 2044 resource_pool_ = |
2027 ResourcePool::Create(resource_provider_.get(), | 2045 ResourcePool::Create(resource_provider_.get(), |
2028 GL_TEXTURE_2D, | 2046 GL_TEXTURE_2D, |
2029 resource_provider_->best_texture_format()); | 2047 resource_provider_->best_texture_format()); |
2030 | 2048 |
2031 raster_worker_pool_ = GpuRasterWorkerPool::Create( | 2049 raster_worker_pool_ = GpuRasterWorkerPool::Create( |
2032 task_runner, context_provider, resource_provider_.get()); | 2050 task_runner, context_provider, resource_provider_.get()); |
2033 } else if (UseZeroCopyRasterizer()) { | 2051 } else if (UseZeroCopyRasterizer()) { |
2034 resource_pool_ = ResourcePool::Create( | 2052 unsigned target = |
2035 resource_provider_.get(), | 2053 GetMapImageTextureTarget(context_provider->ContextCapabilities()); |
2036 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2054 if (settings_.texture_target_prefs == |
2037 resource_provider_->best_texture_format()); | 2055 LayerTreeSettings::FORCE_TEXTURE_2D_TARGET) |
reveman
2014/10/22 12:40:38
I don't think this should be a special case for ze
enne (OOO)
2014/10/22 19:20:44
Maybe I'm mistaken, but I don't think it applies t
reveman
2014/10/22 20:36:47
Correct, GLRenderer is only affected by the target
enne (OOO)
2014/10/22 21:14:30
I'm not sure that these should be the same flag, a
reveman
2014/10/22 23:13:35
I think ((pool type) * (raster target type)) + (dr
| |
2056 target = GL_TEXTURE_2D; | |
2057 DCHECK(SupportsTextureTarget(target, settings_.texture_target_prefs)); | |
2058 resource_pool_ = | |
2059 ResourcePool::Create(resource_provider_.get(), | |
2060 target, | |
2061 resource_provider_->best_texture_format()); | |
2038 | 2062 |
2039 raster_worker_pool_ = | 2063 raster_worker_pool_ = |
2040 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2064 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
2041 RasterWorkerPool::GetTaskGraphRunner(), | 2065 RasterWorkerPool::GetTaskGraphRunner(), |
2042 resource_provider_.get()); | 2066 resource_provider_.get()); |
2043 } else if (UseOneCopyRasterizer()) { | 2067 } else if (UseOneCopyRasterizer()) { |
2068 DCHECK( | |
2069 SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); | |
2044 // We need to create a staging resource pool when using copy rasterizer. | 2070 // We need to create a staging resource pool when using copy rasterizer. |
2045 staging_resource_pool_ = ResourcePool::Create( | 2071 staging_resource_pool_ = ResourcePool::Create( |
2046 resource_provider_.get(), | 2072 resource_provider_.get(), |
2047 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2073 GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
2048 resource_provider_->best_texture_format()); | 2074 resource_provider_->best_texture_format()); |
2049 resource_pool_ = | 2075 resource_pool_ = |
2050 ResourcePool::Create(resource_provider_.get(), | 2076 ResourcePool::Create(resource_provider_.get(), |
2051 GL_TEXTURE_2D, | 2077 GL_TEXTURE_2D, |
2052 resource_provider_->best_texture_format()); | 2078 resource_provider_->best_texture_format()); |
2053 | 2079 |
2054 raster_worker_pool_ = | 2080 raster_worker_pool_ = |
2055 OneCopyRasterWorkerPool::Create(task_runner, | 2081 OneCopyRasterWorkerPool::Create(task_runner, |
2056 RasterWorkerPool::GetTaskGraphRunner(), | 2082 RasterWorkerPool::GetTaskGraphRunner(), |
2057 context_provider, | 2083 context_provider, |
2058 resource_provider_.get(), | 2084 resource_provider_.get(), |
2059 staging_resource_pool_.get()); | 2085 staging_resource_pool_.get()); |
2060 } else { | 2086 } else { |
2087 DCHECK( | |
2088 SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); | |
2061 resource_pool_ = ResourcePool::Create( | 2089 resource_pool_ = ResourcePool::Create( |
2062 resource_provider_.get(), | 2090 resource_provider_.get(), |
2063 GL_TEXTURE_2D, | 2091 GL_TEXTURE_2D, |
2064 resource_provider_->memory_efficient_texture_format()); | 2092 resource_provider_->memory_efficient_texture_format()); |
2065 | 2093 |
2066 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 2094 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
2067 task_runner, | 2095 task_runner, |
2068 RasterWorkerPool::GetTaskGraphRunner(), | 2096 RasterWorkerPool::GetTaskGraphRunner(), |
2069 context_provider, | 2097 context_provider, |
2070 resource_provider_.get(), | 2098 resource_provider_.get(), |
(...skipping 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3475 } | 3503 } |
3476 | 3504 |
3477 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3505 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3478 std::vector<PictureLayerImpl*>::iterator it = | 3506 std::vector<PictureLayerImpl*>::iterator it = |
3479 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3507 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3480 DCHECK(it != picture_layers_.end()); | 3508 DCHECK(it != picture_layers_.end()); |
3481 picture_layers_.erase(it); | 3509 picture_layers_.erase(it); |
3482 } | 3510 } |
3483 | 3511 |
3484 } // namespace cc | 3512 } // namespace cc |
OLD | NEW |