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

Side by Side Diff: cc/surfaces/display.cc

Issue 2128113002: Use a cc::Display for WebView resourceless software draws. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: displaywebview: mojom Created 4 years, 5 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
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/test/fake_output_surface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/surfaces/display.h" 5 #include "cc/surfaces/display.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 bitmap_manager_(bitmap_manager), 45 bitmap_manager_(bitmap_manager),
46 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 46 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
47 settings_(settings), 47 settings_(settings),
48 compositor_surface_namespace_(compositor_surface_namespace), 48 compositor_surface_namespace_(compositor_surface_namespace),
49 begin_frame_source_(std::move(begin_frame_source)), 49 begin_frame_source_(std::move(begin_frame_source)),
50 output_surface_(std::move(output_surface)), 50 output_surface_(std::move(output_surface)),
51 scheduler_(std::move(scheduler)), 51 scheduler_(std::move(scheduler)),
52 texture_mailbox_deleter_(std::move(texture_mailbox_deleter)) { 52 texture_mailbox_deleter_(std::move(texture_mailbox_deleter)) {
53 DCHECK(surface_manager_); 53 DCHECK(surface_manager_);
54 DCHECK(output_surface_); 54 DCHECK(output_surface_);
55 DCHECK(texture_mailbox_deleter_);
56 DCHECK_EQ(!scheduler_, !begin_frame_source_); 55 DCHECK_EQ(!scheduler_, !begin_frame_source_);
57 56
58 surface_manager_->AddObserver(this); 57 surface_manager_->AddObserver(this);
59 58
60 if (scheduler_) 59 if (scheduler_)
61 scheduler_->SetClient(this); 60 scheduler_->SetClient(this);
62 } 61 }
63 62
64 Display::~Display() { 63 Display::~Display() {
65 // Only do this if Initialize() happened. 64 // Only do this if Initialize() happened.
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 std::unique_ptr<ResourceProvider> resource_provider(new ResourceProvider( 155 std::unique_ptr<ResourceProvider> resource_provider(new ResourceProvider(
157 output_surface_->context_provider(), bitmap_manager_, 156 output_surface_->context_provider(), bitmap_manager_,
158 gpu_memory_buffer_manager_, nullptr, settings_.highp_threshold_min, 157 gpu_memory_buffer_manager_, nullptr, settings_.highp_threshold_min,
159 settings_.texture_id_allocation_chunk_size, 158 settings_.texture_id_allocation_chunk_size,
160 output_surface_->capabilities().delegated_sync_points_required, 159 output_surface_->capabilities().delegated_sync_points_required,
161 settings_.use_gpu_memory_buffer_resources, 160 settings_.use_gpu_memory_buffer_resources,
162 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, 161 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1,
163 GL_TEXTURE_2D))); 162 GL_TEXTURE_2D)));
164 163
165 if (output_surface_->context_provider()) { 164 if (output_surface_->context_provider()) {
165 DCHECK(texture_mailbox_deleter_);
166 std::unique_ptr<GLRenderer> renderer = GLRenderer::Create( 166 std::unique_ptr<GLRenderer> renderer = GLRenderer::Create(
167 this, &settings_, output_surface_.get(), resource_provider.get(), 167 this, &settings_, output_surface_.get(), resource_provider.get(),
168 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); 168 texture_mailbox_deleter_.get(), settings_.highp_threshold_min);
169 if (!renderer) 169 if (!renderer)
170 return; 170 return;
171 renderer_ = std::move(renderer); 171 renderer_ = std::move(renderer);
172 } else if (output_surface_->vulkan_context_provider()) { 172 } else if (output_surface_->vulkan_context_provider()) {
173 #if defined(ENABLE_VULKAN) 173 #if defined(ENABLE_VULKAN)
174 DCHECK(texture_mailbox_deleter_);
174 std::unique_ptr<VulkanRenderer> renderer = VulkanRenderer::Create( 175 std::unique_ptr<VulkanRenderer> renderer = VulkanRenderer::Create(
175 this, &settings_, output_surface_.get(), resource_provider.get(), 176 this, &settings_, output_surface_.get(), resource_provider.get(),
176 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); 177 texture_mailbox_deleter_.get(), settings_.highp_threshold_min);
177 if (!renderer) 178 if (!renderer)
178 return; 179 return;
179 renderer_ = std::move(renderer); 180 renderer_ = std::move(renderer);
180 #else 181 #else
181 NOTREACHED(); 182 NOTREACHED();
182 #endif 183 #endif
183 } else { 184 } else {
184 std::unique_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create( 185 std::unique_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create(
185 this, &settings_, output_surface_.get(), resource_provider.get(), 186 this, &settings_, output_surface_.get(), resource_provider.get());
186 true /* use_image_hijack_canvas */);
187 if (!renderer) 187 if (!renderer)
188 return; 188 return;
189 software_renderer_ = renderer.get();
189 renderer_ = std::move(renderer); 190 renderer_ = std::move(renderer);
190 } 191 }
191 192
192 renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_); 193 renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_);
193 194
194 resource_provider_ = std::move(resource_provider); 195 resource_provider_ = std::move(resource_provider);
195 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using 196 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using
196 // overlays. 197 // overlays.
197 bool output_partial_list = renderer_->Capabilities().using_partial_swap && 198 bool output_partial_list = renderer_->Capabilities().using_partial_swap &&
198 !output_surface_->GetOverlayCandidateValidator(); 199 !output_surface_->GetOverlayCandidateValidator();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 if (output_surface_->SurfaceIsSuspendForRecycle()) { 284 if (output_surface_->SurfaceIsSuspendForRecycle()) {
284 TRACE_EVENT_INSTANT0("cc", "Surface is suspended for recycle.", 285 TRACE_EVENT_INSTANT0("cc", "Surface is suspended for recycle.",
285 TRACE_EVENT_SCOPE_THREAD); 286 TRACE_EVENT_SCOPE_THREAD);
286 should_draw = false; 287 should_draw = false;
287 } 288 }
288 289
289 if (should_draw) { 290 if (should_draw) {
290 gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_); 291 gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_);
291 gfx::Rect device_clip_rect = 292 gfx::Rect device_clip_rect =
292 external_clip_.IsEmpty() ? device_viewport_rect : external_clip_; 293 external_clip_.IsEmpty() ? device_viewport_rect : external_clip_;
293 bool disable_picture_quad_image_filtering = false; 294
295 bool disable_image_filtering =
296 frame.metadata.is_resourceless_software_draw_with_scroll_or_animation;
297 if (software_renderer_) {
298 software_renderer_->SetDisablePictureQuadImageFiltering(
299 disable_image_filtering);
300 } else {
301 // This should only be set for software draws in synchronous compositor.
302 DCHECK(!disable_image_filtering);
303 }
294 304
295 renderer_->DecideRenderPassAllocationsForFrame( 305 renderer_->DecideRenderPassAllocationsForFrame(
296 frame_data->render_pass_list); 306 frame_data->render_pass_list);
297 renderer_->DrawFrame(&frame_data->render_pass_list, device_scale_factor_, 307 renderer_->DrawFrame(&frame_data->render_pass_list, device_scale_factor_,
298 device_color_space_, device_viewport_rect, 308 device_color_space_, device_viewport_rect,
299 device_clip_rect, 309 device_clip_rect);
300 disable_picture_quad_image_filtering);
301 } else { 310 } else {
302 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD); 311 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD);
303 } 312 }
304 313
305 bool should_swap = should_draw && size_matches; 314 bool should_swap = should_draw && size_matches;
306 if (should_swap) { 315 if (should_swap) {
307 swapped_since_resize_ = true; 316 swapped_since_resize_ = true;
308 for (auto& latency : frame.metadata.latency_info) { 317 for (auto& latency : frame.metadata.latency_info) {
309 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow", 318 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow",
310 TRACE_ID_DONT_MANGLE(latency.trace_id()), 319 TRACE_ID_DONT_MANGLE(latency.trace_id()),
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 424
416 if (surface_id == current_surface_id_) 425 if (surface_id == current_surface_id_)
417 UpdateRootSurfaceResourcesLocked(); 426 UpdateRootSurfaceResourcesLocked();
418 } 427 }
419 428
420 SurfaceId Display::CurrentSurfaceId() { 429 SurfaceId Display::CurrentSurfaceId() {
421 return current_surface_id_; 430 return current_surface_id_;
422 } 431 }
423 432
424 } // namespace cc 433 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/test/fake_output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698