OLD | NEW |
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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 | 131 |
132 settings.impl_side_painting = IsUIImplSidePaintingEnabled(); | 132 settings.impl_side_painting = IsUIImplSidePaintingEnabled(); |
133 settings.use_display_lists = IsUISlimmingPaintEnabled(); | 133 settings.use_display_lists = IsUISlimmingPaintEnabled(); |
134 settings.use_zero_copy = IsUIZeroCopyEnabled(); | 134 settings.use_zero_copy = IsUIZeroCopyEnabled(); |
135 settings.use_one_copy = IsUIOneCopyEnabled(); | 135 settings.use_one_copy = IsUIOneCopyEnabled(); |
136 settings.use_image_texture_target = context_factory_->GetImageTextureTarget(); | 136 settings.use_image_texture_target = context_factory_->GetImageTextureTarget(); |
137 // Note: gathering of pixel refs is only needed when using multiple | 137 // Note: gathering of pixel refs is only needed when using multiple |
138 // raster threads. | 138 // raster threads. |
139 settings.gather_pixel_refs = false; | 139 settings.gather_pixel_refs = false; |
140 | 140 |
141 settings.use_compositor_animation_timelines = | |
142 command_line->HasSwitch(switches::kUIEnableCompositorAnimationTimelines); | |
143 | |
144 base::TimeTicks before_create = base::TimeTicks::Now(); | 141 base::TimeTicks before_create = base::TimeTicks::Now(); |
145 host_ = cc::LayerTreeHost::CreateSingleThreaded( | 142 host_ = cc::LayerTreeHost::CreateSingleThreaded( |
146 this, this, context_factory_->GetSharedBitmapManager(), | 143 this, this, context_factory_->GetSharedBitmapManager(), |
147 context_factory_->GetGpuMemoryBufferManager(), | 144 context_factory_->GetGpuMemoryBufferManager(), |
148 context_factory_->GetTaskGraphRunner(), settings, task_runner_, nullptr); | 145 context_factory_->GetTaskGraphRunner(), settings, task_runner_, nullptr); |
149 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", | 146 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", |
150 base::TimeTicks::Now() - before_create); | 147 base::TimeTicks::Now() - before_create); |
151 | 148 |
152 if (settings.use_compositor_animation_timelines) { | 149 animation_timeline_ = |
153 animation_timeline_ = cc::AnimationTimeline::Create( | 150 cc::AnimationTimeline::Create(cc::AnimationIdProvider::NextTimelineId()); |
154 cc::AnimationIdProvider::NextTimelineId()); | 151 host_->animation_host()->AddAnimationTimeline(animation_timeline_.get()); |
155 host_->animation_host()->AddAnimationTimeline(animation_timeline_.get()); | 152 |
156 } | |
157 host_->SetRootLayer(root_web_layer_); | 153 host_->SetRootLayer(root_web_layer_); |
158 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace()); | 154 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace()); |
159 host_->SetLayerTreeHostClientReady(); | 155 host_->SetLayerTreeHostClientReady(); |
160 } | 156 } |
161 | 157 |
162 Compositor::~Compositor() { | 158 Compositor::~Compositor() { |
163 TRACE_EVENT0("shutdown", "Compositor::destructor"); | 159 TRACE_EVENT0("shutdown", "Compositor::destructor"); |
164 | 160 |
165 CancelCompositorLock(); | 161 CancelCompositorLock(); |
166 DCHECK(!compositor_lock_); | 162 DCHECK(!compositor_lock_); |
167 | 163 |
168 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, | 164 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, |
169 OnCompositingShuttingDown(this)); | 165 OnCompositingShuttingDown(this)); |
170 | 166 |
171 DCHECK(begin_frame_observer_list_.empty()); | 167 DCHECK(begin_frame_observer_list_.empty()); |
172 | 168 |
173 if (root_layer_) | 169 if (root_layer_) |
174 root_layer_->ResetCompositor(); | 170 root_layer_->ResetCompositor(); |
175 | 171 |
176 if (animation_timeline_) | 172 host_->animation_host()->RemoveAnimationTimeline(animation_timeline_.get()); |
177 host_->animation_host()->RemoveAnimationTimeline(animation_timeline_.get()); | |
178 | 173 |
179 // Stop all outstanding draws before telling the ContextFactory to tear | 174 // Stop all outstanding draws before telling the ContextFactory to tear |
180 // down any contexts that the |host_| may rely upon. | 175 // down any contexts that the |host_| may rely upon. |
181 host_.reset(); | 176 host_.reset(); |
182 | 177 |
183 context_factory_->RemoveCompositor(this); | 178 context_factory_->RemoveCompositor(this); |
184 } | 179 } |
185 | 180 |
186 void Compositor::SetOutputSurface( | 181 void Compositor::SetOutputSurface( |
187 scoped_ptr<cc::OutputSurface> output_surface) { | 182 scoped_ptr<cc::OutputSurface> output_surface) { |
(...skipping 11 matching lines...) Expand all Loading... |
199 root_layer_->ResetCompositor(); | 194 root_layer_->ResetCompositor(); |
200 root_layer_ = root_layer; | 195 root_layer_ = root_layer; |
201 if (root_layer_ && !root_layer_->GetCompositor()) | 196 if (root_layer_ && !root_layer_->GetCompositor()) |
202 root_layer_->SetCompositor(this); | 197 root_layer_->SetCompositor(this); |
203 root_web_layer_->RemoveAllChildren(); | 198 root_web_layer_->RemoveAllChildren(); |
204 if (root_layer_) | 199 if (root_layer_) |
205 root_layer_->SetCompositorRootCCLayer(root_web_layer_); | 200 root_layer_->SetCompositorRootCCLayer(root_web_layer_); |
206 } | 201 } |
207 | 202 |
208 cc::AnimationTimeline* Compositor::GetAnimationTimeline() const { | 203 cc::AnimationTimeline* Compositor::GetAnimationTimeline() const { |
209 DCHECK(animation_timeline_); | |
210 return animation_timeline_.get(); | 204 return animation_timeline_.get(); |
211 } | 205 } |
212 | 206 |
213 void Compositor::SetHostHasTransparentBackground( | 207 void Compositor::SetHostHasTransparentBackground( |
214 bool host_has_transparent_background) { | 208 bool host_has_transparent_background) { |
215 host_->set_has_transparent_background(host_has_transparent_background); | 209 host_->set_has_transparent_background(host_has_transparent_background); |
216 } | 210 } |
217 | 211 |
218 void Compositor::ScheduleFullRedraw() { | 212 void Compositor::ScheduleFullRedraw() { |
219 // TODO(enne): Some callers (mac) call this function expecting that it | 213 // TODO(enne): Some callers (mac) call this function expecting that it |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 observer_list_, | 440 observer_list_, |
447 OnCompositingLockStateChanged(this)); | 441 OnCompositingLockStateChanged(this)); |
448 } | 442 } |
449 | 443 |
450 void Compositor::CancelCompositorLock() { | 444 void Compositor::CancelCompositorLock() { |
451 if (compositor_lock_) | 445 if (compositor_lock_) |
452 compositor_lock_->CancelLock(); | 446 compositor_lock_->CancelLock(); |
453 } | 447 } |
454 | 448 |
455 } // namespace ui | 449 } // namespace ui |
OLD | NEW |