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/tree_synchronizer.cc

Issue 10690168: Aura: Resize locks with --ui-enable-threaded-compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved needing to kick a frame logic up to RWHVA from Compositor. Created 8 years, 2 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 | Annotate | Revision Log
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 "TreeSynchronizer.h" 7 #include "TreeSynchronizer.h"
8 8
9 #include "CCLayerImpl.h" 9 #include "CCLayerImpl.h"
10 #include "CCScrollbarAnimationController.h" 10 #include "CCScrollbarAnimationController.h"
11 #include "CCScrollbarLayerImpl.h" 11 #include "CCScrollbarLayerImpl.h"
12 #include "LayerChromium.h" 12 #include "LayerChromium.h"
13 #include "ScrollbarLayerChromium.h" 13 #include "ScrollbarLayerChromium.h"
14 14
15 namespace cc { 15 namespace cc {
16 16
17 scoped_ptr<CCLayerImpl> TreeSynchronizer::synchronizeTrees(LayerChromium* layerC hromiumRoot, scoped_ptr<CCLayerImpl> oldCCLayerImplRoot, CCLayerTreeHostImpl* ho stImpl) 17 scoped_ptr<CCLayerImpl> TreeSynchronizer::synchronizeTrees(LayerChromium* layerC hromiumRoot, scoped_ptr<CCLayerImpl> oldCCLayerImplRoot, CCLayerTreeHostImpl* ho stImpl)
18 { 18 {
19 ScopedPtrCCLayerImplMap oldLayers; 19 ScopedPtrCCLayerImplMap oldLayers;
20 RawPtrCCLayerImplMap newLayers; 20 RawPtrCCLayerImplMap newLayers;
21 21
22 collectExistingCCLayerImplRecursive(oldLayers, oldCCLayerImplRoot.Pass()); 22 collectExistingCCLayerImplRecursive(layerChromiumRoot, oldLayers, oldCCLayer ImplRoot.Pass());
23 23
24 scoped_ptr<CCLayerImpl> newTree = synchronizeTreeRecursive(newLayers, oldLay ers, layerChromiumRoot, hostImpl); 24 scoped_ptr<CCLayerImpl> newTree = synchronizeTreeRecursive(newLayers, oldLay ers, layerChromiumRoot, hostImpl);
25 25
26 updateScrollbarLayerPointersRecursive(newLayers, layerChromiumRoot); 26 updateScrollbarLayerPointersRecursive(newLayers, layerChromiumRoot);
27 27
28 return newTree.Pass(); 28 return newTree.Pass();
29 } 29 }
30 30
31 void TreeSynchronizer::collectExistingCCLayerImplRecursive(ScopedPtrCCLayerImplM ap& oldLayers, scoped_ptr<CCLayerImpl> ccLayerImpl) 31 void TreeSynchronizer::collectExistingCCLayerImplRecursive(LayerChromium* layer, ScopedPtrCCLayerImplMap& oldLayers, scoped_ptr<CCLayerImpl> ccLayerImpl)
32 { 32 {
33 if (!ccLayerImpl) 33 if (!layer || !ccLayerImpl || layer->id() != ccLayerImpl->id())
34 return; 34 return;
35 35
36 ScopedPtrVector<CCLayerImpl>& children = ccLayerImpl->m_children; 36 if (!layer->deferUpdates()) {
37 for (size_t i = 0; i < children.size(); ++i) 37 ScopedPtrVector<CCLayerImpl>& oldChildren = ccLayerImpl->m_children;
38 collectExistingCCLayerImplRecursive(oldLayers, children.take(i)); 38 ScopedPtrCCLayerImplMap oldChildrenMap;
39 for (size_t i = 0; i < oldChildren.size(); ++i) {
40 int oldChildId = oldChildren[i]->id();
41 oldChildrenMap.set(oldChildId, oldChildren.take(i));
42 }
39 43
40 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_maskLayer.Pass ()); 44 const LayerChromium::LayerList& children = layer->children();
41 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_replicaLayer.P ass()); 45 for (size_t i = 0; i < children.size(); ++i)
46 collectExistingCCLayerImplRecursive(children[i].get(), oldLayers, ol dChildrenMap.take(children[i]->id()));
piman 2012/10/17 21:26:32 Why is it a problem to collect all the older layer
jonathan.backer 2012/10/18 20:20:35 Collecting all the old layers detroys the LayerImp
47
48 collectExistingCCLayerImplRecursive(layer->maskLayer(), oldLayers, ccLay erImpl->m_maskLayer.Pass());
49 collectExistingCCLayerImplRecursive(layer->replicaLayer(), oldLayers, cc LayerImpl->m_replicaLayer.Pass());
50 }
42 51
43 int id = ccLayerImpl->id(); 52 int id = ccLayerImpl->id();
44 oldLayers.set(id, ccLayerImpl.Pass()); 53 oldLayers.set(id, ccLayerImpl.Pass());
45 } 54 }
46 55
47 scoped_ptr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(RawPtrCCLayer ImplMap& newLayers, ScopedPtrCCLayerImplMap& oldLayers, LayerChromium* layer) 56 scoped_ptr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(RawPtrCCLayer ImplMap& newLayers, ScopedPtrCCLayerImplMap& oldLayers, LayerChromium* layer)
48 { 57 {
49 scoped_ptr<CCLayerImpl> ccLayerImpl = oldLayers.take(layer->id()); 58 scoped_ptr<CCLayerImpl> ccLayerImpl = oldLayers.take(layer->id());
50 59
51 if (!ccLayerImpl) 60 if (!ccLayerImpl)
52 ccLayerImpl = layer->createCCLayerImpl(); 61 ccLayerImpl = layer->createCCLayerImpl();
53 62
54 newLayers[layer->id()] = ccLayerImpl.get(); 63 newLayers[layer->id()] = ccLayerImpl.get();
55 return ccLayerImpl.Pass(); 64 return ccLayerImpl.Pass();
56 } 65 }
57 66
58 scoped_ptr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(RawPtrCCLayer ImplMap& newLayers, ScopedPtrCCLayerImplMap& oldLayers, LayerChromium* layer, CC LayerTreeHostImpl* hostImpl) 67 scoped_ptr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(RawPtrCCLayer ImplMap& newLayers, ScopedPtrCCLayerImplMap& oldLayers, LayerChromium* layer, CC LayerTreeHostImpl* hostImpl)
59 { 68 {
60 if (!layer) 69 if (!layer)
61 return scoped_ptr<CCLayerImpl>(); 70 return scoped_ptr<CCLayerImpl>();
62 71
72 if (layer->deferUpdates())
73 return oldLayers.take(layer->id());
74
63 scoped_ptr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(newLayers, ol dLayers, layer); 75 scoped_ptr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(newLayers, ol dLayers, layer);
64 76
65 ccLayerImpl->clearChildList(); 77 ccLayerImpl->clearChildList();
66 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children (); 78 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children ();
67 for (size_t i = 0; i < children.size(); ++i) 79 for (size_t i = 0; i < children.size(); ++i)
68 ccLayerImpl->addChild(synchronizeTreeRecursive(newLayers, oldLayers, chi ldren[i].get(), hostImpl)); 80 ccLayerImpl->addChild(synchronizeTreeRecursive(newLayers, oldLayers, chi ldren[i].get(), hostImpl));
69 81
70 ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(newLayers, oldLayers, lay er->maskLayer(), hostImpl)); 82 ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(newLayers, oldLayers, lay er->maskLayer(), hostImpl));
71 ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->replicaLayer(), hostImpl)); 83 ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->replicaLayer(), hostImpl));
72 84
(...skipping 30 matching lines...) Expand all
103 ASSERT(ccScrollbarLayerImpl); 115 ASSERT(ccScrollbarLayerImpl);
104 ASSERT(ccScrollLayerImpl); 116 ASSERT(ccScrollLayerImpl);
105 117
106 if (ccScrollbarLayerImpl->orientation() == WebKit::WebScrollbar::Horizontal) 118 if (ccScrollbarLayerImpl->orientation() == WebKit::WebScrollbar::Horizontal)
107 ccScrollLayerImpl->setHorizontalScrollbarLayer(ccScrollbarLayerImpl); 119 ccScrollLayerImpl->setHorizontalScrollbarLayer(ccScrollbarLayerImpl);
108 else 120 else
109 ccScrollLayerImpl->setVerticalScrollbarLayer(ccScrollbarLayerImpl); 121 ccScrollLayerImpl->setVerticalScrollbarLayer(ccScrollbarLayerImpl);
110 } 122 }
111 123
112 } // namespace cc 124 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698