| 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/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
| 10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 manager_->RemoveObserver(this); | 47 manager_->RemoveObserver(this); |
| 48 if (aggregator_) { | 48 if (aggregator_) { |
| 49 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { | 49 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { |
| 50 Surface* surface = manager_->GetSurfaceForId(id_entry.first); | 50 Surface* surface = manager_->GetSurfaceForId(id_entry.first); |
| 51 if (surface) | 51 if (surface) |
| 52 surface->RunDrawCallbacks(SurfaceDrawStatus::DRAW_SKIPPED); | 52 surface->RunDrawCallbacks(SurfaceDrawStatus::DRAW_SKIPPED); |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 | 56 |
| 57 bool Display::Initialize(scoped_ptr<OutputSurface> output_surface, | 57 bool Display::Initialize(std::unique_ptr<OutputSurface> output_surface, |
| 58 DisplayScheduler* scheduler) { | 58 DisplayScheduler* scheduler) { |
| 59 // TODO(enne): register/unregister BeginFrameSource with SurfaceManager here. | 59 // TODO(enne): register/unregister BeginFrameSource with SurfaceManager here. |
| 60 output_surface_ = std::move(output_surface); | 60 output_surface_ = std::move(output_surface); |
| 61 scheduler_ = scheduler; | 61 scheduler_ = scheduler; |
| 62 return output_surface_->BindToClient(this); | 62 return output_surface_->BindToClient(this); |
| 63 } | 63 } |
| 64 | 64 |
| 65 void Display::SetSurfaceId(SurfaceId id, float device_scale_factor) { | 65 void Display::SetSurfaceId(SurfaceId id, float device_scale_factor) { |
| 66 if (current_surface_id_ == id && device_scale_factor_ == device_scale_factor) | 66 if (current_surface_id_ == id && device_scale_factor_ == device_scale_factor) |
| 67 return; | 67 return; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 98 } | 98 } |
| 99 | 99 |
| 100 void Display::SetExternalClip(const gfx::Rect& clip) { | 100 void Display::SetExternalClip(const gfx::Rect& clip) { |
| 101 external_clip_ = clip; | 101 external_clip_ = clip; |
| 102 } | 102 } |
| 103 | 103 |
| 104 void Display::InitializeRenderer() { | 104 void Display::InitializeRenderer() { |
| 105 if (resource_provider_) | 105 if (resource_provider_) |
| 106 return; | 106 return; |
| 107 | 107 |
| 108 scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create( | 108 std::unique_ptr<ResourceProvider> resource_provider = |
| 109 output_surface_.get(), bitmap_manager_, gpu_memory_buffer_manager_, | 109 ResourceProvider::Create( |
| 110 nullptr, settings_.highp_threshold_min, | 110 output_surface_.get(), bitmap_manager_, gpu_memory_buffer_manager_, |
| 111 settings_.texture_id_allocation_chunk_size, | 111 nullptr, settings_.highp_threshold_min, |
| 112 settings_.use_gpu_memory_buffer_resources, | 112 settings_.texture_id_allocation_chunk_size, |
| 113 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, | 113 settings_.use_gpu_memory_buffer_resources, |
| 114 GL_TEXTURE_2D)); | 114 std::vector<unsigned>( |
| 115 static_cast<size_t>(gfx::BufferFormat::LAST) + 1, GL_TEXTURE_2D)); |
| 115 if (!resource_provider) | 116 if (!resource_provider) |
| 116 return; | 117 return; |
| 117 | 118 |
| 118 if (output_surface_->context_provider()) { | 119 if (output_surface_->context_provider()) { |
| 119 scoped_ptr<GLRenderer> renderer = GLRenderer::Create( | 120 std::unique_ptr<GLRenderer> renderer = GLRenderer::Create( |
| 120 this, &settings_, output_surface_.get(), resource_provider.get(), | 121 this, &settings_, output_surface_.get(), resource_provider.get(), |
| 121 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); | 122 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); |
| 122 if (!renderer) | 123 if (!renderer) |
| 123 return; | 124 return; |
| 124 renderer_ = std::move(renderer); | 125 renderer_ = std::move(renderer); |
| 125 } else { | 126 } else { |
| 126 scoped_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create( | 127 std::unique_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create( |
| 127 this, &settings_, output_surface_.get(), resource_provider.get()); | 128 this, &settings_, output_surface_.get(), resource_provider.get()); |
| 128 if (!renderer) | 129 if (!renderer) |
| 129 return; | 130 return; |
| 130 renderer_ = std::move(renderer); | 131 renderer_ = std::move(renderer); |
| 131 } | 132 } |
| 132 | 133 |
| 133 resource_provider_ = std::move(resource_provider); | 134 resource_provider_ = std::move(resource_provider); |
| 134 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using | 135 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using |
| 135 // overlays. | 136 // overlays. |
| 136 bool output_partial_list = renderer_->Capabilities().using_partial_swap && | 137 bool output_partial_list = renderer_->Capabilities().using_partial_swap && |
| (...skipping 24 matching lines...) Expand all Loading... |
| 161 TRACE_EVENT_INSTANT0("cc", "No root surface.", TRACE_EVENT_SCOPE_THREAD); | 162 TRACE_EVENT_INSTANT0("cc", "No root surface.", TRACE_EVENT_SCOPE_THREAD); |
| 162 return false; | 163 return false; |
| 163 } | 164 } |
| 164 | 165 |
| 165 InitializeRenderer(); | 166 InitializeRenderer(); |
| 166 if (!output_surface_) { | 167 if (!output_surface_) { |
| 167 TRACE_EVENT_INSTANT0("cc", "No output surface", TRACE_EVENT_SCOPE_THREAD); | 168 TRACE_EVENT_INSTANT0("cc", "No output surface", TRACE_EVENT_SCOPE_THREAD); |
| 168 return false; | 169 return false; |
| 169 } | 170 } |
| 170 | 171 |
| 171 scoped_ptr<CompositorFrame> frame = | 172 std::unique_ptr<CompositorFrame> frame = |
| 172 aggregator_->Aggregate(current_surface_id_); | 173 aggregator_->Aggregate(current_surface_id_); |
| 173 if (!frame) { | 174 if (!frame) { |
| 174 TRACE_EVENT_INSTANT0("cc", "Empty aggregated frame.", | 175 TRACE_EVENT_INSTANT0("cc", "Empty aggregated frame.", |
| 175 TRACE_EVENT_SCOPE_THREAD); | 176 TRACE_EVENT_SCOPE_THREAD); |
| 176 return false; | 177 return false; |
| 177 } | 178 } |
| 178 | 179 |
| 179 // Run callbacks early to allow pipelining. | 180 // Run callbacks early to allow pipelining. |
| 180 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { | 181 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { |
| 181 Surface* surface = manager_->GetSurfaceForId(id_entry.first); | 182 Surface* surface = manager_->GetSurfaceForId(id_entry.first); |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 | 340 |
| 340 if (surface_id == current_surface_id_) | 341 if (surface_id == current_surface_id_) |
| 341 UpdateRootSurfaceResourcesLocked(); | 342 UpdateRootSurfaceResourcesLocked(); |
| 342 } | 343 } |
| 343 | 344 |
| 344 SurfaceId Display::CurrentSurfaceId() { | 345 SurfaceId Display::CurrentSurfaceId() { |
| 345 return current_surface_id_; | 346 return current_surface_id_; |
| 346 } | 347 } |
| 347 | 348 |
| 348 } // namespace cc | 349 } // namespace cc |
| OLD | NEW |