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

Side by Side Diff: ui/compositor/compositor.cc

Issue 1101823002: CC Animations: Make LayerAnimationController creation optional (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Plumb LayerSettings parameter for cc::Layer construction. Created 5 years, 7 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/compositor/compositor.h" 5 #include "ui/compositor/compositor.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()), 74 surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()),
75 task_runner_(task_runner), 75 task_runner_(task_runner),
76 vsync_manager_(new CompositorVSyncManager()), 76 vsync_manager_(new CompositorVSyncManager()),
77 device_scale_factor_(0.0f), 77 device_scale_factor_(0.0f),
78 last_started_frame_(0), 78 last_started_frame_(0),
79 last_ended_frame_(0), 79 last_ended_frame_(0),
80 locks_will_time_out_(true), 80 locks_will_time_out_(true),
81 compositor_lock_(NULL), 81 compositor_lock_(NULL),
82 layer_animator_collection_(this), 82 layer_animator_collection_(this),
83 weak_ptr_factory_(this) { 83 weak_ptr_factory_(this) {
84 root_web_layer_ = cc::Layer::Create();
85
86 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 84 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
87 85
88 cc::LayerTreeSettings settings; 86 cc::LayerTreeSettings settings;
87
88 cc::LayerSettings ui_layer_settings;
89 if (command_line->HasSwitch(
90 switches::kUIEnableCompositorAnimationTimelines)) {
91 settings.hud_layer_settings_.use_compositor_animation_timelines = true;
92 ui_layer_settings.use_compositor_animation_timelines = true;
93 }
94 Layer::SetUILayerSettings(ui_layer_settings);
95
96 root_web_layer_ = cc::Layer::Create(Layer::UILayerSettings());
97
89 // When impl-side painting is enabled, this will ensure PictureLayers always 98 // When impl-side painting is enabled, this will ensure PictureLayers always
90 // can have LCD text, to match the previous behaviour with ContentLayers, 99 // can have LCD text, to match the previous behaviour with ContentLayers,
91 // where LCD-not-allowed notifications were ignored. 100 // where LCD-not-allowed notifications were ignored.
92 settings.layers_always_allowed_lcd_text = true; 101 settings.layers_always_allowed_lcd_text = true;
93 settings.renderer_settings.refresh_rate = 102 settings.renderer_settings.refresh_rate =
94 context_factory_->DoesCreateTestContexts() ? kTestRefreshRate 103 context_factory_->DoesCreateTestContexts() ? kTestRefreshRate
95 : kDefaultRefreshRate; 104 : kDefaultRefreshRate;
96 settings.main_frame_before_activation_enabled = false; 105 settings.main_frame_before_activation_enabled = false;
97 settings.throttle_frame_production = 106 settings.throttle_frame_production =
98 !command_line->HasSwitch(switches::kDisableGpuVsync); 107 !command_line->HasSwitch(switches::kDisableGpuVsync);
(...skipping 29 matching lines...) Expand all
128 137
129 settings.impl_side_painting = IsUIImplSidePaintingEnabled(); 138 settings.impl_side_painting = IsUIImplSidePaintingEnabled();
130 settings.use_display_lists = IsUISlimmingPaintEnabled(); 139 settings.use_display_lists = IsUISlimmingPaintEnabled();
131 settings.use_zero_copy = IsUIZeroCopyEnabled(); 140 settings.use_zero_copy = IsUIZeroCopyEnabled();
132 settings.use_one_copy = IsUIOneCopyEnabled(); 141 settings.use_one_copy = IsUIOneCopyEnabled();
133 settings.use_image_texture_target = context_factory_->GetImageTextureTarget(); 142 settings.use_image_texture_target = context_factory_->GetImageTextureTarget();
134 // Note: gathering of pixel refs is only needed when using multiple 143 // Note: gathering of pixel refs is only needed when using multiple
135 // raster threads. 144 // raster threads.
136 settings.gather_pixel_refs = false; 145 settings.gather_pixel_refs = false;
137 146
138 settings.use_compositor_animation_timelines =
139 command_line->HasSwitch(switches::kUIEnableCompositorAnimationTimelines);
140
141 base::TimeTicks before_create = base::TimeTicks::Now(); 147 base::TimeTicks before_create = base::TimeTicks::Now();
142 host_ = cc::LayerTreeHost::CreateSingleThreaded( 148 host_ = cc::LayerTreeHost::CreateSingleThreaded(
143 this, this, context_factory_->GetSharedBitmapManager(), 149 this, this, context_factory_->GetSharedBitmapManager(),
144 context_factory_->GetGpuMemoryBufferManager(), 150 context_factory_->GetGpuMemoryBufferManager(),
145 context_factory_->GetTaskGraphRunner(), settings, task_runner_, nullptr); 151 context_factory_->GetTaskGraphRunner(), settings, task_runner_, nullptr);
146 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", 152 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor",
147 base::TimeTicks::Now() - before_create); 153 base::TimeTicks::Now() - before_create);
148 host_->SetRootLayer(root_web_layer_); 154 host_->SetRootLayer(root_web_layer_);
149 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace()); 155 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace());
150 host_->SetLayerTreeHostClientReady(); 156 host_->SetLayerTreeHostClientReady();
151 } 157 }
152 158
153 Compositor::~Compositor() { 159 Compositor::~Compositor() {
154 TRACE_EVENT0("shutdown", "Compositor::destructor"); 160 TRACE_EVENT0("shutdown", "Compositor::destructor");
155 161
156 CancelCompositorLock(); 162 CancelCompositorLock();
157 DCHECK(!compositor_lock_); 163 DCHECK(!compositor_lock_);
158 164
159 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, 165 FOR_EACH_OBSERVER(CompositorObserver, observer_list_,
160 OnCompositingShuttingDown(this)); 166 OnCompositingShuttingDown(this));
161 167
162 DCHECK(begin_frame_observer_list_.empty()); 168 DCHECK(begin_frame_observer_list_.empty());
163 169
164 if (root_layer_) 170 if (root_layer_)
165 root_layer_->SetCompositor(NULL); 171 root_layer_->ResetCompositor();
166 172
167 // Stop all outstanding draws before telling the ContextFactory to tear 173 // Stop all outstanding draws before telling the ContextFactory to tear
168 // down any contexts that the |host_| may rely upon. 174 // down any contexts that the |host_| may rely upon.
169 host_.reset(); 175 host_.reset();
170 176
171 context_factory_->RemoveCompositor(this); 177 context_factory_->RemoveCompositor(this);
172 } 178 }
173 179
174 void Compositor::SetOutputSurface( 180 void Compositor::SetOutputSurface(
175 scoped_ptr<cc::OutputSurface> output_surface) { 181 scoped_ptr<cc::OutputSurface> output_surface) {
176 host_->SetOutputSurface(output_surface.Pass()); 182 host_->SetOutputSurface(output_surface.Pass());
177 } 183 }
178 184
179 void Compositor::ScheduleDraw() { 185 void Compositor::ScheduleDraw() {
180 host_->SetNeedsCommit(); 186 host_->SetNeedsCommit();
181 } 187 }
182 188
183 void Compositor::SetRootLayer(Layer* root_layer) { 189 void Compositor::SetRootLayer(Layer* root_layer) {
184 if (root_layer_ == root_layer) 190 if (root_layer_ == root_layer)
185 return; 191 return;
186 if (root_layer_) 192 if (root_layer_)
187 root_layer_->SetCompositor(NULL); 193 root_layer_->ResetCompositor();
188 root_layer_ = root_layer; 194 root_layer_ = root_layer;
189 if (root_layer_ && !root_layer_->GetCompositor())
190 root_layer_->SetCompositor(this);
191 root_web_layer_->RemoveAllChildren(); 195 root_web_layer_->RemoveAllChildren();
192 if (root_layer_) 196 if (root_layer_)
193 root_web_layer_->AddChild(root_layer_->cc_layer()); 197 root_layer_->SetCompositor(this, root_web_layer_);
194 } 198 }
195 199
196 void Compositor::SetHostHasTransparentBackground( 200 void Compositor::SetHostHasTransparentBackground(
197 bool host_has_transparent_background) { 201 bool host_has_transparent_background) {
198 host_->set_has_transparent_background(host_has_transparent_background); 202 host_->set_has_transparent_background(host_has_transparent_background);
199 } 203 }
200 204
201 void Compositor::ScheduleFullRedraw() { 205 void Compositor::ScheduleFullRedraw() {
202 // TODO(enne): Some callers (mac) call this function expecting that it 206 // TODO(enne): Some callers (mac) call this function expecting that it
203 // will also commit. This should probably just redraw the screen 207 // will also commit. This should probably just redraw the screen
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 observer_list_, 428 observer_list_,
425 OnCompositingLockStateChanged(this)); 429 OnCompositingLockStateChanged(this));
426 } 430 }
427 431
428 void Compositor::CancelCompositorLock() { 432 void Compositor::CancelCompositorLock() {
429 if (compositor_lock_) 433 if (compositor_lock_)
430 compositor_lock_->CancelLock(); 434 compositor_lock_->CancelLock();
431 } 435 }
432 436
433 } // namespace ui 437 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698