[chromium] Implement CCThread in terms of WebThread
[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/CCLayerTreeHostCommitter.h"
31 #include "cc/CCLayerTreeHostImplProxy.h"
32
33 #include <wtf/PassOwnPtr.h>
34 #include <wtf/PassRefPtr.h>
35 #include <wtf/RefCounted.h>
36
37 namespace WebCore {
38
39 class CCLayerTreeHostImpl;
40 class CCLayerTreeHostImplClient;
41 class CCThread;
42 class GraphicsContext3D;
43 class LayerChromium;
44 class LayerPainterChromium;
45 class LayerRendererChromium;
46 class GraphicsLayer;
47 class NonCompositedContentHost;
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             , showFPSCounter(false)
68             , showPlatformLayerTree(false) { }
69
70     bool acceleratePainting;
71     bool compositeOffscreen;
72     bool showFPSCounter;
73     bool showPlatformLayerTree;
74 };
75
76 class CCLayerTreeHost : public RefCounted<CCLayerTreeHost> {
77 public:
78     static PassRefPtr<CCLayerTreeHost> create(CCLayerTreeHostClient*, const CCSettings&);
79     virtual ~CCLayerTreeHost();
80
81     virtual void animateAndLayout(double frameBeginTime);
82     virtual void beginCommit();
83     virtual void commitComplete();
84
85     virtual PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl(CCLayerTreeHostImplClient*);
86     virtual PassOwnPtr<CCLayerTreeHostCommitter> createLayerTreeHostCommitter();
87
88     bool animating() const { return m_animating; }
89     void setAnimating(bool animating) { m_animating = animating; } // Can be removed when non-threaded scheduling moves inside.
90
91     CCLayerTreeHostClient* client() { return m_client; }
92
93     GraphicsContext3D* context();
94
95     void compositeAndReadback(void *pixels, const IntRect&);
96
97     void finishAllRendering();
98
99     int frameNumber() const { return m_frameNumber; }
100
101     void invalidateRootLayerRect(const IntRect& dirtyRect);
102
103     void setNeedsCommitAndRedraw();
104     void setNeedsRedraw();
105
106     void setRootLayer(GraphicsLayer*);
107     GraphicsLayer* rootLayer() { return m_rootLayer.get(); }
108     const GraphicsLayer* rootLayer() const { return m_rootLayer.get(); }
109
110     const CCSettings& settings() const { return m_settings; }
111
112     void setViewport(const IntSize& viewportSize, const IntSize& contentsSize, const IntPoint& scrollPosition);
113
114     const IntSize& viewportSize() const { return m_viewportSize; }
115
116     void setVisible(bool);
117
118     // Temporary home for the non-threaded rendering path.
119 #if !USE(THREADED_COMPOSITING)
120     void composite(bool finish);
121     LayerRendererChromium* layerRenderer() const { return m_layerRenderer.get(); }
122 #endif
123
124     NonCompositedContentHost* nonCompositedContentHost() const { return m_nonCompositedContentHost.get(); }
125
126     bool contextSupportsMapSub() const { return m_contextSupportsMapSub; }
127     int maxTextureSize() const { return m_maxTextureSize; }
128     GC3Denum bestTextureFormat() { return m_bestTextureFormat; }
129
130 protected:
131     CCLayerTreeHost(CCLayerTreeHostClient*, const CCSettings&);
132
133 private:
134     bool initialize();
135
136     PassRefPtr<LayerRendererChromium> createLayerRenderer();
137
138     // Temporary home for the non-threaded rendering path.
139 #if !USE(THREADED_COMPOSITING)
140     void doComposite();
141     void reallocateRenderer();
142
143     bool m_recreatingGraphicsContext;
144     RefPtr<LayerRendererChromium> m_layerRenderer;
145 #endif
146
147     int m_maxTextureSize;
148     GC3Denum m_bestTextureFormat;
149     bool m_contextSupportsMapSub;
150
151     bool m_animating;
152
153     CCLayerTreeHostClient* m_client;
154
155     int m_frameNumber;
156
157     OwnPtr<CCLayerTreeHostImplProxy> m_proxy;
158
159     OwnPtr<GraphicsLayer> m_rootLayer;
160     OwnPtr<NonCompositedContentHost> m_nonCompositedContentHost;
161
162     CCSettings m_settings;
163
164     IntSize m_viewportSize;
165 };
166
167 }
168
169 #endif