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 |