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 #include <map> | 9 #include <map> |
10 | 10 |
(...skipping 2017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2028 ContextProvider* context_provider = output_surface_->context_provider(); | 2028 ContextProvider* context_provider = output_surface_->context_provider(); |
2029 if (!context_provider) { | 2029 if (!context_provider) { |
2030 *resource_pool = | 2030 *resource_pool = |
2031 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2031 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
2032 | 2032 |
2033 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( | 2033 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( |
2034 task_runner, task_graph_runner_, resource_provider_.get()); | 2034 task_runner, task_graph_runner_, resource_provider_.get()); |
2035 return; | 2035 return; |
2036 } | 2036 } |
2037 | 2037 |
| 2038 // Pass the single-threaded synchronous task graph runner to the worker pool |
| 2039 // if we're in synchronous single-threaded mode. |
| 2040 TaskGraphRunner* task_graph_runner = task_graph_runner_; |
| 2041 if (IsSynchronousSingleThreaded()) { |
| 2042 DCHECK(!single_thread_synchronous_task_graph_runner_); |
| 2043 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
| 2044 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); |
| 2045 } |
| 2046 |
2038 if (use_gpu_rasterization_) { | 2047 if (use_gpu_rasterization_) { |
2039 *resource_pool = | 2048 *resource_pool = |
2040 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2049 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
2041 | 2050 |
2042 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( | 2051 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( |
2043 task_runner, task_graph_runner_, | 2052 task_runner, task_graph_runner, |
2044 static_cast<GpuRasterizer*>(rasterizer_.get())); | 2053 static_cast<GpuRasterizer*>(rasterizer_.get())); |
2045 return; | 2054 return; |
2046 } | 2055 } |
2047 | 2056 |
2048 if (GetRendererCapabilities().using_image) { | 2057 if (GetRendererCapabilities().using_image) { |
2049 unsigned image_target = settings_.use_image_texture_target; | 2058 unsigned image_target = settings_.use_image_texture_target; |
2050 DCHECK_IMPLIES( | 2059 DCHECK_IMPLIES( |
2051 image_target == GL_TEXTURE_RECTANGLE_ARB, | 2060 image_target == GL_TEXTURE_RECTANGLE_ARB, |
2052 context_provider->ContextCapabilities().gpu.texture_rectangle); | 2061 context_provider->ContextCapabilities().gpu.texture_rectangle); |
2053 DCHECK_IMPLIES( | 2062 DCHECK_IMPLIES( |
2054 image_target == GL_TEXTURE_EXTERNAL_OES, | 2063 image_target == GL_TEXTURE_EXTERNAL_OES, |
2055 context_provider->ContextCapabilities().gpu.egl_image_external); | 2064 context_provider->ContextCapabilities().gpu.egl_image_external); |
2056 | 2065 |
2057 if (settings_.use_zero_copy || IsSynchronousSingleThreaded()) { | 2066 if (settings_.use_zero_copy || IsSynchronousSingleThreaded()) { |
2058 *resource_pool = | 2067 *resource_pool = |
2059 ResourcePool::Create(resource_provider_.get(), image_target); | 2068 ResourcePool::Create(resource_provider_.get(), image_target); |
2060 | 2069 |
2061 TaskGraphRunner* task_graph_runner; | |
2062 if (IsSynchronousSingleThreaded()) { | |
2063 DCHECK(!single_thread_synchronous_task_graph_runner_); | |
2064 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); | |
2065 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); | |
2066 } else { | |
2067 task_graph_runner = task_graph_runner_; | |
2068 } | |
2069 | |
2070 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( | 2070 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( |
2071 task_runner, task_graph_runner, resource_provider_.get()); | 2071 task_runner, task_graph_runner, resource_provider_.get()); |
2072 return; | 2072 return; |
2073 } | 2073 } |
2074 | 2074 |
2075 if (settings_.use_one_copy) { | 2075 if (settings_.use_one_copy) { |
2076 // We need to create a staging resource pool when using copy rasterizer. | 2076 // We need to create a staging resource pool when using copy rasterizer. |
2077 *staging_resource_pool = | 2077 *staging_resource_pool = |
2078 ResourcePool::Create(resource_provider_.get(), image_target); | 2078 ResourcePool::Create(resource_provider_.get(), image_target); |
2079 *resource_pool = | 2079 *resource_pool = |
2080 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2080 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
2081 | 2081 |
2082 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( | 2082 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( |
2083 task_runner, task_graph_runner_, context_provider, | 2083 task_runner, task_graph_runner, context_provider, |
2084 resource_provider_.get(), staging_resource_pool_.get()); | 2084 resource_provider_.get(), staging_resource_pool_.get()); |
2085 return; | 2085 return; |
2086 } | 2086 } |
2087 } | 2087 } |
2088 | 2088 |
2089 // Synchronous single-threaded mode depends on tiles being ready to | 2089 // Synchronous single-threaded mode depends on tiles being ready to |
2090 // draw when raster is complete. Therefore, it must use one of zero | 2090 // draw when raster is complete. Therefore, it must use one of zero |
2091 // copy, software raster, or GPU raster (in the branches above). | 2091 // copy, software raster, or GPU raster (in the branches above). |
2092 DCHECK(!IsSynchronousSingleThreaded()); | 2092 DCHECK(!IsSynchronousSingleThreaded()); |
2093 | 2093 |
(...skipping 1370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3464 new_target.SetToMin(layer_impl->MaxScrollOffset()); | 3464 new_target.SetToMin(layer_impl->MaxScrollOffset()); |
3465 | 3465 |
3466 curve->UpdateTarget( | 3466 curve->UpdateTarget( |
3467 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) | 3467 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) |
3468 .InSecondsF(), | 3468 .InSecondsF(), |
3469 new_target); | 3469 new_target); |
3470 | 3470 |
3471 return true; | 3471 return true; |
3472 } | 3472 } |
3473 } // namespace cc | 3473 } // namespace cc |
OLD | NEW |