| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |