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

Side by Side Diff: cc/TreeSynchronizer.cpp

Issue 11076013: [cc] Store CCLayerImpls as scoped_ptrs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTrees(LayerChromium* layerC hromiumRoot, PassOwnPtr<CCLayerImpl> oldCCLayerImplRoot, CCLayerTreeHostImpl* ho stImpl) 17 scoped_ptr<CCLayerImpl> TreeSynchronizer::synchronizeTrees(LayerChromium* layerC hromiumRoot, scoped_ptr<CCLayerImpl> oldCCLayerImplRoot, CCLayerTreeHostImpl* ho stImpl)
18 { 18 {
19 OwnPtrCCLayerImplMap oldLayers; 19 ScopedPtrCCLayerImplMap oldLayers;
20 RawPtrCCLayerImplMap newLayers; 20 RawPtrCCLayerImplMap newLayers;
21 21
22 collectExistingCCLayerImplRecursive(oldLayers, oldCCLayerImplRoot); 22 collectExistingCCLayerImplRecursive(oldLayers, oldCCLayerImplRoot.Pass());
23 23
24 OwnPtr<CCLayerImpl> newTree = synchronizeTreeRecursive(newLayers, oldLayers, 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.release(); 28 return newTree.Pass();
29 } 29 }
30 30
31 void TreeSynchronizer::collectExistingCCLayerImplRecursive(OwnPtrCCLayerImplMap& oldLayers, PassOwnPtr<CCLayerImpl> popCCLayerImpl) 31 void TreeSynchronizer::collectExistingCCLayerImplRecursive(ScopedPtrCCLayerImplM ap& oldLayers, scoped_ptr<CCLayerImpl> ccLayerImpl)
32 { 32 {
33 OwnPtr<CCLayerImpl> ccLayerImpl = popCCLayerImpl;
34
35 if (!ccLayerImpl) 33 if (!ccLayerImpl)
36 return; 34 return;
37 35
38 OwnPtrVector<CCLayerImpl>& children = ccLayerImpl->m_children; 36 ScopedPtrVector<CCLayerImpl>& children = ccLayerImpl->m_children;
39 for (size_t i = 0; i < children.size(); ++i) 37 for (size_t i = 0; i < children.size(); ++i)
40 collectExistingCCLayerImplRecursive(oldLayers, children.take(i)); 38 collectExistingCCLayerImplRecursive(oldLayers, children.take(i));
41 39
42 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_maskLayer.rele ase()); 40 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_maskLayer.Pass ());
43 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_replicaLayer.r elease()); 41 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_replicaLayer.P ass());
44 42
45 int id = ccLayerImpl->id(); 43 int id = ccLayerImpl->id();
46 oldLayers.set(id, ccLayerImpl.release()); 44 oldLayers.set(id, ccLayerImpl.Pass());
47 } 45 }
48 46
49 PassOwnPtr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(RawPtrCCLayer ImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer) 47 scoped_ptr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(RawPtrCCLayer ImplMap& newLayers, ScopedPtrCCLayerImplMap& oldLayers, LayerChromium* layer)
50 { 48 {
51 OwnPtr<CCLayerImpl> ccLayerImpl = oldLayers.take(layer->id()); 49 scoped_ptr<CCLayerImpl> ccLayerImpl = oldLayers.take(layer->id());
52 50
53 if (!ccLayerImpl) 51 if (!ccLayerImpl)
54 ccLayerImpl = layer->createCCLayerImpl(); 52 ccLayerImpl = layer->createCCLayerImpl();
55 53
56 newLayers.set(layer->id(), ccLayerImpl.get()); 54 newLayers[layer->id()] = ccLayerImpl.get();
57 return ccLayerImpl.release(); 55 return ccLayerImpl.Pass();
58 } 56 }
59 57
60 PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(RawPtrCCLayer ImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer, CCLay erTreeHostImpl* hostImpl) 58 scoped_ptr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(RawPtrCCLayer ImplMap& newLayers, ScopedPtrCCLayerImplMap& oldLayers, LayerChromium* layer, CC LayerTreeHostImpl* hostImpl)
61 { 59 {
62 if (!layer) 60 if (!layer)
63 return nullptr; 61 return scoped_ptr<CCLayerImpl>();
64 62
65 OwnPtr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(newLayers, oldLay ers, layer); 63 scoped_ptr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(newLayers, ol dLayers, layer);
66 64
67 ccLayerImpl->clearChildList(); 65 ccLayerImpl->clearChildList();
68 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children (); 66 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children ();
69 for (size_t i = 0; i < children.size(); ++i) 67 for (size_t i = 0; i < children.size(); ++i)
70 ccLayerImpl->addChild(synchronizeTreeRecursive(newLayers, oldLayers, chi ldren[i].get(), hostImpl)); 68 ccLayerImpl->addChild(synchronizeTreeRecursive(newLayers, oldLayers, chi ldren[i].get(), hostImpl));
71 69
72 ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(newLayers, oldLayers, lay er->maskLayer(), hostImpl)); 70 ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(newLayers, oldLayers, lay er->maskLayer(), hostImpl));
73 ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->replicaLayer(), hostImpl)); 71 ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->replicaLayer(), hostImpl));
74 72
75 layer->pushPropertiesTo(ccLayerImpl.get()); 73 layer->pushPropertiesTo(ccLayerImpl.get());
76 ccLayerImpl->setLayerTreeHostImpl(hostImpl); 74 ccLayerImpl->setLayerTreeHostImpl(hostImpl);
77 75
78 // Remove all dangling pointers. The pointers will be setup later in updateS crollbarLayerPointersRecursive phase 76 // Remove all dangling pointers. The pointers will be setup later in updateS crollbarLayerPointersRecursive phase
79 if (CCScrollbarAnimationController* scrollbarController = ccLayerImpl->scrol lbarAnimationController()) { 77 if (CCScrollbarAnimationController* scrollbarController = ccLayerImpl->scrol lbarAnimationController()) {
80 scrollbarController->setHorizontalScrollbarLayer(0); 78 scrollbarController->setHorizontalScrollbarLayer(0);
81 scrollbarController->setVerticalScrollbarLayer(0); 79 scrollbarController->setVerticalScrollbarLayer(0);
82 } 80 }
83 81
84 return ccLayerImpl.release(); 82 return ccLayerImpl.Pass();
85 } 83 }
86 84
87 void TreeSynchronizer::updateScrollbarLayerPointersRecursive(const RawPtrCCLayer ImplMap& newLayers, LayerChromium* layer) 85 void TreeSynchronizer::updateScrollbarLayerPointersRecursive(const RawPtrCCLayer ImplMap& newLayers, LayerChromium* layer)
88 { 86 {
89 if (!layer) 87 if (!layer)
90 return; 88 return;
91 89
92 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children (); 90 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children ();
93 for (size_t i = 0; i < children.size(); ++i) 91 for (size_t i = 0; i < children.size(); ++i)
94 updateScrollbarLayerPointersRecursive(newLayers, children[i].get()); 92 updateScrollbarLayerPointersRecursive(newLayers, children[i].get());
95 93
96 ScrollbarLayerChromium* scrollbarLayer = layer->toScrollbarLayerChromium(); 94 ScrollbarLayerChromium* scrollbarLayer = layer->toScrollbarLayerChromium();
97 if (!scrollbarLayer) 95 if (!scrollbarLayer)
98 return; 96 return;
99 97
100 CCScrollbarLayerImpl* ccScrollbarLayerImpl = static_cast<CCScrollbarLayerImp l*>(newLayers.get(scrollbarLayer->id())); 98 RawPtrCCLayerImplMap::const_iterator iter = newLayers.find(scrollbarLayer->i d());
99 CCScrollbarLayerImpl* ccScrollbarLayerImpl = iter != newLayers.end() ? stati c_cast<CCScrollbarLayerImpl*>(iter->second) : NULL;
jamesr 2012/10/07 22:27:19 do we really need the iterator? what about just do
enne (OOO) 2012/10/07 22:44:57 Done. I think it's just personal style to never u
enne (OOO) 2012/10/07 23:40:23 Ok, I lied. You can't operator[] on a const hash_
100 iter = newLayers.find(scrollbarLayer->scrollLayerId());
101 CCLayerImpl* ccScrollLayerImpl = iter != newLayers.end() ? iter->second : NU LL;
jamesr 2012/10/07 22:27:19 same here
enne (OOO) 2012/10/07 22:44:57 Done.
102
101 ASSERT(ccScrollbarLayerImpl); 103 ASSERT(ccScrollbarLayerImpl);
102 CCLayerImpl* ccScrollLayerImpl = newLayers.get(scrollbarLayer->scrollLayerId ());
103 ASSERT(ccScrollLayerImpl); 104 ASSERT(ccScrollLayerImpl);
104 105
105 if (ccScrollbarLayerImpl->orientation() == WebKit::WebScrollbar::Horizontal) 106 if (ccScrollbarLayerImpl->orientation() == WebKit::WebScrollbar::Horizontal)
106 ccScrollLayerImpl->setHorizontalScrollbarLayer(ccScrollbarLayerImpl); 107 ccScrollLayerImpl->setHorizontalScrollbarLayer(ccScrollbarLayerImpl);
107 else 108 else
108 ccScrollLayerImpl->setVerticalScrollbarLayer(ccScrollbarLayerImpl); 109 ccScrollLayerImpl->setVerticalScrollbarLayer(ccScrollbarLayerImpl);
109 } 110 }
110 111
111 } // namespace cc 112 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698