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" |
11 #include "base/trace_event/trace_event.h" | 11 #include "base/trace_event/trace_event.h" |
12 #include "cc/debug/benchmark_instrumentation.h" | 12 #include "cc/debug/benchmark_instrumentation.h" |
13 #include "cc/output/compositor_frame.h" | 13 #include "cc/output/compositor_frame.h" |
14 #include "cc/output/compositor_frame_ack.h" | 14 #include "cc/output/compositor_frame_ack.h" |
15 #include "cc/output/delegating_renderer.h" | |
15 #include "cc/output/direct_renderer.h" | 16 #include "cc/output/direct_renderer.h" |
16 #include "cc/output/gl_renderer.h" | 17 #include "cc/output/gl_renderer.h" |
17 #include "cc/output/renderer_settings.h" | 18 #include "cc/output/renderer_settings.h" |
18 #include "cc/output/software_renderer.h" | 19 #include "cc/output/software_renderer.h" |
19 #include "cc/output/texture_mailbox_deleter.h" | 20 #include "cc/output/texture_mailbox_deleter.h" |
20 #include "cc/scheduler/begin_frame_source.h" | 21 #include "cc/scheduler/begin_frame_source.h" |
21 #include "cc/surfaces/display_client.h" | 22 #include "cc/surfaces/display_client.h" |
22 #include "cc/surfaces/display_scheduler.h" | 23 #include "cc/surfaces/display_scheduler.h" |
23 #include "cc/surfaces/surface.h" | 24 #include "cc/surfaces/surface.h" |
24 #include "cc/surfaces/surface_aggregator.h" | 25 #include "cc/surfaces/surface_aggregator.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
151 | 152 |
152 std::unique_ptr<ResourceProvider> resource_provider(new ResourceProvider( | 153 std::unique_ptr<ResourceProvider> resource_provider(new ResourceProvider( |
153 output_surface_->context_provider(), bitmap_manager_, | 154 output_surface_->context_provider(), bitmap_manager_, |
154 gpu_memory_buffer_manager_, nullptr, settings_.highp_threshold_min, | 155 gpu_memory_buffer_manager_, nullptr, settings_.highp_threshold_min, |
155 settings_.texture_id_allocation_chunk_size, | 156 settings_.texture_id_allocation_chunk_size, |
156 output_surface_->capabilities().delegated_sync_points_required, | 157 output_surface_->capabilities().delegated_sync_points_required, |
157 settings_.use_gpu_memory_buffer_resources, | 158 settings_.use_gpu_memory_buffer_resources, |
158 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, | 159 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, |
159 GL_TEXTURE_2D))); | 160 GL_TEXTURE_2D))); |
160 | 161 |
161 if (output_surface_->context_provider()) { | 162 if (output_surface_->context_provider() && |
163 !output_surface_->capabilities().delegated_rendering) { | |
162 std::unique_ptr<GLRenderer> renderer = GLRenderer::Create( | 164 std::unique_ptr<GLRenderer> renderer = GLRenderer::Create( |
163 this, &settings_, output_surface_.get(), resource_provider.get(), | 165 this, &settings_, output_surface_.get(), resource_provider.get(), |
164 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); | 166 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); |
165 if (!renderer) | 167 if (!renderer) |
166 return; | 168 return; |
167 renderer_ = std::move(renderer); | 169 renderer_ = std::move(renderer); |
170 } else if (output_surface_->context_provider() && | |
171 output_surface_->capabilities().delegated_rendering) { | |
172 std::unique_ptr<DelegatingRenderer> renderer = DelegatingRenderer::Create( | |
danakj
2016/06/27 18:48:39
I don't understand this, and am trying to do the o
danakj
2016/06/27 18:57:28
re: offline explanation.
I don't think there shou
| |
173 this, &settings_, output_surface_.get(), resource_provider.get()); | |
174 if (!renderer) | |
175 return; | |
176 renderer_ = std::move(renderer); | |
177 | |
168 } else if (output_surface_->vulkan_context_provider()) { | 178 } else if (output_surface_->vulkan_context_provider()) { |
169 #if defined(ENABLE_VULKAN) | 179 #if defined(ENABLE_VULKAN) |
170 std::unique_ptr<VulkanRenderer> renderer = VulkanRenderer::Create( | 180 std::unique_ptr<VulkanRenderer> renderer = VulkanRenderer::Create( |
171 this, &settings_, output_surface_.get(), resource_provider.get(), | 181 this, &settings_, output_surface_.get(), resource_provider.get(), |
172 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); | 182 texture_mailbox_deleter_.get(), settings_.highp_threshold_min); |
173 if (!renderer) | 183 if (!renderer) |
174 return; | 184 return; |
175 renderer_ = std::move(renderer); | 185 renderer_ = std::move(renderer); |
176 #else | 186 #else |
177 NOTREACHED(); | 187 NOTREACHED(); |
178 #endif | 188 #endif |
179 } else { | 189 } else { |
180 std::unique_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create( | 190 std::unique_ptr<SoftwareRenderer> renderer = SoftwareRenderer::Create( |
181 this, &settings_, output_surface_.get(), resource_provider.get(), | 191 this, &settings_, output_surface_.get(), resource_provider.get(), |
182 true /* use_image_hijack_canvas */); | 192 true /* use_image_hijack_canvas */); |
183 if (!renderer) | 193 if (!renderer) |
184 return; | 194 return; |
185 renderer_ = std::move(renderer); | 195 renderer_ = std::move(renderer); |
186 } | 196 } |
197 resource_provider_ = std::move(resource_provider); | |
187 | 198 |
188 renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_); | 199 bool output_partial_list = false; |
189 | 200 if (renderer_) { |
190 resource_provider_ = std::move(resource_provider); | 201 if (!output_surface_->capabilities().delegated_rendering) { |
191 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using | 202 static_cast<DirectRenderer*>(renderer_.get()) |
192 // overlays. | 203 ->SetEnlargePassTextureAmount(enlarge_texture_amount_); |
193 bool output_partial_list = renderer_->Capabilities().using_partial_swap && | 204 } |
194 !output_surface_->GetOverlayCandidateValidator(); | 205 // TODO(jbauman): Outputting an incomplete quad list doesn't work when using |
206 // overlays. | |
207 output_partial_list = renderer_->Capabilities().using_partial_swap && | |
208 !output_surface_->GetOverlayCandidateValidator(); | |
209 } | |
195 aggregator_.reset(new SurfaceAggregator( | 210 aggregator_.reset(new SurfaceAggregator( |
196 surface_manager_, resource_provider_.get(), output_partial_list)); | 211 surface_manager_, resource_provider_.get(), output_partial_list)); |
197 aggregator_->set_output_is_secure(output_is_secure_); | 212 aggregator_->set_output_is_secure(output_is_secure_); |
198 } | 213 } |
199 | 214 |
200 void Display::DidLoseOutputSurface() { | 215 void Display::DidLoseOutputSurface() { |
201 if (scheduler_) | 216 if (scheduler_) |
202 scheduler_->OutputSurfaceLost(); | 217 scheduler_->OutputSurfaceLost(); |
203 // WARNING: The client may delete the Display in this method call. Do not | 218 // WARNING: The client may delete the Display in this method call. Do not |
204 // make any additional references to members after this call. | 219 // make any additional references to members after this call. |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
323 } | 338 } |
324 | 339 |
325 void Display::DidSwapBuffers() { | 340 void Display::DidSwapBuffers() { |
326 if (scheduler_) | 341 if (scheduler_) |
327 scheduler_->DidSwapBuffers(); | 342 scheduler_->DidSwapBuffers(); |
328 } | 343 } |
329 | 344 |
330 void Display::DidSwapBuffersComplete() { | 345 void Display::DidSwapBuffersComplete() { |
331 if (scheduler_) | 346 if (scheduler_) |
332 scheduler_->DidSwapBuffersComplete(); | 347 scheduler_->DidSwapBuffersComplete(); |
333 if (renderer_) | 348 if (renderer_ && !output_surface_->capabilities().delegated_rendering) |
334 renderer_->SwapBuffersComplete(); | 349 static_cast<DirectRenderer*>(renderer_.get())->SwapBuffersComplete(); |
335 } | 350 } |
336 | 351 |
337 void Display::CommitVSyncParameters(base::TimeTicks timebase, | 352 void Display::CommitVSyncParameters(base::TimeTicks timebase, |
338 base::TimeDelta interval) { | 353 base::TimeDelta interval) { |
339 // Display uses a BeginFrameSource instead. | 354 // Display uses a BeginFrameSource instead. |
340 NOTREACHED(); | 355 NOTREACHED(); |
341 } | 356 } |
342 | 357 |
343 void Display::DidReceiveTextureInUseResponses( | 358 void Display::DidReceiveTextureInUseResponses( |
344 const gpu::TextureInUseResponses& responses) { | 359 const gpu::TextureInUseResponses& responses) { |
345 if (renderer_) | 360 if (renderer_ && !output_surface_->capabilities().delegated_rendering) { |
346 renderer_->DidReceiveTextureInUseResponses(responses); | 361 static_cast<DirectRenderer*>(renderer_.get()) |
362 ->DidReceiveTextureInUseResponses(responses); | |
363 } | |
347 } | 364 } |
348 | 365 |
349 void Display::SetBeginFrameSource(BeginFrameSource* source) { | 366 void Display::SetBeginFrameSource(BeginFrameSource* source) { |
350 // The BeginFrameSource is set from the constructor, it doesn't come | 367 // The BeginFrameSource is set from the constructor, it doesn't come |
351 // from the OutputSurface for the Display. | 368 // from the OutputSurface for the Display. |
352 NOTREACHED(); | 369 NOTREACHED(); |
353 } | 370 } |
354 | 371 |
355 void Display::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 372 void Display::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
356 client_->DisplaySetMemoryPolicy(policy); | 373 client_->DisplaySetMemoryPolicy(policy); |
357 } | 374 } |
358 | 375 |
359 void Display::OnDraw(const gfx::Transform& transform, | 376 void Display::OnDraw(const gfx::Transform& transform, |
360 const gfx::Rect& viewport, | 377 const gfx::Rect& viewport, |
361 const gfx::Rect& clip, | 378 const gfx::Rect& clip, |
362 bool resourceless_software_draw) { | 379 bool resourceless_software_draw) { |
363 NOTREACHED(); | 380 NOTREACHED(); |
364 } | 381 } |
365 | 382 |
366 void Display::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { | 383 void Display::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { |
367 aggregator_->SetFullDamageForSurface(current_surface_id_); | 384 aggregator_->SetFullDamageForSurface(current_surface_id_); |
368 if (scheduler_) | 385 if (scheduler_) |
369 scheduler_->SurfaceDamaged(current_surface_id_); | 386 scheduler_->SurfaceDamaged(current_surface_id_); |
370 } | 387 } |
371 | 388 |
372 void Display::ReclaimResources(const CompositorFrameAck* ack) { | 389 void Display::ReclaimResources(const CompositorFrameAck* ack) { |
373 NOTREACHED(); | 390 DCHECK(output_surface_->capabilities().delegated_rendering); |
391 if (renderer_) | |
392 renderer_->ReceiveSwapBuffersAck(*ack); | |
374 } | 393 } |
375 | 394 |
376 void Display::SetExternalTilePriorityConstraints( | 395 void Display::SetExternalTilePriorityConstraints( |
377 const gfx::Rect& viewport_rect, | 396 const gfx::Rect& viewport_rect, |
378 const gfx::Transform& transform) { | 397 const gfx::Transform& transform) { |
379 NOTREACHED(); | 398 NOTREACHED(); |
380 } | 399 } |
381 | 400 |
382 void Display::SetTreeActivationCallback(const base::Closure& callback) { | 401 void Display::SetTreeActivationCallback(const base::Closure& callback) { |
383 NOTREACHED(); | 402 NOTREACHED(); |
(...skipping 26 matching lines...) Expand all Loading... | |
410 | 429 |
411 if (surface_id == current_surface_id_) | 430 if (surface_id == current_surface_id_) |
412 UpdateRootSurfaceResourcesLocked(); | 431 UpdateRootSurfaceResourcesLocked(); |
413 } | 432 } |
414 | 433 |
415 SurfaceId Display::CurrentSurfaceId() { | 434 SurfaceId Display::CurrentSurfaceId() { |
416 return current_surface_id_; | 435 return current_surface_id_; |
417 } | 436 } |
418 | 437 |
419 } // namespace cc | 438 } // namespace cc |
OLD | NEW |