Chromium Code Reviews| 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 |