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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 1036693002: cc: Fix crash while running blink layout tests with GPU rasterization (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: +test Created 5 years, 9 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
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 10
(...skipping 2017 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW
« no previous file with comments | « no previous file | cc/trees/layer_tree_host_pixeltest_synchronous.cc » ('j') | cc/trees/layer_tree_host_pixeltest_synchronous.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698