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

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

Issue 2029323004: Get rid of virtual Display::CreateScheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@onscreendisplayclient
Patch Set: displaytest: androids Created 4 years, 6 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
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 29 matching lines...) Expand all
40 } // namespace 40 } // namespace
41 41
42 namespace cc { 42 namespace cc {
43 43
44 Display::Display(SurfaceManager* manager, 44 Display::Display(SurfaceManager* manager,
45 SharedBitmapManager* bitmap_manager, 45 SharedBitmapManager* bitmap_manager,
46 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 46 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
47 const RendererSettings& settings, 47 const RendererSettings& settings,
48 uint32_t compositor_surface_namespace, 48 uint32_t compositor_surface_namespace,
49 base::SingleThreadTaskRunner* task_runner, 49 base::SingleThreadTaskRunner* task_runner,
50 BeginFrameSource* begin_frame_source,
50 std::unique_ptr<OutputSurface> output_surface) 51 std::unique_ptr<OutputSurface> output_surface)
51 : surface_manager_(manager), 52 : surface_manager_(manager),
52 bitmap_manager_(bitmap_manager), 53 bitmap_manager_(bitmap_manager),
53 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 54 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
54 settings_(settings), 55 settings_(settings),
55 compositor_surface_namespace_(compositor_surface_namespace), 56 compositor_surface_namespace_(compositor_surface_namespace),
56 task_runner_(task_runner),
57 output_surface_(std::move(output_surface)), 57 output_surface_(std::move(output_surface)),
58 texture_mailbox_deleter_(task_runner) { 58 texture_mailbox_deleter_(task_runner) {
59 surface_manager_->AddObserver(this); 59 surface_manager_->AddObserver(this);
60
61 if (begin_frame_source) {
enne (OOO) 2016/06/02 18:15:20 I'm not sure I understand this logic. Should this
danakj 2016/06/02 18:27:21 Oh, this replaces the InitializeSynchronous(), see
enne (OOO) 2016/06/02 18:58:09 Ohhhh ok ok, then can you remove the DCHECKs about
danakj 2016/06/03 01:28:35 Soo... why remove 2 DCHECKs when we can change who
62 if (!task_runner) {
63 // WebView doesn't have a task runner or a real begin frame source,
64 // so just create something fake here.
65 DCHECK(!begin_frame_source);
66 internal_begin_frame_source_.reset(new EmptyBeginFrameSource());
67 vsync_begin_frame_source_ = internal_begin_frame_source_.get();
68 observed_begin_frame_source_ = vsync_begin_frame_source_;
69 } else {
70 DCHECK(begin_frame_source);
71 vsync_begin_frame_source_ = begin_frame_source;
72 observed_begin_frame_source_ = vsync_begin_frame_source_;
73 if (settings_.disable_display_vsync) {
74 internal_begin_frame_source_.reset(
75 new BackToBackBeginFrameSource(task_runner));
76 observed_begin_frame_source_ = internal_begin_frame_source_.get();
77 }
78 }
79
80 scheduler_.reset(new DisplayScheduler(
81 this, observed_begin_frame_source_, task_runner,
82 output_surface_->capabilities().max_frames_pending));
83 surface_manager_->RegisterBeginFrameSource(observed_begin_frame_source_,
84 compositor_surface_namespace_);
85 }
86 }
87
88 Display::Display(SurfaceManager* manager,
89 SharedBitmapManager* bitmap_manager,
90 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
91 const RendererSettings& settings,
92 uint32_t compositor_surface_namespace,
93 base::SingleThreadTaskRunner* task_runner,
94 BeginFrameSource* begin_frame_source,
95 std::unique_ptr<OutputSurface> output_surface,
96 std::unique_ptr<DisplayScheduler> display_scheduler_for_tests)
97 : Display(manager,
98 bitmap_manager,
99 gpu_memory_buffer_manager,
100 settings,
101 compositor_surface_namespace,
102 task_runner,
103 begin_frame_source,
104 std::move(output_surface)) {
105 DCHECK_EQ(!!begin_frame_source, !!display_scheduler_for_tests);
106 scheduler_ = std::move(display_scheduler_for_tests);
60 } 107 }
61 108
62 Display::~Display() { 109 Display::~Display() {
63 if (observed_begin_frame_source_) 110 if (observed_begin_frame_source_)
64 surface_manager_->UnregisterBeginFrameSource(observed_begin_frame_source_); 111 surface_manager_->UnregisterBeginFrameSource(observed_begin_frame_source_);
65 surface_manager_->RemoveObserver(this); 112 surface_manager_->RemoveObserver(this);
66 if (aggregator_) { 113 if (aggregator_) {
67 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { 114 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) {
68 Surface* surface = surface_manager_->GetSurfaceForId(id_entry.first); 115 Surface* surface = surface_manager_->GetSurfaceForId(id_entry.first);
69 if (surface) 116 if (surface)
70 surface->RunDrawCallbacks(SurfaceDrawStatus::DRAW_SKIPPED); 117 surface->RunDrawCallbacks(SurfaceDrawStatus::DRAW_SKIPPED);
71 } 118 }
72 } 119 }
73 } 120 }
74 121
75 void Display::CreateScheduler() {
76 DCHECK(!scheduler_);
77 if (!task_runner_) {
78 // WebView doesn't have a task runner or a real begin frame source,
79 // so just create something fake here.
80 internal_begin_frame_source_.reset(new EmptyBeginFrameSource());
81 vsync_begin_frame_source_ = internal_begin_frame_source_.get();
82 observed_begin_frame_source_ = vsync_begin_frame_source_;
83 } else {
84 DCHECK(vsync_begin_frame_source_);
85
86 observed_begin_frame_source_ = vsync_begin_frame_source_;
87 if (settings_.disable_display_vsync) {
88 internal_begin_frame_source_.reset(
89 new BackToBackBeginFrameSource(task_runner_));
90 observed_begin_frame_source_ = internal_begin_frame_source_.get();
91 }
92 }
93
94 scheduler_.reset(
95 new DisplayScheduler(this, observed_begin_frame_source_, task_runner_,
96 output_surface_->capabilities().max_frames_pending));
97 surface_manager_->RegisterBeginFrameSource(observed_begin_frame_source_,
98 compositor_surface_namespace_);
99 }
100
101 bool Display::Initialize(DisplayClient* client) { 122 bool Display::Initialize(DisplayClient* client) {
102 client_ = client; 123 client_ = client;
103 if (!output_surface_->BindToClient(this)) 124 if (!output_surface_->BindToClient(this))
104 return false; 125 return false;
105 CreateScheduler();
106 return true; 126 return true;
107 } 127 }
108 128
109 bool Display::InitializeSynchronous(DisplayClient* client) {
110 client_ = client;
111 if (!output_surface_->BindToClient(this))
112 return false;
113 // No scheduler created here.
114 return true;
115 }
116
117 void Display::SetSurfaceId(SurfaceId id, float device_scale_factor) { 129 void Display::SetSurfaceId(SurfaceId id, float device_scale_factor) {
118 DCHECK_EQ(id.id_namespace(), compositor_surface_namespace_); 130 DCHECK_EQ(id.id_namespace(), compositor_surface_namespace_);
119 if (current_surface_id_ == id && device_scale_factor_ == device_scale_factor) 131 if (current_surface_id_ == id && device_scale_factor_ == device_scale_factor)
120 return; 132 return;
121 133
122 TRACE_EVENT0("cc", "Display::SetSurfaceId"); 134 TRACE_EVENT0("cc", "Display::SetSurfaceId");
123 current_surface_id_ = id; 135 current_surface_id_ = id;
124 device_scale_factor_ = device_scale_factor; 136 device_scale_factor_ = device_scale_factor;
125 137
126 UpdateRootSurfaceResourcesLocked(); 138 UpdateRootSurfaceResourcesLocked();
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 scheduler_->DidSwapBuffers(); 359 scheduler_->DidSwapBuffers();
348 } 360 }
349 361
350 void Display::DidSwapBuffersComplete() { 362 void Display::DidSwapBuffersComplete() {
351 if (scheduler_) 363 if (scheduler_)
352 scheduler_->DidSwapBuffersComplete(); 364 scheduler_->DidSwapBuffersComplete();
353 if (renderer_) 365 if (renderer_)
354 renderer_->SwapBuffersComplete(); 366 renderer_->SwapBuffersComplete();
355 } 367 }
356 368
369 void Display::CommitVSyncParameters(base::TimeTicks timebase,
370 base::TimeDelta interval) {
371 // Display uses a BeginFrameSource instead.
372 NOTREACHED();
373 }
374
357 void Display::SetBeginFrameSource(BeginFrameSource* source) { 375 void Display::SetBeginFrameSource(BeginFrameSource* source) {
358 // It's expected that there's only a single source from the 376 // The BeginFrameSource is set from the constructor, it doesn't come
359 // BrowserCompositorOutputSurface that corresponds to vsync. The BFS is 377 // from the OutputSurface for the Display.
360 // passed BrowserCompositorOutputSurface -> Display -> DisplayScheduler as an 378 NOTREACHED();
361 // input. DisplayScheduler makes a decision about which BFS to use and
362 // calls back to Display as DisplaySchedulerClient to register for that
363 // surface id.
364 DCHECK(!vsync_begin_frame_source_);
365 vsync_begin_frame_source_ = source;
366 } 379 }
367 380
368 void Display::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { 381 void Display::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
369 client_->DisplaySetMemoryPolicy(policy); 382 client_->DisplaySetMemoryPolicy(policy);
370 } 383 }
371 384
372 void Display::OnDraw(const gfx::Transform& transform, 385 void Display::OnDraw(const gfx::Transform& transform,
373 const gfx::Rect& viewport, 386 const gfx::Rect& viewport,
374 const gfx::Rect& clip, 387 const gfx::Rect& clip,
375 bool resourceless_software_draw) { 388 bool resourceless_software_draw) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 436
424 if (surface_id == current_surface_id_) 437 if (surface_id == current_surface_id_)
425 UpdateRootSurfaceResourcesLocked(); 438 UpdateRootSurfaceResourcesLocked();
426 } 439 }
427 440
428 SurfaceId Display::CurrentSurfaceId() { 441 SurfaceId Display::CurrentSurfaceId() {
429 return current_surface_id_; 442 return current_surface_id_;
430 } 443 }
431 444
432 } // namespace cc 445 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698