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

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

Issue 720333005: Add DisplayScheduler to enable BeginFrame-based scheduling of surfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "cc/debug/benchmark_instrumentation.h" 9 #include "cc/debug/benchmark_instrumentation.h"
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
11 #include "cc/output/compositor_frame_ack.h" 11 #include "cc/output/compositor_frame_ack.h"
12 #include "cc/output/direct_renderer.h" 12 #include "cc/output/direct_renderer.h"
13 #include "cc/output/gl_renderer.h" 13 #include "cc/output/gl_renderer.h"
14 #include "cc/output/software_renderer.h" 14 #include "cc/output/software_renderer.h"
15 #include "cc/resources/texture_mailbox_deleter.h" 15 #include "cc/resources/texture_mailbox_deleter.h"
16 #include "cc/surfaces/display_client.h" 16 #include "cc/surfaces/display_client.h"
17 #include "cc/surfaces/display_scheduler.h"
17 #include "cc/surfaces/surface.h" 18 #include "cc/surfaces/surface.h"
18 #include "cc/surfaces/surface_aggregator.h" 19 #include "cc/surfaces/surface_aggregator.h"
19 #include "cc/surfaces/surface_manager.h" 20 #include "cc/surfaces/surface_manager.h"
20 #include "cc/trees/blocking_task_runner.h" 21 #include "cc/trees/blocking_task_runner.h"
21 22
22 namespace cc { 23 namespace cc {
23 24
24 Display::Display(DisplayClient* client, 25 Display::Display(DisplayClient* client,
25 SurfaceManager* manager, 26 SurfaceManager* manager,
26 SharedBitmapManager* bitmap_manager, 27 SharedBitmapManager* bitmap_manager,
27 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager) 28 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager)
28 : client_(client), 29 : client_(client),
29 manager_(manager), 30 manager_(manager),
30 bitmap_manager_(bitmap_manager), 31 bitmap_manager_(bitmap_manager),
31 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 32 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
32 device_scale_factor_(1.f), 33 device_scale_factor_(1.f),
33 blocking_main_thread_task_runner_( 34 blocking_main_thread_task_runner_(
34 BlockingTaskRunner::Create(base::MessageLoopProxy::current())), 35 BlockingTaskRunner::Create(base::MessageLoopProxy::current())),
35 texture_mailbox_deleter_( 36 texture_mailbox_deleter_(
36 new TextureMailboxDeleter(base::MessageLoopProxy::current())) { 37 new TextureMailboxDeleter(base::MessageLoopProxy::current())) {
37 manager_->AddObserver(this); 38 manager_->AddObserver(this);
38 } 39 }
39 40
40 Display::~Display() { 41 Display::~Display() {
41 manager_->RemoveObserver(this); 42 manager_->RemoveObserver(this);
42 } 43 }
43 44
44 bool Display::Initialize(scoped_ptr<OutputSurface> output_surface) { 45 bool Display::Initialize(scoped_ptr<OutputSurface> output_surface,
46 DisplayScheduler* scheduler) {
45 output_surface_ = output_surface.Pass(); 47 output_surface_ = output_surface.Pass();
48 scheduler_ = scheduler;
46 return output_surface_->BindToClient(this); 49 return output_surface_->BindToClient(this);
47 } 50 }
48 51
49 void Display::Resize(SurfaceId id, 52 void Display::Resize(SurfaceId id,
50 const gfx::Size& size, 53 const gfx::Size& size,
51 float device_scale_factor) { 54 float device_scale_factor) {
52 current_surface_id_ = id; 55 current_surface_id_ = id;
53 current_surface_size_ = size; 56 current_surface_size_ = size;
54 device_scale_factor_ = device_scale_factor; 57 device_scale_factor_ = device_scale_factor;
55 client_->DisplayDamaged(); 58 scheduler_->DisplayDamaged();
56 } 59 }
57 60
58 void Display::InitializeRenderer() { 61 void Display::InitializeRenderer() {
59 if (resource_provider_) 62 if (resource_provider_)
60 return; 63 return;
61 64
62 int highp_threshold_min = 0; 65 int highp_threshold_min = 0;
63 bool use_rgba_4444_texture_format = false; 66 bool use_rgba_4444_texture_format = false;
64 size_t id_allocation_chunk_size = 1; 67 size_t id_allocation_chunk_size = 1;
65 scoped_ptr<ResourceProvider> resource_provider = 68 scoped_ptr<ResourceProvider> resource_provider =
(...skipping 25 matching lines...) Expand all
91 return; 94 return;
92 renderer_ = renderer.Pass(); 95 renderer_ = renderer.Pass();
93 } 96 }
94 97
95 resource_provider_ = resource_provider.Pass(); 98 resource_provider_ = resource_provider.Pass();
96 aggregator_.reset(new SurfaceAggregator(manager_, resource_provider_.get())); 99 aggregator_.reset(new SurfaceAggregator(manager_, resource_provider_.get()));
97 } 100 }
98 101
99 void Display::DidLoseOutputSurface() { 102 void Display::DidLoseOutputSurface() {
100 client_->OutputSurfaceLost(); 103 client_->OutputSurfaceLost();
104 scheduler_->OutputSurfaceLost();
101 } 105 }
102 106
103 bool Display::Draw() { 107 bool Display::Draw() {
104 if (current_surface_id_.is_null()) 108 if (current_surface_id_.is_null())
105 return false; 109 return false;
106 110
107 InitializeRenderer(); 111 InitializeRenderer();
108 if (!output_surface_) 112 if (!output_surface_)
109 return false; 113 return false;
110 114
(...skipping 24 matching lines...) Expand all
135 it != aggregator_->previous_contained_surfaces().end(); 139 it != aggregator_->previous_contained_surfaces().end();
136 ++it) { 140 ++it) {
137 Surface* surface = manager_->GetSurfaceForId(it->first); 141 Surface* surface = manager_->GetSurfaceForId(it->first);
138 if (surface) 142 if (surface)
139 surface->RunDrawCallbacks(); 143 surface->RunDrawCallbacks();
140 } 144 }
141 return true; 145 return true;
142 } 146 }
143 147
144 void Display::DidSwapBuffers() { 148 void Display::DidSwapBuffers() {
145 client_->DidSwapBuffers(); 149 scheduler_->DidSwapBuffers();
146 } 150 }
147 151
148 void Display::DidSwapBuffersComplete() { 152 void Display::DidSwapBuffersComplete() {
149 client_->DidSwapBuffersComplete(); 153 scheduler_->DidSwapBuffersComplete();
150 } 154 }
151 155
152 void Display::CommitVSyncParameters(base::TimeTicks timebase, 156 void Display::CommitVSyncParameters(base::TimeTicks timebase,
153 base::TimeDelta interval) { 157 base::TimeDelta interval) {
154 client_->CommitVSyncParameters(timebase, interval); 158 client_->CommitVSyncParameters(timebase, interval);
159 scheduler_->CommitVSyncParameters(timebase, interval);
155 } 160 }
156 161
157 void Display::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { 162 void Display::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
158 client_->SetMemoryPolicy(policy); 163 client_->SetMemoryPolicy(policy);
159 } 164 }
160 165
161 void Display::OnSurfaceDamaged(SurfaceId surface) { 166 void Display::OnSurfaceDamaged(SurfaceId surface) {
162 if (aggregator_ && aggregator_->previous_contained_surfaces().count(surface)) 167 if (aggregator_ && aggregator_->previous_contained_surfaces().count(surface))
163 client_->DisplayDamaged(); 168 scheduler_->DisplayDamaged();
164 } 169 }
165 170
166 SurfaceId Display::CurrentSurfaceId() { 171 SurfaceId Display::CurrentSurfaceId() {
167 return current_surface_id_; 172 return current_surface_id_;
168 } 173 }
169 174
170 int Display::GetMaxFramesPending() { 175 int Display::GetMaxFramesPending() {
171 if (!output_surface_) 176 if (!output_surface_)
172 return OutputSurface::DEFAULT_MAX_FRAMES_PENDING; 177 return OutputSurface::DEFAULT_MAX_FRAMES_PENDING;
173 return output_surface_->capabilities().max_frames_pending; 178 return output_surface_->capabilities().max_frames_pending;
174 } 179 }
175 180
176 } // namespace cc 181 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698