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 |