Chromium Code Reviews| 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 |