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

Side by Side Diff: cc/layer_tree_host.cc

Issue 11232051: Remove static thread pointers from CC (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase to 165444 Created 8 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/layer_tree_host.h" 7 #include "cc/layer_tree_host.h"
8 8
9 #include "Region.h" 9 #include "Region.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "cc/font_atlas.h" 12 #include "cc/font_atlas.h"
13 #include "cc/graphics_context.h" 13 #include "cc/graphics_context.h"
14 #include "cc/heads_up_display_layer.h" 14 #include "cc/heads_up_display_layer.h"
15 #include "cc/heads_up_display_layer_impl.h" 15 #include "cc/heads_up_display_layer_impl.h"
16 #include "cc/layer.h" 16 #include "cc/layer.h"
17 #include "cc/layer_animation_controller.h" 17 #include "cc/layer_animation_controller.h"
18 #include "cc/layer_iterator.h" 18 #include "cc/layer_iterator.h"
19 #include "cc/layer_tree_host_client.h" 19 #include "cc/layer_tree_host_client.h"
20 #include "cc/layer_tree_host_common.h" 20 #include "cc/layer_tree_host_common.h"
21 #include "cc/layer_tree_host_impl.h" 21 #include "cc/layer_tree_host_impl.h"
22 #include "cc/math_util.h" 22 #include "cc/math_util.h"
23 #include "cc/occlusion_tracker.h" 23 #include "cc/occlusion_tracker.h"
24 #include "cc/overdraw_metrics.h" 24 #include "cc/overdraw_metrics.h"
25 #include "cc/settings.h" 25 #include "cc/settings.h"
26 #include "cc/single_thread_proxy.h" 26 #include "cc/single_thread_proxy.h"
27 #include "cc/thread.h"
27 #include "cc/thread_proxy.h" 28 #include "cc/thread_proxy.h"
28 #include "cc/tree_synchronizer.h" 29 #include "cc/tree_synchronizer.h"
29 30
30 using namespace std; 31 using namespace std;
31 32
32 namespace { 33 namespace {
33 static int numLayerTreeInstances; 34 static int numLayerTreeInstances;
34 } 35 }
35 36
36 namespace cc { 37 namespace cc {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 77
77 RendererCapabilities::~RendererCapabilities() 78 RendererCapabilities::~RendererCapabilities()
78 { 79 {
79 } 80 }
80 81
81 bool LayerTreeHost::anyLayerTreeHostInstanceExists() 82 bool LayerTreeHost::anyLayerTreeHostInstanceExists()
82 { 83 {
83 return numLayerTreeInstances > 0; 84 return numLayerTreeInstances > 0;
84 } 85 }
85 86
86 scoped_ptr<LayerTreeHost> LayerTreeHost::create(LayerTreeHostClient* client, con st LayerTreeSettings& settings) 87 scoped_ptr<LayerTreeHost> LayerTreeHost::create(LayerTreeHostClient* client, con st LayerTreeSettings& settings, scoped_ptr<Thread> implThread)
87 { 88 {
88 scoped_ptr<LayerTreeHost> layerTreeHost(new LayerTreeHost(client, settings)) ; 89 scoped_ptr<LayerTreeHost> layerTreeHost(new LayerTreeHost(client, settings)) ;
89 if (!layerTreeHost->initialize()) 90 if (!layerTreeHost->initialize(implThread.Pass()))
90 return scoped_ptr<LayerTreeHost>(); 91 return scoped_ptr<LayerTreeHost>();
91 return layerTreeHost.Pass(); 92 return layerTreeHost.Pass();
92 } 93 }
93 94
94 LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client, const LayerTreeSetting s& settings) 95 LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client, const LayerTreeSetting s& settings)
95 : m_animating(false) 96 : m_animating(false)
96 , m_needsAnimateLayers(false) 97 , m_needsAnimateLayers(false)
97 , m_client(client) 98 , m_client(client)
98 , m_commitNumber(0) 99 , m_commitNumber(0)
99 , m_renderingStats() 100 , m_renderingStats()
100 , m_rendererInitialized(false) 101 , m_rendererInitialized(false)
101 , m_contextLost(false) 102 , m_contextLost(false)
102 , m_numTimesRecreateShouldFail(0) 103 , m_numTimesRecreateShouldFail(0)
103 , m_numFailedRecreateAttempts(0) 104 , m_numFailedRecreateAttempts(0)
104 , m_settings(settings) 105 , m_settings(settings)
105 , m_deviceScaleFactor(1) 106 , m_deviceScaleFactor(1)
106 , m_visible(true) 107 , m_visible(true)
107 , m_pageScaleFactor(1) 108 , m_pageScaleFactor(1)
108 , m_minPageScaleFactor(1) 109 , m_minPageScaleFactor(1)
109 , m_maxPageScaleFactor(1) 110 , m_maxPageScaleFactor(1)
110 , m_triggerIdleUpdates(true) 111 , m_triggerIdleUpdates(true)
111 , m_backgroundColor(SK_ColorWHITE) 112 , m_backgroundColor(SK_ColorWHITE)
112 , m_hasTransparentBackground(false) 113 , m_hasTransparentBackground(false)
113 , m_partialTextureUpdateRequests(0) 114 , m_partialTextureUpdateRequests(0)
114 { 115 {
115 DCHECK(Proxy::isMainThread());
116 numLayerTreeInstances++; 116 numLayerTreeInstances++;
117 } 117 }
118 118
119 bool LayerTreeHost::initialize() 119 bool LayerTreeHost::initialize(scoped_ptr<Thread> implThread)
120 { 120 {
121 TRACE_EVENT0("cc", "LayerTreeHost::initialize"); 121 TRACE_EVENT0("cc", "LayerTreeHost::initialize");
122 122
123 if (Proxy::hasImplThread()) 123 if (implThread)
124 m_proxy = ThreadProxy::create(this); 124 m_proxy = ThreadProxy::create(this, implThread.Pass());
125 else 125 else
126 m_proxy = SingleThreadProxy::create(this); 126 m_proxy = SingleThreadProxy::create(this);
127 m_proxy->start(); 127 m_proxy->start();
128 128
129 return m_proxy->initializeContext(); 129 return m_proxy->initializeContext();
130 } 130 }
131 131
132 LayerTreeHost::~LayerTreeHost() 132 LayerTreeHost::~LayerTreeHost()
133 { 133 {
134 if (m_rootLayer) 134 if (m_rootLayer)
135 m_rootLayer->setLayerTreeHost(0); 135 m_rootLayer->setLayerTreeHost(0);
136 DCHECK(Proxy::isMainThread()); 136 DCHECK(m_proxy);
137 DCHECK(m_proxy->isMainThread());
137 TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost"); 138 TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost");
138 DCHECK(m_proxy.get());
139 m_proxy->stop(); 139 m_proxy->stop();
140 m_proxy.reset();
141 numLayerTreeInstances--; 140 numLayerTreeInstances--;
142 RateLimiterMap::iterator it = m_rateLimiters.begin(); 141 RateLimiterMap::iterator it = m_rateLimiters.begin();
143 if (it != m_rateLimiters.end()) 142 if (it != m_rateLimiters.end())
144 it->second->stop(); 143 it->second->stop();
145 } 144 }
146 145
147 void LayerTreeHost::setSurfaceReady() 146 void LayerTreeHost::setSurfaceReady()
148 { 147 {
149 m_proxy->setSurfaceReady(); 148 m_proxy->setSurfaceReady();
150 } 149 }
151 150
152 void LayerTreeHost::initializeRenderer() 151 void LayerTreeHost::initializeRenderer()
153 { 152 {
154 TRACE_EVENT0("cc", "LayerTreeHost::initializeRenderer"); 153 TRACE_EVENT0("cc", "LayerTreeHost::initializeRenderer");
155 if (!m_proxy->initializeRenderer()) { 154 if (!m_proxy->initializeRenderer()) {
156 // Uh oh, better tell the client that we can't do anything with this con text. 155 // Uh oh, better tell the client that we can't do anything with this con text.
157 m_client->didRecreateOutputSurface(false); 156 m_client->didRecreateOutputSurface(false);
158 return; 157 return;
159 } 158 }
160 159
161 // Update m_settings based on capabilities that we got back from the rendere r. 160 // Update m_settings based on capabilities that we got back from the rendere r.
162 m_settings.acceleratePainting = m_proxy->rendererCapabilities().usingAcceler atedPainting; 161 m_settings.acceleratePainting = m_proxy->rendererCapabilities().usingAcceler atedPainting;
163 162
164 // Update m_settings based on partial update capability. 163 // Update m_settings based on partial update capability.
165 m_settings.maxPartialTextureUpdates = min(m_settings.maxPartialTextureUpdate s, m_proxy->maxPartialTextureUpdates()); 164 m_settings.maxPartialTextureUpdates = min(m_settings.maxPartialTextureUpdate s, m_proxy->maxPartialTextureUpdates());
166 165
167 m_contentsTextureManager = PrioritizedTextureManager::create(0, m_proxy->ren dererCapabilities().maxTextureSize, Renderer::ContentPool); 166 m_contentsTextureManager = PrioritizedTextureManager::create(0, m_proxy->ren dererCapabilities().maxTextureSize, Renderer::ContentPool, m_proxy.get());
168 m_surfaceMemoryPlaceholder = m_contentsTextureManager->createTexture(gfx::Si ze(), GL_RGBA); 167 m_surfaceMemoryPlaceholder = m_contentsTextureManager->createTexture(gfx::Si ze(), GL_RGBA);
169 168
170 m_rendererInitialized = true; 169 m_rendererInitialized = true;
171 170
172 m_settings.defaultTileSize = gfx::Size(min(m_settings.defaultTileSize.width( ), m_proxy->rendererCapabilities().maxTextureSize), 171 m_settings.defaultTileSize = gfx::Size(min(m_settings.defaultTileSize.width( ), m_proxy->rendererCapabilities().maxTextureSize),
173 min(m_settings.defaultTileSize.height (), m_proxy->rendererCapabilities().maxTextureSize)); 172 min(m_settings.defaultTileSize.height (), m_proxy->rendererCapabilities().maxTextureSize));
174 m_settings.maxUntiledLayerSize = gfx::Size(min(m_settings.maxUntiledLayerSiz e.width(), m_proxy->rendererCapabilities().maxTextureSize), 173 m_settings.maxUntiledLayerSize = gfx::Size(min(m_settings.maxUntiledLayerSiz e.width(), m_proxy->rendererCapabilities().maxTextureSize),
175 min(m_settings.maxUntiledLayerSiz e.height(), m_proxy->rendererCapabilities().maxTextureSize)); 174 min(m_settings.maxUntiledLayerSiz e.height(), m_proxy->rendererCapabilities().maxTextureSize));
176 } 175 }
177 176
(...skipping 14 matching lines...) Expand all
192 return RecreateSucceeded; 191 return RecreateSucceeded;
193 } 192 }
194 193
195 // Tolerate a certain number of recreation failures to work around races 194 // Tolerate a certain number of recreation failures to work around races
196 // in the context-lost machinery. 195 // in the context-lost machinery.
197 m_numFailedRecreateAttempts++; 196 m_numFailedRecreateAttempts++;
198 if (m_numFailedRecreateAttempts < 5) { 197 if (m_numFailedRecreateAttempts < 5) {
199 // FIXME: The single thread does not self-schedule context 198 // FIXME: The single thread does not self-schedule context
200 // recreation. So force another recreation attempt to happen by requesti ng 199 // recreation. So force another recreation attempt to happen by requesti ng
201 // another commit. 200 // another commit.
202 if (!Proxy::hasImplThread()) 201 if (!m_proxy->hasImplThread())
203 setNeedsCommit(); 202 setNeedsCommit();
204 return RecreateFailedButTryAgain; 203 return RecreateFailedButTryAgain;
205 } 204 }
206 205
207 // We have tried too many times to recreate the context. Tell the host to fa ll 206 // We have tried too many times to recreate the context. Tell the host to fa ll
208 // back to software rendering. 207 // back to software rendering.
209 m_client->didRecreateOutputSurface(false); 208 m_client->didRecreateOutputSurface(false);
210 return RecreateFailedAndGaveUp; 209 return RecreateFailedAndGaveUp;
211 } 210 }
212 211
213 void LayerTreeHost::deleteContentsTexturesOnImplThread(ResourceProvider* resourc eProvider) 212 void LayerTreeHost::deleteContentsTexturesOnImplThread(ResourceProvider* resourc eProvider)
214 { 213 {
215 DCHECK(Proxy::isImplThread()); 214 DCHECK(m_proxy->isImplThread());
216 if (m_rendererInitialized) 215 if (m_rendererInitialized)
217 m_contentsTextureManager->clearAllMemory(resourceProvider); 216 m_contentsTextureManager->clearAllMemory(resourceProvider);
218 } 217 }
219 218
220 void LayerTreeHost::acquireLayerTextures() 219 void LayerTreeHost::acquireLayerTextures()
221 { 220 {
222 DCHECK(Proxy::isMainThread()); 221 DCHECK(m_proxy->isMainThread());
223 m_proxy->acquireLayerTextures(); 222 m_proxy->acquireLayerTextures();
224 } 223 }
225 224
226 void LayerTreeHost::updateAnimations(base::TimeTicks frameBeginTime) 225 void LayerTreeHost::updateAnimations(base::TimeTicks frameBeginTime)
227 { 226 {
228 m_animating = true; 227 m_animating = true;
229 m_client->animate((frameBeginTime - base::TimeTicks()).InSecondsF()); 228 m_client->animate((frameBeginTime - base::TimeTicks()).InSecondsF());
230 animateLayers(frameBeginTime); 229 animateLayers(frameBeginTime);
231 m_animating = false; 230 m_animating = false;
232 231
233 m_renderingStats.numAnimationFrames++; 232 m_renderingStats.numAnimationFrames++;
234 } 233 }
235 234
236 void LayerTreeHost::layout() 235 void LayerTreeHost::layout()
237 { 236 {
238 m_client->layout(); 237 m_client->layout();
239 } 238 }
240 239
241 void LayerTreeHost::beginCommitOnImplThread(LayerTreeHostImpl* hostImpl) 240 void LayerTreeHost::beginCommitOnImplThread(LayerTreeHostImpl* hostImpl)
242 { 241 {
243 DCHECK(Proxy::isImplThread()); 242 DCHECK(m_proxy->isImplThread());
244 TRACE_EVENT0("cc", "LayerTreeHost::commitTo"); 243 TRACE_EVENT0("cc", "LayerTreeHost::commitTo");
245 } 244 }
246 245
247 // This function commits the LayerTreeHost to an impl tree. When modifying 246 // This function commits the LayerTreeHost to an impl tree. When modifying
248 // this function, keep in mind that the function *runs* on the impl thread! Any 247 // this function, keep in mind that the function *runs* on the impl thread! Any
249 // code that is logically a main thread operation, e.g. deletion of a Layer, 248 // code that is logically a main thread operation, e.g. deletion of a Layer,
250 // should be delayed until the LayerTreeHost::commitComplete, which will run 249 // should be delayed until the LayerTreeHost::commitComplete, which will run
251 // after the commit, but on the main thread. 250 // after the commit, but on the main thread.
252 void LayerTreeHost::finishCommitOnImplThread(LayerTreeHostImpl* hostImpl) 251 void LayerTreeHost::finishCommitOnImplThread(LayerTreeHostImpl* hostImpl)
253 { 252 {
254 DCHECK(Proxy::isImplThread()); 253 DCHECK(m_proxy->isImplThread());
255 254
256 m_contentsTextureManager->updateBackingsInDrawingImplTree(); 255 m_contentsTextureManager->updateBackingsInDrawingImplTree();
257 ResourceProvider::debugNotifyEnterZone(0xA000000); 256 ResourceProvider::debugNotifyEnterZone(0xA000000);
258 m_contentsTextureManager->reduceMemory(hostImpl->resourceProvider()); 257 m_contentsTextureManager->reduceMemory(hostImpl->resourceProvider());
259 ResourceProvider::debugNotifyLeaveZone(); 258 ResourceProvider::debugNotifyLeaveZone();
260 259
261 hostImpl->setRootLayer(TreeSynchronizer::synchronizeTrees(rootLayer(), hostI mpl->detachLayerTree(), hostImpl)); 260 hostImpl->setRootLayer(TreeSynchronizer::synchronizeTrees(rootLayer(), hostI mpl->detachLayerTree(), hostImpl));
262 261
263 if (m_rootLayer && m_hudLayer) 262 if (m_rootLayer && m_hudLayer)
264 hostImpl->setHudLayer(static_cast<HeadsUpDisplayLayerImpl*>(LayerTreeHos tCommon::findLayerInSubtree(hostImpl->rootLayer(), m_hudLayer->id()))); 263 hostImpl->setHudLayer(static_cast<HeadsUpDisplayLayerImpl*>(LayerTreeHos tCommon::findLayerInSubtree(hostImpl->rootLayer(), m_hudLayer->id())));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 return m_client->createOutputSurface(); 310 return m_client->createOutputSurface();
312 } 311 }
313 312
314 scoped_ptr<InputHandler> LayerTreeHost::createInputHandler() 313 scoped_ptr<InputHandler> LayerTreeHost::createInputHandler()
315 { 314 {
316 return m_client->createInputHandler(); 315 return m_client->createInputHandler();
317 } 316 }
318 317
319 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::createLayerTreeHostImpl(LayerTreeHo stImplClient* client) 318 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::createLayerTreeHostImpl(LayerTreeHo stImplClient* client)
320 { 319 {
321 return LayerTreeHostImpl::create(m_settings, client); 320 return LayerTreeHostImpl::create(m_settings, client, m_proxy.get());
322 } 321 }
323 322
324 void LayerTreeHost::didLoseContext() 323 void LayerTreeHost::didLoseContext()
325 { 324 {
326 TRACE_EVENT0("cc", "LayerTreeHost::didLoseContext"); 325 TRACE_EVENT0("cc", "LayerTreeHost::didLoseContext");
327 DCHECK(Proxy::isMainThread()); 326 DCHECK(m_proxy->isMainThread());
328 m_contextLost = true; 327 m_contextLost = true;
329 m_numFailedRecreateAttempts = 0; 328 m_numFailedRecreateAttempts = 0;
330 setNeedsCommit(); 329 setNeedsCommit();
331 } 330 }
332 331
333 bool LayerTreeHost::compositeAndReadback(void *pixels, const IntRect& rect) 332 bool LayerTreeHost::compositeAndReadback(void *pixels, const IntRect& rect)
334 { 333 {
335 m_triggerIdleUpdates = false; 334 m_triggerIdleUpdates = false;
336 bool ret = m_proxy->compositeAndReadback(pixels, rect); 335 bool ret = m_proxy->compositeAndReadback(pixels, rect);
337 m_triggerIdleUpdates = true; 336 m_triggerIdleUpdates = true;
(...skipping 22 matching lines...) Expand all
360 m_proxy->renderingStats(stats); 359 m_proxy->renderingStats(stats);
361 } 360 }
362 361
363 const RendererCapabilities& LayerTreeHost::rendererCapabilities() const 362 const RendererCapabilities& LayerTreeHost::rendererCapabilities() const
364 { 363 {
365 return m_proxy->rendererCapabilities(); 364 return m_proxy->rendererCapabilities();
366 } 365 }
367 366
368 void LayerTreeHost::setNeedsAnimate() 367 void LayerTreeHost::setNeedsAnimate()
369 { 368 {
370 DCHECK(Proxy::hasImplThread()); 369 DCHECK(m_proxy->hasImplThread());
371 m_proxy->setNeedsAnimate(); 370 m_proxy->setNeedsAnimate();
372 } 371 }
373 372
374 void LayerTreeHost::setNeedsCommit() 373 void LayerTreeHost::setNeedsCommit()
375 { 374 {
376 if (!m_prepaintCallback.IsCancelled()) { 375 if (!m_prepaintCallback.IsCancelled()) {
377 TRACE_EVENT_INSTANT0("cc", "LayerTreeHost::setNeedsCommit::cancel prepai nt"); 376 TRACE_EVENT_INSTANT0("cc", "LayerTreeHost::setNeedsCommit::cancel prepai nt");
378 m_prepaintCallback.Cancel(); 377 m_prepaintCallback.Cancel();
379 } 378 }
380 m_proxy->setNeedsCommit(); 379 m_proxy->setNeedsCommit();
381 } 380 }
382 381
383 void LayerTreeHost::setNeedsRedraw() 382 void LayerTreeHost::setNeedsRedraw()
384 { 383 {
385 m_proxy->setNeedsRedraw(); 384 m_proxy->setNeedsRedraw();
386 if (!ThreadProxy::implThread()) 385 if (!m_proxy->implThread())
387 m_client->scheduleComposite(); 386 m_client->scheduleComposite();
388 } 387 }
389 388
390 bool LayerTreeHost::commitRequested() const 389 bool LayerTreeHost::commitRequested() const
391 { 390 {
392 return m_proxy->commitRequested(); 391 return m_proxy->commitRequested();
393 } 392 }
394 393
395 void LayerTreeHost::setAnimationEvents(scoped_ptr<AnimationEventsVector> events, base::Time wallClockTime) 394 void LayerTreeHost::setAnimationEvents(scoped_ptr<AnimationEventsVector> events, base::Time wallClockTime)
396 { 395 {
397 DCHECK(ThreadProxy::isMainThread()); 396 DCHECK(m_proxy->isMainThread());
398 setAnimationEventsRecursive(*events.get(), m_rootLayer.get(), wallClockTime) ; 397 setAnimationEventsRecursive(*events.get(), m_rootLayer.get(), wallClockTime) ;
399 } 398 }
400 399
401 void LayerTreeHost::didAddAnimation() 400 void LayerTreeHost::didAddAnimation()
402 { 401 {
403 m_needsAnimateLayers = true; 402 m_needsAnimateLayers = true;
404 m_proxy->didAddAnimation(); 403 m_proxy->didAddAnimation();
405 } 404 }
406 405
407 void LayerTreeHost::setRootLayer(scoped_refptr<Layer> rootLayer) 406 void LayerTreeHost::setRootLayer(scoped_refptr<Layer> rootLayer)
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 m_proxy->loseContext(); 462 m_proxy->loseContext();
464 } 463 }
465 464
466 PrioritizedTextureManager* LayerTreeHost::contentsTextureManager() const 465 PrioritizedTextureManager* LayerTreeHost::contentsTextureManager() const
467 { 466 {
468 return m_contentsTextureManager.get(); 467 return m_contentsTextureManager.get();
469 } 468 }
470 469
471 void LayerTreeHost::composite() 470 void LayerTreeHost::composite()
472 { 471 {
473 DCHECK(!ThreadProxy::implThread()); 472 DCHECK(!m_proxy->implThread());
474 static_cast<SingleThreadProxy*>(m_proxy.get())->compositeImmediately(); 473 static_cast<SingleThreadProxy*>(m_proxy.get())->compositeImmediately();
475 } 474 }
476 475
477 void LayerTreeHost::scheduleComposite() 476 void LayerTreeHost::scheduleComposite()
478 { 477 {
479 m_client->scheduleComposite(); 478 m_client->scheduleComposite();
480 } 479 }
481 480
482 bool LayerTreeHost::initializeRendererIfNeeded() 481 bool LayerTreeHost::initializeRendererIfNeeded()
483 { 482 {
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 void LayerTreeHost::startRateLimiter(WebKit::WebGraphicsContext3D* context) 737 void LayerTreeHost::startRateLimiter(WebKit::WebGraphicsContext3D* context)
739 { 738 {
740 if (m_animating) 739 if (m_animating)
741 return; 740 return;
742 741
743 DCHECK(context); 742 DCHECK(context);
744 RateLimiterMap::iterator it = m_rateLimiters.find(context); 743 RateLimiterMap::iterator it = m_rateLimiters.find(context);
745 if (it != m_rateLimiters.end()) 744 if (it != m_rateLimiters.end())
746 it->second->start(); 745 it->second->start();
747 else { 746 else {
748 scoped_refptr<RateLimiter> rateLimiter = RateLimiter::create(context, th is); 747 scoped_refptr<RateLimiter> rateLimiter = RateLimiter::create(context, th is, m_proxy->mainThread());
749 m_rateLimiters[context] = rateLimiter; 748 m_rateLimiters[context] = rateLimiter;
750 rateLimiter->start(); 749 rateLimiter->start();
751 } 750 }
752 } 751 }
753 752
754 void LayerTreeHost::stopRateLimiter(WebKit::WebGraphicsContext3D* context) 753 void LayerTreeHost::stopRateLimiter(WebKit::WebGraphicsContext3D* context)
755 { 754 {
756 RateLimiterMap::iterator it = m_rateLimiters.find(context); 755 RateLimiterMap::iterator it = m_rateLimiters.find(context);
757 if (it != m_rateLimiters.end()) { 756 if (it != m_rateLimiters.end()) {
758 it->second->stop(); 757 it->second->stop();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 else 832 else
834 layer->notifyAnimationFinished(wallClockTime.ToDoubleT()); 833 layer->notifyAnimationFinished(wallClockTime.ToDoubleT());
835 } 834 }
836 } 835 }
837 836
838 for (size_t childIndex = 0; childIndex < layer->children().size(); ++childIn dex) 837 for (size_t childIndex = 0; childIndex < layer->children().size(); ++childIn dex)
839 setAnimationEventsRecursive(events, layer->children()[childIndex].get(), wallClockTime); 838 setAnimationEventsRecursive(events, layer->children()[childIndex].get(), wallClockTime);
840 } 839 }
841 840
842 } // namespace cc 841 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698