[chromium] Move updateLayers from LayerRendererChromium to CCLayerTreeHost
[WebKit-https.git] / Source / WebCore / platform / graphics / chromium / cc / CCLayerTreeHost.h
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  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #ifndef CCLayerTreeHost_h
26 #define CCLayerTreeHost_h
27
28 #include "GraphicsTypes3D.h"
29 #include "IntRect.h"
30 #include "cc/CCProxy.h"
31
32 #include <wtf/PassOwnPtr.h>
33 #include <wtf/PassRefPtr.h>
34 #include <wtf/RefCounted.h>
35
36 #if USE(SKIA)
37 class GrContext;
38 #endif
39
40 namespace WebCore {
41
42 class CCLayerTreeHostImpl;
43 class CCThread;
44 class GraphicsContext3D;
45 class LayerChromium;
46 class LayerPainterChromium;
47 class LayerRendererChromium;
48 class GraphicsLayer;
49 class NonCompositedContentHost;
50 class TextureManager;
51
52 class CCLayerTreeHostClient {
53 public:
54     virtual void animateAndLayout(double frameBeginTime) = 0;
55     virtual PassOwnPtr<CCThread> createCompositorThread() = 0;
56     virtual PassRefPtr<GraphicsContext3D> createLayerTreeHostContext3D() = 0;
57     virtual PassOwnPtr<LayerPainterChromium> createRootLayerPainter() = 0;
58     virtual void didRecreateGraphicsContext(bool success) = 0;
59 #if !USE(THREADED_COMPOSITING)
60     virtual void scheduleComposite() = 0;
61 #endif
62 protected:
63     virtual ~CCLayerTreeHostClient() { }
64 };
65
66 struct CCSettings {
67     CCSettings()
68             : acceleratePainting(false)
69             , compositeOffscreen(false)
70             , enableCompositorThread(false)
71             , showFPSCounter(false)
72             , showPlatformLayerTree(false) { }
73
74     bool acceleratePainting;
75     bool compositeOffscreen;
76     bool enableCompositorThread;
77     bool showFPSCounter;
78     bool showPlatformLayerTree;
79 };
80
81 // Provides information on an Impl's rendering capabilities back to the CCLayerTreeHost
82 struct LayerRendererCapabilities {
83     LayerRendererCapabilities()
84         : bestTextureFormat(0)
85         , usingMapSub(false)
86         , usingAcceleratedPainting(false)
87         , maxTextureSize(0) { }
88
89     GC3Denum bestTextureFormat;
90     bool usingMapSub;
91     bool usingAcceleratedPainting;
92     int maxTextureSize;
93 };
94
95 class CCLayerTreeHost : public RefCounted<CCLayerTreeHost> {
96 public:
97     static PassRefPtr<CCLayerTreeHost> create(CCLayerTreeHostClient*, const CCSettings&);
98     virtual ~CCLayerTreeHost();
99
100     // CCLayerTreeHost interface to CCProxy.
101     void animateAndLayout(double frameBeginTime);
102     void commitTo(CCLayerTreeHostImpl*);
103     PassOwnPtr<CCThread> createCompositorThread();
104     PassRefPtr<GraphicsContext3D> createLayerTreeHostContext3D();
105     PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl();
106     void didRecreateGraphicsContext(bool success);
107 #if !USE(THREADED_COMPOSITING)
108     void scheduleComposite();
109 #endif
110
111     // CCLayerTreeHost interface to WebView.
112     bool animating() const { return m_animating; }
113     void setAnimating(bool animating) { m_animating = animating; } // Can be removed when non-threaded scheduling moves inside.
114
115     CCLayerTreeHostClient* client() { return m_client; }
116
117 #if !USE(THREADED_COMPOSITING)
118     void composite();
119 #endif
120
121     GraphicsContext3D* context();
122
123     // Composites and attempts to read back the result into the provided
124     // buffer. If it wasn't possible, e.g. due to context lost, will return
125     // false.
126     bool compositeAndReadback(void *pixels, const IntRect&);
127
128     void finishAllRendering();
129
130     int frameNumber() const { return m_frameNumber; }
131
132     void invalidateRootLayerRect(const IntRect& dirtyRect);
133
134     const LayerRendererCapabilities& layerRendererCapabilities() const;
135
136     // Test-only hook
137     void loseCompositorContext(int numTimes);
138
139     void setNeedsCommitAndRedraw();
140     void setNeedsRedraw();
141
142     void setRootLayer(GraphicsLayer*);
143     GraphicsLayer* rootLayer() { return m_rootLayer.get(); }
144     const GraphicsLayer* rootLayer() const { return m_rootLayer.get(); }
145
146     const CCSettings& settings() const { return m_settings; }
147
148     void setViewport(const IntSize& viewportSize, const IntSize& contentsSize, const IntPoint& scrollPosition);
149
150     const IntSize& viewportSize() const { return m_viewportSize; }
151     TextureManager* contentsTextureManager() const;
152
153     void setVisible(bool);
154
155     NonCompositedContentHost* nonCompositedContentHost() const { return m_nonCompositedContentHost.get(); }
156
157     void updateLayers();
158
159 protected:
160     CCLayerTreeHost(CCLayerTreeHostClient*, const CCSettings&);
161
162 private:
163     typedef Vector<RefPtr<LayerChromium> > LayerList;
164
165     void paintLayerContents(const LayerList&);
166     void updateLayers(LayerChromium*);
167     void updateCompositorResources(const LayerList&, GraphicsContext3D*);
168     void updateCompositorResources(LayerChromium*, GraphicsContext3D*);
169
170     bool initialize();
171
172     PassRefPtr<LayerRendererChromium> createLayerRenderer();
173
174     bool m_animating;
175
176     CCLayerTreeHostClient* m_client;
177
178     int m_frameNumber;
179
180     OwnPtr<CCProxy> m_proxy;
181
182     OwnPtr<GraphicsLayer> m_rootLayer;
183     OwnPtr<NonCompositedContentHost> m_nonCompositedContentHost;
184
185     LayerList m_updateList;
186
187     CCSettings m_settings;
188
189     IntSize m_viewportSize;
190     bool m_visible;
191 };
192
193 }
194
195 #endif