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

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: dcheck 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
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 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 this, &settings_, output_surface_.get(), resource_provider.get(), 175 this, &settings_, output_surface_.get(), resource_provider.get(),
176 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); 176 texture_mailbox_deleter_.get(), settings_.highp_threshold_min);
177 if (!renderer) 177 if (!renderer)
178 return; 178 return;
179 renderer_ = std::move(renderer); 179 renderer_ = std::move(renderer);
180 #else 180 #else
181 NOTREACHED(); 181 NOTREACHED();
182 #endif 182 #endif
183 } else { 183 } else {
184 std::unique_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create( 184 std::unique_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create(
185 this, &settings_, output_surface_.get(), resource_provider.get(), 185 this, &settings_, output_surface_.get(), resource_provider.get());
186 true /* use_image_hijack_canvas */);
187 if (!renderer) 186 if (!renderer)
188 return; 187 return;
188 software_renderer_ = renderer.get();
189 renderer_ = std::move(renderer); 189 renderer_ = std::move(renderer);
190 } 190 }
191 191
192 renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_); 192 renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_);
193 193
194 resource_provider_ = std::move(resource_provider); 194 resource_provider_ = std::move(resource_provider);
195 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using 195 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using
196 // overlays. 196 // overlays.
197 bool output_partial_list = renderer_->Capabilities().using_partial_swap && 197 bool output_partial_list = renderer_->Capabilities().using_partial_swap &&
198 !output_surface_->GetOverlayCandidateValidator(); 198 !output_surface_->GetOverlayCandidateValidator();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 if (output_surface_->SurfaceIsSuspendForRecycle()) { 283 if (output_surface_->SurfaceIsSuspendForRecycle()) {
284 TRACE_EVENT_INSTANT0("cc", "Surface is suspended for recycle.", 284 TRACE_EVENT_INSTANT0("cc", "Surface is suspended for recycle.",
285 TRACE_EVENT_SCOPE_THREAD); 285 TRACE_EVENT_SCOPE_THREAD);
286 should_draw = false; 286 should_draw = false;
287 } 287 }
288 288
289 if (should_draw) { 289 if (should_draw) {
290 gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_); 290 gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_);
291 gfx::Rect device_clip_rect = 291 gfx::Rect device_clip_rect =
292 external_clip_.IsEmpty() ? device_viewport_rect : external_clip_; 292 external_clip_.IsEmpty() ? device_viewport_rect : external_clip_;
293 bool disable_picture_quad_image_filtering = false; 293
294 bool disable_image_filtering =
295 frame.metadata.is_resourceless_software_draw_with_scroll_or_animation;
296 if (software_renderer_) {
297 software_renderer_->SetDisablePictureQuadImageFiltering(
298 disable_image_filtering);
299 } else {
300 // This should only be set for software draws in synchronous compositor.
301 DCHECK(!disable_image_filtering);
302 }
294 303
295 renderer_->DecideRenderPassAllocationsForFrame( 304 renderer_->DecideRenderPassAllocationsForFrame(
296 frame_data->render_pass_list); 305 frame_data->render_pass_list);
297 renderer_->DrawFrame(&frame_data->render_pass_list, device_scale_factor_, 306 renderer_->DrawFrame(&frame_data->render_pass_list, device_scale_factor_,
298 device_color_space_, device_viewport_rect, 307 device_color_space_, device_viewport_rect,
299 device_clip_rect, 308 device_clip_rect);
300 disable_picture_quad_image_filtering);
301 } else { 309 } else {
302 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD); 310 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD);
303 } 311 }
304 312
305 bool should_swap = should_draw && size_matches; 313 bool should_swap = should_draw && size_matches;
306 if (should_swap) { 314 if (should_swap) {
307 swapped_since_resize_ = true; 315 swapped_since_resize_ = true;
308 for (auto& latency : frame.metadata.latency_info) { 316 for (auto& latency : frame.metadata.latency_info) {
309 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow", 317 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow",
310 TRACE_ID_DONT_MANGLE(latency.trace_id()), 318 TRACE_ID_DONT_MANGLE(latency.trace_id()),
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 423
416 if (surface_id == current_surface_id_) 424 if (surface_id == current_surface_id_)
417 UpdateRootSurfaceResourcesLocked(); 425 UpdateRootSurfaceResourcesLocked();
418 } 426 }
419 427
420 SurfaceId Display::CurrentSurfaceId() { 428 SurfaceId Display::CurrentSurfaceId() {
421 return current_surface_id_; 429 return current_surface_id_;
422 } 430 }
423 431
424 } // namespace cc 432 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698