| 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/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 scheduler_->SetNewRootSurface(id); | 105 scheduler_->SetNewRootSurface(id); |
| 106 } | 106 } |
| 107 | 107 |
| 108 void Display::SetVisible(bool visible) { | 108 void Display::SetVisible(bool visible) { |
| 109 TRACE_EVENT1("cc", "Display::SetVisible", "visible", visible); | 109 TRACE_EVENT1("cc", "Display::SetVisible", "visible", visible); |
| 110 if (renderer_) | 110 if (renderer_) |
| 111 renderer_->SetVisible(visible); | 111 renderer_->SetVisible(visible); |
| 112 if (scheduler_) | 112 if (scheduler_) |
| 113 scheduler_->SetVisible(visible); | 113 scheduler_->SetVisible(visible); |
| 114 visible_ = visible; | 114 visible_ = visible; |
| 115 |
| 116 if (!visible) { |
| 117 // Damage tracker needs a full reset as renderer resources are dropped when |
| 118 // not visible. |
| 119 if (aggregator_ && !current_surface_id_.is_null()) |
| 120 aggregator_->SetFullDamageForSurface(current_surface_id_); |
| 121 } |
| 115 } | 122 } |
| 116 | 123 |
| 117 void Display::Resize(const gfx::Size& size) { | 124 void Display::Resize(const gfx::Size& size) { |
| 118 if (size == current_surface_size_) | 125 if (size == current_surface_size_) |
| 119 return; | 126 return; |
| 120 | 127 |
| 121 TRACE_EVENT0("cc", "Display::Resize"); | 128 TRACE_EVENT0("cc", "Display::Resize"); |
| 122 | 129 |
| 123 // Need to ensure all pending swaps have executed before the window is | 130 // Need to ensure all pending swaps have executed before the window is |
| 124 // resized, or D3D11 will scale the swap output. | 131 // resized, or D3D11 will scale the swap output. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 output_surface_->context_provider(), bitmap_manager_, | 172 output_surface_->context_provider(), bitmap_manager_, |
| 166 gpu_memory_buffer_manager_, nullptr, settings_.highp_threshold_min, | 173 gpu_memory_buffer_manager_, nullptr, settings_.highp_threshold_min, |
| 167 settings_.texture_id_allocation_chunk_size, | 174 settings_.texture_id_allocation_chunk_size, |
| 168 output_surface_->capabilities().delegated_sync_points_required, | 175 output_surface_->capabilities().delegated_sync_points_required, |
| 169 settings_.use_gpu_memory_buffer_resources, | 176 settings_.use_gpu_memory_buffer_resources, |
| 170 settings_.buffer_to_texture_target_map)); | 177 settings_.buffer_to_texture_target_map)); |
| 171 | 178 |
| 172 if (output_surface_->context_provider()) { | 179 if (output_surface_->context_provider()) { |
| 173 DCHECK(texture_mailbox_deleter_); | 180 DCHECK(texture_mailbox_deleter_); |
| 174 renderer_ = base::MakeUnique<GLRenderer>( | 181 renderer_ = base::MakeUnique<GLRenderer>( |
| 175 this, &settings_, output_surface_.get(), resource_provider_.get(), | 182 &settings_, output_surface_.get(), resource_provider_.get(), |
| 176 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); | 183 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); |
| 177 } else if (output_surface_->vulkan_context_provider()) { | 184 } else if (output_surface_->vulkan_context_provider()) { |
| 178 #if defined(ENABLE_VULKAN) | 185 #if defined(ENABLE_VULKAN) |
| 179 DCHECK(texture_mailbox_deleter_); | 186 DCHECK(texture_mailbox_deleter_); |
| 180 renderer_ = base::MakeUnique<VulkanRenderer>( | 187 renderer_ = base::MakeUnique<VulkanRenderer>( |
| 181 this, &settings_, output_surface_.get(), resource_provider_.get(), | 188 &settings_, output_surface_.get(), resource_provider_.get(), |
| 182 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); | 189 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); |
| 183 #else | 190 #else |
| 184 NOTREACHED(); | 191 NOTREACHED(); |
| 185 #endif | 192 #endif |
| 186 } else { | 193 } else { |
| 187 auto renderer = base::MakeUnique<SoftwareRenderer>( | 194 auto renderer = base::MakeUnique<SoftwareRenderer>( |
| 188 this, &settings_, output_surface_.get(), resource_provider_.get()); | 195 &settings_, output_surface_.get(), resource_provider_.get()); |
| 189 software_renderer_ = renderer.get(); | 196 software_renderer_ = renderer.get(); |
| 190 renderer_ = std::move(renderer); | 197 renderer_ = std::move(renderer); |
| 191 } | 198 } |
| 192 | 199 |
| 193 renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_); | 200 renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_); |
| 194 renderer_->SetVisible(visible_); | 201 renderer_->SetVisible(visible_); |
| 195 | 202 |
| 196 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using | 203 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using |
| 197 // overlays. | 204 // overlays. |
| 198 bool output_partial_list = renderer_->Capabilities().using_partial_swap && | 205 bool output_partial_list = renderer_->Capabilities().using_partial_swap && |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 void Display::SetExternalTilePriorityConstraints( | 398 void Display::SetExternalTilePriorityConstraints( |
| 392 const gfx::Rect& viewport_rect, | 399 const gfx::Rect& viewport_rect, |
| 393 const gfx::Transform& transform) { | 400 const gfx::Transform& transform) { |
| 394 NOTREACHED(); | 401 NOTREACHED(); |
| 395 } | 402 } |
| 396 | 403 |
| 397 void Display::SetTreeActivationCallback(const base::Closure& callback) { | 404 void Display::SetTreeActivationCallback(const base::Closure& callback) { |
| 398 NOTREACHED(); | 405 NOTREACHED(); |
| 399 } | 406 } |
| 400 | 407 |
| 401 void Display::SetFullRootLayerDamage() { | |
| 402 if (aggregator_ && !current_surface_id_.is_null()) | |
| 403 aggregator_->SetFullDamageForSurface(current_surface_id_); | |
| 404 } | |
| 405 | |
| 406 void Display::OnSurfaceDamaged(const SurfaceId& surface_id, bool* changed) { | 408 void Display::OnSurfaceDamaged(const SurfaceId& surface_id, bool* changed) { |
| 407 if (aggregator_ && | 409 if (aggregator_ && |
| 408 aggregator_->previous_contained_surfaces().count(surface_id)) { | 410 aggregator_->previous_contained_surfaces().count(surface_id)) { |
| 409 Surface* surface = surface_manager_->GetSurfaceForId(surface_id); | 411 Surface* surface = surface_manager_->GetSurfaceForId(surface_id); |
| 410 if (surface) { | 412 if (surface) { |
| 411 const CompositorFrame& current_frame = surface->GetEligibleFrame(); | 413 const CompositorFrame& current_frame = surface->GetEligibleFrame(); |
| 412 if (!current_frame.delegated_frame_data || | 414 if (!current_frame.delegated_frame_data || |
| 413 current_frame.delegated_frame_data->resource_list.empty()) { | 415 current_frame.delegated_frame_data->resource_list.empty()) { |
| 414 aggregator_->ReleaseResources(surface_id); | 416 aggregator_->ReleaseResources(surface_id); |
| 415 } | 417 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 430 const SurfaceId& Display::CurrentSurfaceId() { | 432 const SurfaceId& Display::CurrentSurfaceId() { |
| 431 return current_surface_id_; | 433 return current_surface_id_; |
| 432 } | 434 } |
| 433 | 435 |
| 434 void Display::ForceImmediateDrawAndSwapIfPossible() { | 436 void Display::ForceImmediateDrawAndSwapIfPossible() { |
| 435 if (scheduler_) | 437 if (scheduler_) |
| 436 scheduler_->ForceImmediateSwapIfPossible(); | 438 scheduler_->ForceImmediateSwapIfPossible(); |
| 437 } | 439 } |
| 438 | 440 |
| 439 } // namespace cc | 441 } // namespace cc |
| OLD | NEW |