18f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian/*
2f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved.
38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Redistribution and use in source and binary forms, with or without
58f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * modification, are permitted provided that the following conditions
68f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * are met:
78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 1. Redistributions of source code must retain the above copyright
88f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *    notice, this list of conditions and the following disclaimer.
98f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 2. Redistributions in binary form must reproduce the above copyright
108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *    notice, this list of conditions and the following disclaimer in the
118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *    documentation and/or other materials provided with the distribution.
128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian */
258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#ifndef GraphicsLayerCA_h
27f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#define GraphicsLayerCA_h
288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING)
308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "GraphicsLayer.h"
32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "Image.h"
33f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "PlatformCAAnimation.h"
34cad810f21b803229eb11403f9209855525a25d57Steve Block#include "PlatformCALayerClient.h"
35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/HashMap.h>
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/HashSet.h>
378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/RetainPtr.h>
38f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h>
398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore {
418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass PlatformCALayer;
43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
44cad810f21b803229eb11403f9209855525a25d57Steve Blockclass GraphicsLayerCA : public GraphicsLayer, public PlatformCALayerClient {
458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianpublic:
46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // The width and height of a single tile in a tiled layer. Should be large enough to
47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // avoid lots of small tiles (and therefore lots of drawing callbacks), but small enough
48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // to keep the overall tile cost low.
49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static const int kTiledLayerTileSize = 512;
508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    GraphicsLayerCA(GraphicsLayerClient*);
52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual ~GraphicsLayerCA();
538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setName(const String&);
558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual PlatformLayer* platformLayer() const;
57cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual PlatformCALayer* platformCALayer() const { return primaryLayer(); }
588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual float contentsScale() const { return m_contentsScale; }
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setContentsScale(float);
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool setChildren(const Vector<GraphicsLayer*>&);
638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void addChild(GraphicsLayer*);
648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void addChildAtIndex(GraphicsLayer*, int index);
658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void addChildAbove(GraphicsLayer* layer, GraphicsLayer* sibling);
668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void addChildBelow(GraphicsLayer* layer, GraphicsLayer* sibling);
678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild);
688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void removeFromParent();
708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void setMaskLayer(GraphicsLayer*);
72d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void setReplicatedLayer(GraphicsLayer*);
73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setPosition(const FloatPoint&);
758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setAnchorPoint(const FloatPoint3D&);
768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setSize(const FloatSize&);
778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setTransform(const TransformationMatrix&);
798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setChildrenTransform(const TransformationMatrix&);
818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setPreserves3D(bool);
838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setMasksToBounds(bool);
848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setDrawsContent(bool);
85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void setAcceleratesDrawing(bool);
868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual void setBackgroundColor(const Color&);
888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void clearBackgroundColor();
898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setContentsOpaque(bool);
918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setBackfaceVisibility(bool);
928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    // return true if we started an animation
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual void setOpacity(float);
958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setNeedsDisplay();
978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setNeedsDisplayInRect(const FloatRect&);
9806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    virtual void setContentsNeedsDisplay();
99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual void setContentsRect(const IntRect&);
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual void suspendAnimations(double time);
1038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void resumeAnimations();
1048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    virtual bool addAnimation(const KeyframeValueList&, const IntSize& boxSize, const Animation*, const String& animationName, double timeOffset);
106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    virtual void pauseAnimation(const String& animationName, double timeOffset);
107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    virtual void removeAnimation(const String& animationName);
108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
1098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setContentsToImage(Image*);
110d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void setContentsToMedia(PlatformLayer*);
111dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    virtual void setContentsToCanvas(PlatformLayer*);
112dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
113967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual bool hasContentsLayer() const { return m_contentsLayer; }
1148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setDebugBackgroundColor(const Color&);
1168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual void setDebugBorder(const Color&, float borderWidth);
1178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
118cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void layerDidDisplay(PlatformLayer*);
119d0825bca7fe65beaee391d30da42e937db621564Steve Block
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void recursiveCommitChanges();
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual void syncCompositingState();
123ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual void syncCompositingStateForThisLayerOnly();
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool allowTiledLayer() const { return m_allowTiledLayer; }
1262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void setAllowTiledLayer(bool b);
1272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprotected:
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual void setOpacityInternal(float);
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianprivate:
132cad810f21b803229eb11403f9209855525a25d57Steve Block    // PlatformCALayerClient overrides
133cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void platformCALayerLayoutSublayersOfLayer(PlatformCALayer*) { }
134cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool platformCALayerRespondsToLayoutChanges() const { return false; }
135cad810f21b803229eb11403f9209855525a25d57Steve Block
136cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void platformCALayerAnimationStarted(CFTimeInterval beginTime);
137cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual CompositingCoordinatesOrientation platformCALayerContentsOrientation() const { return contentsOrientation(); }
138cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void platformCALayerPaintContents(GraphicsContext& context, const IntRect& clip) { paintGraphicsLayerContents(context, clip); }
139cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool platformCALayerShowDebugBorders() const { return showDebugBorders(); }
140cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool platformCALayerShowRepaintCounter() const { return showRepaintCounter(); }
141cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual int platformCALayerIncrementRepaintCount() { return incrementRepaintCount(); }
142cad810f21b803229eb11403f9209855525a25d57Steve Block
143cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool platformCALayerContentsOpaque() const { return contentsOpaque(); }
144cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool platformCALayerDrawsContent() const { return drawsContent(); }
145cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void platformCALayerLayerDidDisplay(PlatformLayer* layer) { return layerDidDisplay(layer); }
146cad810f21b803229eb11403f9209855525a25d57Steve Block
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateOpacityOnLayer();
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PlatformCALayer* primaryLayer() const { return m_structuralLayer.get() ? m_structuralLayer.get() : m_layer.get(); }
150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PlatformCALayer* hostLayerForSublayers() const;
151f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PlatformCALayer* layerForSuperlayer() const;
152f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PlatformCALayer* animatedLayer(AnimatedPropertyID) const;
1538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
154d0825bca7fe65beaee391d30da42e937db621564Steve Block    typedef String CloneID; // Identifier for a given clone, based on original/replica branching down the tree.
155d0825bca7fe65beaee391d30da42e937db621564Steve Block    static bool isReplicatedRootClone(const CloneID& cloneID) { return cloneID[0U] & 1; }
156d0825bca7fe65beaee391d30da42e937db621564Steve Block
157f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    typedef HashMap<CloneID, RefPtr<PlatformCALayer> > LayerMap;
158d0825bca7fe65beaee391d30da42e937db621564Steve Block    LayerMap* primaryLayerClones() const { return m_structuralLayer.get() ? m_structuralLayerClones.get() : m_layerClones.get(); }
159bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    LayerMap* animatedLayerClones(AnimatedPropertyID) const;
160d0825bca7fe65beaee391d30da42e937db621564Steve Block
161bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    bool createAnimationFromKeyframes(const KeyframeValueList&, const Animation*, const String& animationName, double timeOffset);
162bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    bool createTransformAnimationsFromKeyframes(const KeyframeValueList&, const Animation*, const String& animationName, double timeOffset, const IntSize& boxSize);
1638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Return autoreleased animation (use RetainPtr?)
165f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PassRefPtr<PlatformCAAnimation> createBasicAnimation(const Animation*, AnimatedPropertyID, bool additive);
166f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PassRefPtr<PlatformCAAnimation> createKeyframeAnimation(const Animation*, AnimatedPropertyID, bool additive);
167f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setupAnimation(PlatformCAAnimation*, const Animation*, bool additive);
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
169f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    const TimingFunction* timingFunctionForAnimationValue(const AnimationValue*, const Animation*);
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
171f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool setAnimationEndpoints(const KeyframeValueList&, const Animation*, PlatformCAAnimation*);
172f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool setAnimationKeyframes(const KeyframeValueList&, const Animation*, PlatformCAAnimation*);
1738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
174f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool setTransformAnimationEndpoints(const KeyframeValueList&, const Animation*, PlatformCAAnimation*, int functionIndex, TransformOperation::OperationType, bool isMatrixAnimation, const IntSize& boxSize);
175f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool setTransformAnimationKeyframes(const KeyframeValueList&, const Animation*, PlatformCAAnimation*, int functionIndex, TransformOperation::OperationType, bool isMatrixAnimation, const IntSize& boxSize);
1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
177bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    bool animationIsRunning(const String& animationName) const
1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    {
179bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        return m_runningAnimations.find(animationName) != m_runningAnimations.end();
1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
182d0825bca7fe65beaee391d30da42e937db621564Steve Block    void commitLayerChangesBeforeSublayers();
183d0825bca7fe65beaee391d30da42e937db621564Steve Block    void commitLayerChangesAfterSublayers();
184d0825bca7fe65beaee391d30da42e937db621564Steve Block
185e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    FloatSize constrainedSize() const;
186e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool requiresTiledLayer(const FloatSize&) const;
1888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    void swapFromOrToTiledLayer(bool useTiledLayer);
1898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    CompositingCoordinatesOrientation defaultContentsOrientation() const;
1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateContentsTransform();
1928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
193f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setupContentsLayer(PlatformCALayer*);
194f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PlatformCALayer* contentsLayer() const { return m_contentsLayer.get(); }
195d0825bca7fe65beaee391d30da42e937db621564Steve Block
196d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void setReplicatedByLayer(GraphicsLayer*);
197d0825bca7fe65beaee391d30da42e937db621564Steve Block
198d0825bca7fe65beaee391d30da42e937db621564Steve Block    // Used to track the path down the tree for replica layers.
199d0825bca7fe65beaee391d30da42e937db621564Steve Block    struct ReplicaState {
200d0825bca7fe65beaee391d30da42e937db621564Steve Block        static const size_t maxReplicaDepth = 16;
201d0825bca7fe65beaee391d30da42e937db621564Steve Block        enum ReplicaBranchType { ChildBranch = 0, ReplicaBranch = 1 };
202d0825bca7fe65beaee391d30da42e937db621564Steve Block        ReplicaState(ReplicaBranchType firstBranch)
203d0825bca7fe65beaee391d30da42e937db621564Steve Block            : m_replicaDepth(0)
204d0825bca7fe65beaee391d30da42e937db621564Steve Block        {
205d0825bca7fe65beaee391d30da42e937db621564Steve Block            push(firstBranch);
206d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
207d0825bca7fe65beaee391d30da42e937db621564Steve Block
208d0825bca7fe65beaee391d30da42e937db621564Steve Block        // Called as we walk down the tree to build replicas.
209d0825bca7fe65beaee391d30da42e937db621564Steve Block        void push(ReplicaBranchType branchType)
210d0825bca7fe65beaee391d30da42e937db621564Steve Block        {
211d0825bca7fe65beaee391d30da42e937db621564Steve Block            m_replicaBranches.append(branchType);
212d0825bca7fe65beaee391d30da42e937db621564Steve Block            if (branchType == ReplicaBranch)
213d0825bca7fe65beaee391d30da42e937db621564Steve Block                ++m_replicaDepth;
214d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
215d0825bca7fe65beaee391d30da42e937db621564Steve Block
216d0825bca7fe65beaee391d30da42e937db621564Steve Block        void setBranchType(ReplicaBranchType branchType)
217d0825bca7fe65beaee391d30da42e937db621564Steve Block        {
218d0825bca7fe65beaee391d30da42e937db621564Steve Block            ASSERT(!m_replicaBranches.isEmpty());
219d0825bca7fe65beaee391d30da42e937db621564Steve Block
220d0825bca7fe65beaee391d30da42e937db621564Steve Block            if (m_replicaBranches.last() != branchType) {
221d0825bca7fe65beaee391d30da42e937db621564Steve Block                if (branchType == ReplicaBranch)
222d0825bca7fe65beaee391d30da42e937db621564Steve Block                    ++m_replicaDepth;
223d0825bca7fe65beaee391d30da42e937db621564Steve Block                else
224d0825bca7fe65beaee391d30da42e937db621564Steve Block                    --m_replicaDepth;
225d0825bca7fe65beaee391d30da42e937db621564Steve Block            }
226d0825bca7fe65beaee391d30da42e937db621564Steve Block
227d0825bca7fe65beaee391d30da42e937db621564Steve Block            m_replicaBranches.last() = branchType;
228d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
229d0825bca7fe65beaee391d30da42e937db621564Steve Block
230d0825bca7fe65beaee391d30da42e937db621564Steve Block        void pop()
231d0825bca7fe65beaee391d30da42e937db621564Steve Block        {
232d0825bca7fe65beaee391d30da42e937db621564Steve Block            if (m_replicaBranches.last() == ReplicaBranch)
233d0825bca7fe65beaee391d30da42e937db621564Steve Block                --m_replicaDepth;
234d0825bca7fe65beaee391d30da42e937db621564Steve Block            m_replicaBranches.removeLast();
235d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
236d0825bca7fe65beaee391d30da42e937db621564Steve Block
237d0825bca7fe65beaee391d30da42e937db621564Steve Block        size_t depth() const { return m_replicaBranches.size(); }
238d0825bca7fe65beaee391d30da42e937db621564Steve Block        size_t replicaDepth() const { return m_replicaDepth; }
239d0825bca7fe65beaee391d30da42e937db621564Steve Block
240d0825bca7fe65beaee391d30da42e937db621564Steve Block        CloneID cloneID() const;
241d0825bca7fe65beaee391d30da42e937db621564Steve Block
242d0825bca7fe65beaee391d30da42e937db621564Steve Block    private:
243d0825bca7fe65beaee391d30da42e937db621564Steve Block        Vector<ReplicaBranchType> m_replicaBranches;
244d0825bca7fe65beaee391d30da42e937db621564Steve Block        size_t m_replicaDepth;
245d0825bca7fe65beaee391d30da42e937db621564Steve Block    };
246f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PassRefPtr<PlatformCALayer>replicatedLayerRoot(ReplicaState&);
247d0825bca7fe65beaee391d30da42e937db621564Steve Block
248d0825bca7fe65beaee391d30da42e937db621564Steve Block    enum CloneLevel { RootCloneLevel, IntermediateCloneLevel };
249f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PassRefPtr<PlatformCALayer> fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaState&, CloneLevel);
250d0825bca7fe65beaee391d30da42e937db621564Steve Block
251f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PassRefPtr<PlatformCALayer> cloneLayer(PlatformCALayer *, CloneLevel);
252f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    PassRefPtr<PlatformCALayer> findOrMakeClone(CloneID, PlatformCALayer *, LayerMap*, CloneLevel);
253d0825bca7fe65beaee391d30da42e937db621564Steve Block
254f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void ensureCloneLayers(CloneID cloneID, RefPtr<PlatformCALayer>& primaryLayer, RefPtr<PlatformCALayer>& structuralLayer, RefPtr<PlatformCALayer>& contentsLayer, CloneLevel cloneLevel);
255d0825bca7fe65beaee391d30da42e937db621564Steve Block
256d0825bca7fe65beaee391d30da42e937db621564Steve Block    bool hasCloneLayers() const { return m_layerClones; }
257d0825bca7fe65beaee391d30da42e937db621564Steve Block    void removeCloneLayers();
258d0825bca7fe65beaee391d30da42e937db621564Steve Block    FloatPoint positionForCloneRootLayer() const;
259d0825bca7fe65beaee391d30da42e937db621564Steve Block
260d0825bca7fe65beaee391d30da42e937db621564Steve Block    void propagateLayerChangeToReplicas();
2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // All these "update" methods will be called inside a BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS block.
263d0825bca7fe65beaee391d30da42e937db621564Steve Block    void updateLayerNames();
2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateSublayerList();
2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateLayerPosition();
2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateLayerSize();
2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateAnchorPoint();
2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateTransform();
2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateChildrenTransform();
2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateMasksToBounds();
2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateContentsOpaque();
2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateBackfaceVisibility();
273d0825bca7fe65beaee391d30da42e937db621564Steve Block    void updateStructuralLayer();
2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateLayerDrawsContent();
2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateLayerBackgroundColor();
2760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateContentsImage();
278d0825bca7fe65beaee391d30da42e937db621564Steve Block    void updateContentsMediaLayer();
279dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void updateContentsCanvasLayer();
2800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateContentsRect();
281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void updateMaskLayer();
282d0825bca7fe65beaee391d30da42e937db621564Steve Block    void updateReplicatedLayers();
2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateLayerAnimations();
28506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void updateContentsNeedsDisplay();
286f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void updateAcceleratesDrawing();
28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void updateContentsScale();
288d0825bca7fe65beaee391d30da42e937db621564Steve Block
289d0825bca7fe65beaee391d30da42e937db621564Steve Block    enum StructuralLayerPurpose {
290d0825bca7fe65beaee391d30da42e937db621564Steve Block        NoStructuralLayer = 0,
291d0825bca7fe65beaee391d30da42e937db621564Steve Block        StructuralLayerForPreserves3D,
292d0825bca7fe65beaee391d30da42e937db621564Steve Block        StructuralLayerForReplicaFlattening
293d0825bca7fe65beaee391d30da42e937db621564Steve Block    };
294d0825bca7fe65beaee391d30da42e937db621564Steve Block    void ensureStructuralLayer(StructuralLayerPurpose);
295d0825bca7fe65beaee391d30da42e937db621564Steve Block    StructuralLayerPurpose structuralLayerPurpose() const;
2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
297f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setAnimationOnLayer(PlatformCAAnimation*, AnimatedPropertyID, const String& animationName, int index, double timeOffset);
298bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    bool removeCAAnimationFromLayer(AnimatedPropertyID, const String& animationName, int index);
299bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    void pauseCAAnimationOnLayer(AnimatedPropertyID, const String& animationName, int index, double timeOffset);
3000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
301d0825bca7fe65beaee391d30da42e937db621564Steve Block    enum MoveOrCopy { Move, Copy };
302f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static void moveOrCopyLayerAnimation(MoveOrCopy, const String& animationIdentifier, PlatformCALayer *fromLayer, PlatformCALayer *toLayer);
303f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void moveOrCopyAnimationsForProperty(MoveOrCopy, AnimatedPropertyID, PlatformCALayer * fromLayer, PlatformCALayer * toLayer);
304d0825bca7fe65beaee391d30da42e937db621564Steve Block
3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    enum LayerChange {
3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        NoChange = 0,
3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        NameChanged = 1 << 1,
308f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ChildrenChanged = 1 << 2, // also used for content layer, and preserves-3d, and size if tiling changes?
3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        PositionChanged = 1 << 3,
3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        AnchorPointChanged = 1 << 4,
3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        SizeChanged = 1 << 5,
3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        TransformChanged = 1 << 6,
3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ChildrenTransformChanged = 1 << 7,
3140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        Preserves3DChanged = 1 << 8,
3150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        MasksToBoundsChanged = 1 << 9,
316f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        DrawsContentChanged = 1 << 10, // need this?
3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        BackgroundColorChanged = 1 << 11,
3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ContentsOpaqueChanged = 1 << 12,
3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        BackfaceVisibilityChanged = 1 << 13,
3200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        OpacityChanged = 1 << 14,
3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        AnimationChanged = 1 << 15,
3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        DirtyRectsChanged = 1 << 16,
3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ContentsImageChanged = 1 << 17,
324d0825bca7fe65beaee391d30da42e937db621564Steve Block        ContentsMediaLayerChanged = 1 << 18,
325dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        ContentsCanvasLayerChanged = 1 << 19,
326231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        ContentsRectChanged = 1 << 20,
32768513a70bcd92384395513322f1b801e7bf9c729Steve Block        MaskLayerChanged = 1 << 21,
32868513a70bcd92384395513322f1b801e7bf9c729Steve Block        ReplicatedLayerChanged = 1 << 22,
329f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ContentsNeedsDisplay = 1 << 23,
33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        AcceleratesDrawingChanged = 1 << 24,
33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        ContentsScaleChanged = 1 << 25
3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    };
3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    typedef unsigned LayerChangeFlags;
3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void noteLayerPropertyChanged(LayerChangeFlags flags);
335d0825bca7fe65beaee391d30da42e937db621564Steve Block    void noteSublayersChanged();
3360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void repaintLayerDirtyRects();
3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
339f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    RefPtr<PlatformCALayer> m_layer; // The main layer
340f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    RefPtr<PlatformCALayer> m_structuralLayer; // A layer used for structural reasons, like preserves-3d or replica-flattening. Is the parent of m_layer.
341f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    RefPtr<PlatformCALayer> m_contentsLayer; // A layer used for inner content, like image and video
342d0825bca7fe65beaee391d30da42e937db621564Steve Block
343d0825bca7fe65beaee391d30da42e937db621564Steve Block    // References to clones of our layers, for replicated layers.
344d0825bca7fe65beaee391d30da42e937db621564Steve Block    OwnPtr<LayerMap> m_layerClones;
345d0825bca7fe65beaee391d30da42e937db621564Steve Block    OwnPtr<LayerMap> m_structuralLayerClones;
346d0825bca7fe65beaee391d30da42e937db621564Steve Block    OwnPtr<LayerMap> m_contentsLayerClones;
3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    enum ContentsLayerPurpose {
3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        NoContentsLayer = 0,
3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ContentsLayerForImage,
351dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        ContentsLayerForMedia,
352dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        ContentsLayerForCanvas
3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    };
3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ContentsLayerPurpose m_contentsLayerPurpose;
3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool m_contentsLayerHasBackgroundColor : 1;
3578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RetainPtr<CGImageRef> m_uncorrectedContentsImage;
3590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    RetainPtr<CGImageRef> m_pendingContentsImage;
3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
361bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // This represents the animation of a single property. There may be multiple transform animations for
362bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // a single transition or keyframe animation, so index is used to distinguish these.
363bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    struct LayerPropertyAnimation {
364f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        LayerPropertyAnimation(PassRefPtr<PlatformCAAnimation> caAnimation, const String& animationName, AnimatedPropertyID property, int index, double timeOffset)
365bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        : m_animation(caAnimation)
366bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        , m_name(animationName)
3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_property(property)
3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_index(index)
369d0825bca7fe65beaee391d30da42e937db621564Steve Block        , m_timeOffset(timeOffset)
3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        { }
3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
372f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        RefPtr<PlatformCAAnimation> m_animation;
373bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        String m_name;
3740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        AnimatedPropertyID m_property;
3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int m_index;
376d0825bca7fe65beaee391d30da42e937db621564Steve Block        double m_timeOffset;
3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    };
3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
379bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // Uncommitted transitions and animations.
380bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    Vector<LayerPropertyAnimation> m_uncomittedAnimations;
3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
382d0825bca7fe65beaee391d30da42e937db621564Steve Block    enum Action { Remove, Pause };
383d0825bca7fe65beaee391d30da42e937db621564Steve Block    struct AnimationProcessingAction {
384d0825bca7fe65beaee391d30da42e937db621564Steve Block        AnimationProcessingAction(Action action = Remove, double timeOffset = 0)
385d0825bca7fe65beaee391d30da42e937db621564Steve Block            : action(action)
386d0825bca7fe65beaee391d30da42e937db621564Steve Block            , timeOffset(timeOffset)
387d0825bca7fe65beaee391d30da42e937db621564Steve Block        {
388d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
389d0825bca7fe65beaee391d30da42e937db621564Steve Block        Action action;
390bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        double timeOffset; // only used for pause
391d0825bca7fe65beaee391d30da42e937db621564Steve Block    };
3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    typedef HashMap<String, AnimationProcessingAction> AnimationsToProcessMap;
393bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    AnimationsToProcessMap m_animationsToProcess;
394bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
395bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // Map of animation names to their associated lists of property animations, so we can remove/pause them.
396bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    typedef HashMap<String, Vector<LayerPropertyAnimation> > AnimationsMap;
397bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    AnimationsMap m_runningAnimations;
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Vector<FloatRect> m_dirtyRects;
4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    LayerChangeFlags m_uncommittedChanges;
40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    float clampedContentsScaleForScale(float) const;
40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    float m_contentsScale;
4052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool m_allowTiledLayer;
4078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian};
4088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
4098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace WebCore
4108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
4118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
4128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // USE(ACCELERATED_COMPOSITING)
4138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
414f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif // GraphicsLayerCA_h
415