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

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

Issue 421483003: Parameterize TaskRunner used by ui::Compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@task_runner
Patch Set: Add missing includes Created 6 years, 4 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 | « ui/compositor/compositor.h ('k') | ui/compositor/test/test_compositor_host_mac.mm » ('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 (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 26 matching lines...) Expand all
37 const double kTestRefreshRate = 200.0; 37 const double kTestRefreshRate = 200.0;
38 38
39 const int kCompositorLockTimeoutMs = 67; 39 const int kCompositorLockTimeoutMs = 67;
40 40
41 } // namespace 41 } // namespace
42 42
43 namespace ui { 43 namespace ui {
44 44
45 CompositorLock::CompositorLock(Compositor* compositor) 45 CompositorLock::CompositorLock(Compositor* compositor)
46 : compositor_(compositor) { 46 : compositor_(compositor) {
47 base::MessageLoop::current()->PostDelayedTask( 47 compositor_->task_runner_->PostDelayedTask(
48 FROM_HERE, 48 FROM_HERE,
49 base::Bind(&CompositorLock::CancelLock, AsWeakPtr()), 49 base::Bind(&CompositorLock::CancelLock, AsWeakPtr()),
50 base::TimeDelta::FromMilliseconds(kCompositorLockTimeoutMs)); 50 base::TimeDelta::FromMilliseconds(kCompositorLockTimeoutMs));
51 } 51 }
52 52
53 CompositorLock::~CompositorLock() { 53 CompositorLock::~CompositorLock() {
54 CancelLock(); 54 CancelLock();
55 } 55 }
56 56
57 void CompositorLock::CancelLock() { 57 void CompositorLock::CancelLock() {
58 if (!compositor_) 58 if (!compositor_)
59 return; 59 return;
60 compositor_->UnlockCompositor(); 60 compositor_->UnlockCompositor();
61 compositor_ = NULL; 61 compositor_ = NULL;
62 } 62 }
63 63
64 } // namespace ui 64 } // namespace ui
65 65
66 namespace { 66 namespace {
67 67
68 } // namespace 68 } // namespace
69 69
70 namespace ui { 70 namespace ui {
71 71
72 Compositor::Compositor(gfx::AcceleratedWidget widget, 72 Compositor::Compositor(gfx::AcceleratedWidget widget,
73 ui::ContextFactory* context_factory) 73 ui::ContextFactory* context_factory,
74 scoped_refptr<base::SingleThreadTaskRunner> task_runner)
74 : context_factory_(context_factory), 75 : context_factory_(context_factory),
75 root_layer_(NULL), 76 root_layer_(NULL),
76 widget_(widget), 77 widget_(widget),
77 compositor_thread_loop_(context_factory->GetCompositorMessageLoop()), 78 compositor_thread_loop_(context_factory->GetCompositorMessageLoop()),
79 task_runner_(task_runner),
78 vsync_manager_(new CompositorVSyncManager()), 80 vsync_manager_(new CompositorVSyncManager()),
79 device_scale_factor_(0.0f), 81 device_scale_factor_(0.0f),
80 last_started_frame_(0), 82 last_started_frame_(0),
81 last_ended_frame_(0), 83 last_ended_frame_(0),
82 disable_schedule_composite_(false), 84 disable_schedule_composite_(false),
83 compositor_lock_(NULL), 85 compositor_lock_(NULL),
84 defer_draw_scheduling_(false), 86 defer_draw_scheduling_(false),
85 waiting_on_compositing_end_(false), 87 waiting_on_compositing_end_(false),
86 draw_on_compositing_end_(false), 88 draw_on_compositing_end_(false),
87 swap_state_(SWAP_NONE), 89 swap_state_(SWAP_NONE),
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 137
136 settings.impl_side_painting = IsUIImplSidePaintingEnabled(); 138 settings.impl_side_painting = IsUIImplSidePaintingEnabled();
137 settings.use_zero_copy = IsUIZeroCopyEnabled(); 139 settings.use_zero_copy = IsUIZeroCopyEnabled();
138 140
139 base::TimeTicks before_create = base::TimeTicks::Now(); 141 base::TimeTicks before_create = base::TimeTicks::Now();
140 if (compositor_thread_loop_) { 142 if (compositor_thread_loop_) {
141 host_ = cc::LayerTreeHost::CreateThreaded( 143 host_ = cc::LayerTreeHost::CreateThreaded(
142 this, 144 this,
143 context_factory_->GetSharedBitmapManager(), 145 context_factory_->GetSharedBitmapManager(),
144 settings, 146 settings,
145 base::MessageLoopProxy::current(), 147 task_runner_,
146 compositor_thread_loop_); 148 compositor_thread_loop_);
147 } else { 149 } else {
148 host_ = cc::LayerTreeHost::CreateSingleThreaded( 150 host_ = cc::LayerTreeHost::CreateSingleThreaded(
149 this, 151 this,
150 this, 152 this,
151 context_factory_->GetSharedBitmapManager(), 153 context_factory_->GetSharedBitmapManager(),
152 settings, 154 settings,
153 base::MessageLoopProxy::current()); 155 task_runner_);
154 } 156 }
155 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", 157 UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor",
156 base::TimeTicks::Now() - before_create); 158 base::TimeTicks::Now() - before_create);
157 host_->SetRootLayer(root_web_layer_); 159 host_->SetRootLayer(root_web_layer_);
158 host_->SetLayerTreeHostClientReady(); 160 host_->SetLayerTreeHostClientReady();
159 } 161 }
160 162
161 Compositor::~Compositor() { 163 Compositor::~Compositor() {
162 TRACE_EVENT0("shutdown", "Compositor::destructor"); 164 TRACE_EVENT0("shutdown", "Compositor::destructor");
163 165
164 CancelCompositorLock(); 166 CancelCompositorLock();
165 DCHECK(!compositor_lock_); 167 DCHECK(!compositor_lock_);
166 168
167 if (root_layer_) 169 if (root_layer_)
168 root_layer_->SetCompositor(NULL); 170 root_layer_->SetCompositor(NULL);
169 171
170 // Stop all outstanding draws before telling the ContextFactory to tear 172 // Stop all outstanding draws before telling the ContextFactory to tear
171 // down any contexts that the |host_| may rely upon. 173 // down any contexts that the |host_| may rely upon.
172 host_.reset(); 174 host_.reset();
173 175
174 context_factory_->RemoveCompositor(this); 176 context_factory_->RemoveCompositor(this);
175 } 177 }
176 178
177 void Compositor::ScheduleDraw() { 179 void Compositor::ScheduleDraw() {
178 if (compositor_thread_loop_) { 180 if (compositor_thread_loop_) {
179 host_->SetNeedsCommit(); 181 host_->SetNeedsCommit();
180 } else if (!defer_draw_scheduling_) { 182 } else if (!defer_draw_scheduling_) {
181 defer_draw_scheduling_ = true; 183 defer_draw_scheduling_ = true;
182 base::MessageLoop::current()->PostTask( 184 task_runner_->PostTask(
183 FROM_HERE, 185 FROM_HERE,
184 base::Bind(&Compositor::Draw, schedule_draw_factory_.GetWeakPtr())); 186 base::Bind(&Compositor::Draw, schedule_draw_factory_.GetWeakPtr()));
185 } 187 }
186 } 188 }
187 189
188 void Compositor::SetRootLayer(Layer* root_layer) { 190 void Compositor::SetRootLayer(Layer* root_layer) {
189 if (root_layer_ == root_layer) 191 if (root_layer_ == root_layer)
190 return; 192 return;
191 if (root_layer_) 193 if (root_layer_)
192 root_layer_->SetCompositor(NULL); 194 root_layer_->SetCompositor(NULL);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 // CompositorObservers to be notified before starting another 411 // CompositorObservers to be notified before starting another
410 // draw cycle. 412 // draw cycle.
411 ScheduleDraw(); 413 ScheduleDraw();
412 } 414 }
413 FOR_EACH_OBSERVER(CompositorObserver, 415 FOR_EACH_OBSERVER(CompositorObserver,
414 observer_list_, 416 observer_list_,
415 OnCompositingEnded(this)); 417 OnCompositingEnded(this));
416 } 418 }
417 419
418 } // namespace ui 420 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/compositor.h ('k') | ui/compositor/test/test_compositor_host_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698