| 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 compositor_ = NULL; | 65 compositor_ = NULL; |
| 66 } | 66 } |
| 67 | 67 |
| 68 Compositor::Compositor(gfx::AcceleratedWidget widget, | 68 Compositor::Compositor(gfx::AcceleratedWidget widget, |
| 69 ui::ContextFactory* context_factory, | 69 ui::ContextFactory* context_factory, |
| 70 scoped_refptr<base::SingleThreadTaskRunner> task_runner) | 70 scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
| 71 : context_factory_(context_factory), | 71 : context_factory_(context_factory), |
| 72 root_layer_(NULL), | 72 root_layer_(NULL), |
| 73 widget_(widget), | 73 widget_(widget), |
| 74 surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()), | 74 surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()), |
| 75 compositor_thread_loop_(context_factory->GetCompositorMessageLoop()), | |
| 76 task_runner_(task_runner), | 75 task_runner_(task_runner), |
| 77 vsync_manager_(new CompositorVSyncManager()), | 76 vsync_manager_(new CompositorVSyncManager()), |
| 78 device_scale_factor_(0.0f), | 77 device_scale_factor_(0.0f), |
| 79 last_started_frame_(0), | 78 last_started_frame_(0), |
| 80 last_ended_frame_(0), | 79 last_ended_frame_(0), |
| 81 num_failed_recreate_attempts_(0), | 80 num_failed_recreate_attempts_(0), |
| 82 disable_schedule_composite_(false), | 81 disable_schedule_composite_(false), |
| 83 compositor_lock_(NULL), | 82 compositor_lock_(NULL), |
| 84 layer_animator_collection_(this), | 83 layer_animator_collection_(this), |
| 85 weak_ptr_factory_(this) { | 84 weak_ptr_factory_(this) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 command_line->HasSwitch(cc::switches::kUIShowReplicaScreenSpaceRects); | 129 command_line->HasSwitch(cc::switches::kUIShowReplicaScreenSpaceRects); |
| 131 | 130 |
| 132 settings.initial_debug_state.SetRecordRenderingStats( | 131 settings.initial_debug_state.SetRecordRenderingStats( |
| 133 command_line->HasSwitch(cc::switches::kEnableGpuBenchmarking)); | 132 command_line->HasSwitch(cc::switches::kEnableGpuBenchmarking)); |
| 134 | 133 |
| 135 settings.impl_side_painting = IsUIImplSidePaintingEnabled(); | 134 settings.impl_side_painting = IsUIImplSidePaintingEnabled(); |
| 136 settings.use_zero_copy = IsUIZeroCopyEnabled(); | 135 settings.use_zero_copy = IsUIZeroCopyEnabled(); |
| 137 settings.hud_typeface = ui::GetHudTypeface(); | 136 settings.hud_typeface = ui::GetHudTypeface(); |
| 138 | 137 |
| 139 base::TimeTicks before_create = base::TimeTicks::Now(); | 138 base::TimeTicks before_create = base::TimeTicks::Now(); |
| 140 if (compositor_thread_loop_.get()) { | 139 host_ = cc::LayerTreeHost::CreateSingleThreaded( |
| 141 host_ = cc::LayerTreeHost::CreateThreaded( | 140 this, this, context_factory_->GetSharedBitmapManager(), |
| 142 this, | 141 context_factory_->GetGpuMemoryBufferManager(), settings, task_runner_, |
| 143 context_factory_->GetSharedBitmapManager(), | 142 nullptr); |
| 144 context_factory_->GetGpuMemoryBufferManager(), | |
| 145 settings, | |
| 146 task_runner_, | |
| 147 compositor_thread_loop_, | |
| 148 nullptr); | |
| 149 } else { | |
| 150 host_ = cc::LayerTreeHost::CreateSingleThreaded( | |
| 151 this, | |
| 152 this, | |
| 153 context_factory_->GetSharedBitmapManager(), | |
| 154 context_factory_->GetGpuMemoryBufferManager(), | |
| 155 settings, | |
| 156 task_runner_, | |
| 157 nullptr); | |
| 158 } | |
| 159 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", | 143 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", |
| 160 base::TimeTicks::Now() - before_create); | 144 base::TimeTicks::Now() - before_create); |
| 161 host_->SetRootLayer(root_web_layer_); | 145 host_->SetRootLayer(root_web_layer_); |
| 162 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace()); | 146 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace()); |
| 163 host_->SetLayerTreeHostClientReady(); | 147 host_->SetLayerTreeHostClientReady(); |
| 164 } | 148 } |
| 165 | 149 |
| 166 Compositor::~Compositor() { | 150 Compositor::~Compositor() { |
| 167 TRACE_EVENT0("shutdown", "Compositor::destructor"); | 151 TRACE_EVENT0("shutdown", "Compositor::destructor"); |
| 168 | 152 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 DCHECK(!IsLocked()); | 331 DCHECK(!IsLocked()); |
| 348 FOR_EACH_OBSERVER(CompositorObserver, | 332 FOR_EACH_OBSERVER(CompositorObserver, |
| 349 observer_list_, | 333 observer_list_, |
| 350 OnCompositingDidCommit(this)); | 334 OnCompositingDidCommit(this)); |
| 351 } | 335 } |
| 352 | 336 |
| 353 void Compositor::DidCommitAndDrawFrame() { | 337 void Compositor::DidCommitAndDrawFrame() { |
| 354 } | 338 } |
| 355 | 339 |
| 356 void Compositor::DidCompleteSwapBuffers() { | 340 void Compositor::DidCompleteSwapBuffers() { |
| 357 // DidPostSwapBuffers is a SingleThreadProxy-only feature. Synthetically | |
| 358 // generate OnCompositingStarted messages for the threaded case so that | |
| 359 // OnCompositingStarted/OnCompositingEnded messages match. | |
| 360 if (compositor_thread_loop_.get()) { | |
| 361 base::TimeTicks start_time = gfx::FrameTime::Now(); | |
| 362 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, | |
| 363 OnCompositingStarted(this, start_time)); | |
| 364 } | |
| 365 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, | 341 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, |
| 366 OnCompositingEnded(this)); | 342 OnCompositingEnded(this)); |
| 367 } | 343 } |
| 368 | 344 |
| 369 void Compositor::DidPostSwapBuffers() { | 345 void Compositor::DidPostSwapBuffers() { |
| 370 base::TimeTicks start_time = gfx::FrameTime::Now(); | 346 base::TimeTicks start_time = gfx::FrameTime::Now(); |
| 371 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, | 347 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, |
| 372 OnCompositingStarted(this, start_time)); | 348 OnCompositingStarted(this, start_time)); |
| 373 } | 349 } |
| 374 | 350 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 observer_list_, | 386 observer_list_, |
| 411 OnCompositingLockStateChanged(this)); | 387 OnCompositingLockStateChanged(this)); |
| 412 } | 388 } |
| 413 | 389 |
| 414 void Compositor::CancelCompositorLock() { | 390 void Compositor::CancelCompositorLock() { |
| 415 if (compositor_lock_) | 391 if (compositor_lock_) |
| 416 compositor_lock_->CancelLock(); | 392 compositor_lock_->CancelLock(); |
| 417 } | 393 } |
| 418 | 394 |
| 419 } // namespace ui | 395 } // namespace ui |
| OLD | NEW |