Remove extra line from unit_tests.isolate
[chromium-blink-merge.git] / cc / TreeSynchronizer.cpp
blobe12d32d2ccead4952f6857a1fbb1e27de4a7ef6a
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
3 // found in the LICENSE file.
5 #include "config.h"
7 #include "TreeSynchronizer.h"
9 #include "CCLayerImpl.h"
10 #include "CCScrollbarAnimationController.h"
11 #include "CCScrollbarLayerImpl.h"
12 #include "LayerChromium.h"
13 #include "ScrollbarLayerChromium.h"
15 namespace cc {
17 PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTrees(LayerChromium* layerChromiumRoot, PassOwnPtr<CCLayerImpl> oldCCLayerImplRoot, CCLayerTreeHostImpl* hostImpl)
19 OwnPtrCCLayerImplMap oldLayers;
20 RawPtrCCLayerImplMap newLayers;
22 collectExistingCCLayerImplRecursive(oldLayers, oldCCLayerImplRoot);
24 OwnPtr<CCLayerImpl> newTree = synchronizeTreeRecursive(newLayers, oldLayers, layerChromiumRoot, hostImpl);
26 updateScrollbarLayerPointersRecursive(newLayers, layerChromiumRoot);
28 return newTree.release();
31 void TreeSynchronizer::collectExistingCCLayerImplRecursive(OwnPtrCCLayerImplMap& oldLayers, PassOwnPtr<CCLayerImpl> popCCLayerImpl)
33 OwnPtr<CCLayerImpl> ccLayerImpl = popCCLayerImpl;
35 if (!ccLayerImpl)
36 return;
38 OwnPtrVector<CCLayerImpl>& children = ccLayerImpl->m_children;
39 for (size_t i = 0; i < children.size(); ++i)
40 collectExistingCCLayerImplRecursive(oldLayers, children.take(i));
42 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_maskLayer.release());
43 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_replicaLayer.release());
45 int id = ccLayerImpl->id();
46 oldLayers.set(id, ccLayerImpl.release());
49 PassOwnPtr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(RawPtrCCLayerImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer)
51 OwnPtr<CCLayerImpl> ccLayerImpl = oldLayers.take(layer->id());
53 if (!ccLayerImpl)
54 ccLayerImpl = layer->createCCLayerImpl();
56 newLayers.set(layer->id(), ccLayerImpl.get());
57 return ccLayerImpl.release();
60 PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(RawPtrCCLayerImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer, CCLayerTreeHostImpl* hostImpl)
62 if (!layer)
63 return nullptr;
65 OwnPtr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(newLayers, oldLayers, layer);
67 ccLayerImpl->clearChildList();
68 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children();
69 for (size_t i = 0; i < children.size(); ++i)
70 ccLayerImpl->addChild(synchronizeTreeRecursive(newLayers, oldLayers, children[i].get(), hostImpl));
72 ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->maskLayer(), hostImpl));
73 ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->replicaLayer(), hostImpl));
75 layer->pushPropertiesTo(ccLayerImpl.get());
76 ccLayerImpl->setLayerTreeHostImpl(hostImpl);
78 // Remove all dangling pointers. The pointers will be setup later in updateScrollbarLayerPointersRecursive phase
79 if (CCScrollbarAnimationController* scrollbarController = ccLayerImpl->scrollbarAnimationController()) {
80 scrollbarController->setHorizontalScrollbarLayer(0);
81 scrollbarController->setVerticalScrollbarLayer(0);
84 return ccLayerImpl.release();
87 void TreeSynchronizer::updateScrollbarLayerPointersRecursive(const RawPtrCCLayerImplMap& newLayers, LayerChromium* layer)
89 if (!layer)
90 return;
92 const std::vector<scoped_refptr<LayerChromium> >& children = layer->children();
93 for (size_t i = 0; i < children.size(); ++i)
94 updateScrollbarLayerPointersRecursive(newLayers, children[i].get());
96 ScrollbarLayerChromium* scrollbarLayer = layer->toScrollbarLayerChromium();
97 if (!scrollbarLayer)
98 return;
100 CCScrollbarLayerImpl* ccScrollbarLayerImpl = static_cast<CCScrollbarLayerImpl*>(newLayers.get(scrollbarLayer->id()));
101 ASSERT(ccScrollbarLayerImpl);
102 CCLayerImpl* ccScrollLayerImpl = newLayers.get(scrollbarLayer->scrollLayerId());
103 ASSERT(ccScrollLayerImpl);
105 if (ccScrollbarLayerImpl->orientation() == WebKit::WebScrollbar::Horizontal)
106 ccScrollLayerImpl->setHorizontalScrollbarLayer(ccScrollbarLayerImpl);
107 else
108 ccScrollLayerImpl->setVerticalScrollbarLayer(ccScrollbarLayerImpl);
111 } // namespace cc