Unreviewed, rolling out r95309.
[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 TextureManager;
48
49 class CCLayerTreeHostClient {
50 public:
51     virtual void animateAndLayout(double frameBeginTime) = 0;
52     virtual PassOwnPtr<CCThread> createCompositorThread() = 0;
53     virtual PassRefPtr<GraphicsContext3D> createLayerTreeHostContext3D() = 0;
54     virtual PassOwnPtr<LayerPainterChromium> createRootLayerPainter() = 0;
55     virtual void didRecreateGraphicsContext(bool success) = 0;
56 #if !USE(THREADED_COMPOSITING)
57     virtual void scheduleComposite() = 0;
58 #endif
59 protected:
60     virtual ~CCLayerTreeHostClient() { }
61 };
62
63 struct CCSettings {
64     CCSettings()
65             : acceleratePainting(false)
66             , compositeOffscreen(false)
67             , enableCompositorThread(false)
68             , showFPSCounter(false)
69             , showPlatformLayerTree(false) { }
70
71     bool acceleratePainting;
72     bool compositeOffscreen;
73     bool enableCompositorThread;
74     bool showFPSCounter;
75     bool showPlatformLayerTree;
76 };
77
78 // Provides information on an Impl's rendering capabilities back to the CCLayerTreeHost
79 struct LayerRendererCapabilities {
80     LayerRendererCapabilities()
81         : bestTextureFormat(0)
82         , usingMapSub(false)
83         , usingAcceleratedPainting(false)
84         , maxTextureSize(0) { }
85
86     GC3Denum bestTextureFormat;
87     bool usingMapSub;
88     bool usingAcceleratedPainting;
89     int maxTextureSize;
90 };
91
92 class CCLayerTreeHost : public RefCounted<CCLayerTreeHost> {
93 public:
94     static PassRefPtr<CCLayerTreeHost> create(CCLayerTreeHostClient*, PassRefPtr<LayerChromium> rootLayer, const CCSettings&);
95     virtual ~CCLayerTreeHost();
96
97     // CCLayerTreeHost interface to CCProxy.
98     void animateAndLayout(double frameBeginTime);
99     void commitTo(CCLayerTreeHostImpl*);
100     PassOwnPtr<CCThread> createCompositorThread();
101     PassRefPtr<GraphicsContext3D> createLayerTreeHostContext3D();
102     PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl();
103     void didRecreateGraphicsContext(bool success);
104 #if !USE(THREADED_COMPOSITING)
105     void scheduleComposite();
106 #endif
107
108     // CCLayerTreeHost interface to WebView.
109     bool animating() const { return m_animating; }
110     void setAnimating(bool animating) { m_animating = animating; } // Can be removed when non-threaded scheduling moves inside.
111
112     CCLayerTreeHostClient* client() { return m_client; }
113
114 #if !USE(THREADED_COMPOSITING)
115     void composite();
116 #endif
117
118     GraphicsContext3D* context();
119
120     // Composites and attempts to read back the result into the provided
121     // buffer. If it wasn't possible, e.g. due to context lost, will return
122     // false.
123     bool compositeAndReadback(void *pixels, const IntRect&);
124
125     void finishAllRendering();
126
127     int frameNumber() const { return m_frameNumber; }
128
129     void setZoomAnimatorScale(double);
130
131     const LayerRendererCapabilities& layerRendererCapabilities() const;
132
133     // Test-only hook
134     void loseCompositorContext(int numTimes);
135
136     void setNeedsCommitAndRedraw();
137     void setNeedsRedraw();
138
139     LayerChromium* rootLayer() { return m_rootLayer.get(); }
140     const LayerChromium* rootLayer() const { return m_rootLayer.get(); }
141
142     const CCSettings& settings() const { return m_settings; }
143
144     void setViewport(const IntSize& viewportSize);
145
146     const IntSize& viewportSize() const { return m_viewportSize; }
147     TextureManager* contentsTextureManager() const;
148
149     void setVisible(bool);
150
151     void updateLayers();
152
153     void deleteContentsTextures(GraphicsContext3D*);
154
155 protected:
156     CCLayerTreeHost(CCLayerTreeHostClient*, PassRefPtr<LayerChromium> rootLayer, const CCSettings&);
157
158 private:
159     typedef Vector<RefPtr<LayerChromium> > LayerList;
160
161     void paintLayerContents(const LayerList&);
162     void updateLayers(LayerChromium*);
163     void updateCompositorResources(const LayerList&, GraphicsContext3D*);
164     void updateCompositorResources(LayerChromium*, GraphicsContext3D*);
165     void clearPendingUpdate();
166
167     bool initialize();
168
169     bool m_animating;
170
171     CCLayerTreeHostClient* m_client;
172
173     int m_frameNumber;
174
175     OwnPtr<CCProxy> m_proxy;
176
177     RefPtr<LayerChromium> m_rootLayer;
178     OwnPtr<TextureManager> m_contentsTextureManager;
179
180     LayerList m_updateList;
181
182     CCSettings m_settings;
183
184     IntSize m_viewportSize;
185     double m_zoomAnimatorScale;
186     bool m_visible;
187 };
188
189 }
190
191 #endif