Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: cc/surfaces/display.cc

Issue 2096843002: mus+ash: Enable Chrome HW rendering in mus+ash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698