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

Side by Side Diff: ui/cc/TreeSynchronizer.cpp

Issue 10701016: Initial import attempt, just to play with. Many things disabled/removed (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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
« no previous file with comments | « ui/cc/TreeSynchronizer.h ('k') | ui/cc/VideoLayerChromium.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #include "config.h"
27
28 #include "TreeSynchronizer.h"
29
30 #include "LayerChromium.h"
31 #include "ScrollbarLayerChromium.h"
32 #include "cc/CCLayerImpl.h"
33 #include "cc/CCScrollbarLayerImpl.h"
34 #include <wtf/RefPtr.h>
35
36 namespace WebCore {
37
38 PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTrees(LayerChromium* layerC hromiumRoot, PassOwnPtr<CCLayerImpl> oldCCLayerImplRoot, CCLayerTreeHostImpl* ho stImpl)
39 {
40 OwnPtrCCLayerImplMap oldLayers;
41 RawPtrCCLayerImplMap newLayers;
42
43 collectExistingCCLayerImplRecursive(oldLayers, oldCCLayerImplRoot);
44
45 OwnPtr<CCLayerImpl> newTree = synchronizeTreeRecursive(newLayers, oldLayers, layerChromiumRoot, hostImpl);
46
47 updateScrollbarLayerPointersRecursive(newLayers, layerChromiumRoot);
48
49 return newTree.release();
50 }
51
52 void TreeSynchronizer::collectExistingCCLayerImplRecursive(OwnPtrCCLayerImplMap& oldLayers, PassOwnPtr<CCLayerImpl> popCCLayerImpl)
53 {
54 OwnPtr<CCLayerImpl> ccLayerImpl = popCCLayerImpl;
55
56 if (!ccLayerImpl)
57 return;
58
59 Vector<OwnPtr<CCLayerImpl> >& children = ccLayerImpl->m_children;
60 for (size_t i = 0; i < children.size(); ++i)
61 collectExistingCCLayerImplRecursive(oldLayers, children[i].release());
62
63 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_maskLayer.rele ase());
64 collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_replicaLayer.r elease());
65
66 int id = ccLayerImpl->id();
67 oldLayers.set(id, ccLayerImpl.release());
68 }
69
70 PassOwnPtr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(RawPtrCCLayer ImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer)
71 {
72 OwnPtr<CCLayerImpl> ccLayerImpl = oldLayers.take(layer->id());
73
74 if (!ccLayerImpl)
75 ccLayerImpl = layer->createCCLayerImpl();
76
77 newLayers.set(layer->id(), ccLayerImpl.get());
78 return ccLayerImpl.release();
79 }
80
81 PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(RawPtrCCLayer ImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer, CCLay erTreeHostImpl* hostImpl)
82 {
83 if (!layer)
84 return nullptr;
85
86 OwnPtr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(newLayers, oldLay ers, layer);
87
88 ccLayerImpl->clearChildList();
89 const Vector<RefPtr<LayerChromium> >& children = layer->children();
90 for (size_t i = 0; i < children.size(); ++i)
91 ccLayerImpl->addChild(synchronizeTreeRecursive(newLayers, oldLayers, chi ldren[i].get(), hostImpl));
92
93 ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(newLayers, oldLayers, lay er->maskLayer(), hostImpl));
94 ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->replicaLayer(), hostImpl));
95
96 layer->pushPropertiesTo(ccLayerImpl.get());
97 ccLayerImpl->setLayerTreeHostImpl(hostImpl);
98 return ccLayerImpl.release();
99 }
100
101 void TreeSynchronizer::updateScrollbarLayerPointersRecursive(const RawPtrCCLayer ImplMap& newLayers, LayerChromium* layer)
102 {
103 if (!layer)
104 return;
105
106 const Vector<RefPtr<LayerChromium> >& children = layer->children();
107 for (size_t i = 0; i < children.size(); ++i)
108 updateScrollbarLayerPointersRecursive(newLayers, children[i].get());
109
110 ScrollbarLayerChromium* scrollbarLayer = layer->toScrollbarLayerChromium();
111 if (!scrollbarLayer)
112 return;
113
114 CCScrollbarLayerImpl* ccScrollbarLayerImpl = static_cast<CCScrollbarLayerImp l*>(newLayers.get(scrollbarLayer->id()));
115 ASSERT(ccScrollbarLayerImpl);
116 ccScrollbarLayerImpl->setScrollLayer(newLayers.get(scrollbarLayer->scrollLay erId()));
117
118 // Scrollbar layers in the tree should always point to a valid scroll layer
119 ASSERT(newLayers.get(scrollbarLayer->scrollLayerId()));
120 }
121
122 } // namespace WebCore
OLDNEW
« no previous file with comments | « ui/cc/TreeSynchronizer.h ('k') | ui/cc/VideoLayerChromium.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698