[chromium] Draw the root/"non-composited content" in compositor side
[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 "IntRect.h"
29 #include "cc/CCLayerTreeHostCommitter.h"
30 #include "cc/CCLayerTreeHostImplProxy.h"
31
32 #include <wtf/PassOwnPtr.h>
33 #include <wtf/PassRefPtr.h>
34 #include <wtf/RefCounted.h>
35
36 namespace WebCore {
37
38 class CCLayerTreeHostImpl;
39 class CCLayerTreeHostImplClient;
40 class GraphicsContext3D;
41 class LayerChromium;
42 class LayerPainterChromium;
43 class LayerRendererChromium;
44 class GraphicsLayer;
45 class NonCompositedContentHost;
46
47 class CCLayerTreeHostClient {
48 public:
49     virtual void animateAndLayout(double frameBeginTime) = 0;
50     virtual PassRefPtr<GraphicsContext3D> createLayerTreeHostContext3D() = 0;
51     virtual PassOwnPtr<LayerPainterChromium> createRootLayerPainter() = 0;
52     virtual void didRecreateGraphicsContext(bool success) = 0;
53 #if !USE(THREADED_COMPOSITING)
54     virtual void scheduleComposite() = 0;
55 #endif
56 protected:
57     virtual ~CCLayerTreeHostClient() { }
58 };
59
60 struct CCSettings {
61     CCSettings()
62             : acceleratePainting(false)
63             , compositeOffscreen(false)
64             , showFPSCounter(false)
65             , showPlatformLayerTree(false) { }
66
67     bool acceleratePainting;
68     bool compositeOffscreen;
69     bool showFPSCounter;
70     bool showPlatformLayerTree;
71 };
72
73 class CCLayerTreeHost : public RefCounted<CCLayerTreeHost> {
74 public:
75     static PassRefPtr<CCLayerTreeHost> create(CCLayerTreeHostClient*, const CCSettings&);
76     virtual ~CCLayerTreeHost();
77
78     virtual void animateAndLayout(double frameBeginTime);
79     virtual void beginCommit();
80     virtual void commitComplete();
81
82     virtual PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl(CCLayerTreeHostImplClient*);
83     virtual PassOwnPtr<CCLayerTreeHostCommitter> createLayerTreeHostCommitter();
84
85     bool animating() const { return m_animating; }
86     void setAnimating(bool animating) { m_animating = animating; } // Can be removed when non-threaded scheduling moves inside.
87
88     GraphicsContext3D* context();
89
90     void compositeAndReadback(void *pixels, const IntRect&);
91
92     void finishAllRendering();
93
94     int frameNumber() const { return m_frameNumber; }
95
96     void invalidateRootLayerRect(const IntRect& dirtyRect);
97
98     void setNeedsCommitAndRedraw();
99     void setNeedsRedraw();
100
101     void setRootLayer(GraphicsLayer*);
102     GraphicsLayer* rootLayer() { return m_rootLayer.get(); }
103     const GraphicsLayer* rootLayer() const { return m_rootLayer.get(); }
104
105     const CCSettings& settings() const { return m_settings; }
106
107     void setViewport(const IntSize& viewportSize, const IntSize& contentsSize, const IntPoint& scrollPosition);
108
109     const IntSize& viewportSize() const { return m_viewportSize; }
110
111     void setVisible(bool);
112
113     // Temporary home for the non-threaded rendering path.
114 #if !USE(THREADED_COMPOSITING)
115     void composite(bool finish);
116 #endif
117
118     NonCompositedContentHost* nonCompositedContentHost() const { return m_nonCompositedContentHost.get(); }
119
120 protected:
121     CCLayerTreeHost(CCLayerTreeHostClient*, const CCSettings&);
122
123 private:
124     bool initialize();
125
126     PassRefPtr<LayerRendererChromium> createLayerRenderer();
127
128     // Temporary home for the non-threaded rendering path.
129 #if !USE(THREADED_COMPOSITING)
130     void doComposite();
131     void reallocateRenderer();
132
133     bool m_recreatingGraphicsContext;
134     RefPtr<LayerRendererChromium> m_layerRenderer;
135 #endif
136
137     bool m_animating;
138
139     CCLayerTreeHostClient* m_client;
140
141     int m_frameNumber;
142
143     OwnPtr<CCLayerTreeHostImplProxy> m_proxy;
144
145     OwnPtr<GraphicsLayer> m_rootLayer;
146     OwnPtr<NonCompositedContentHost> m_nonCompositedContentHost;
147
148     CCSettings m_settings;
149
150     IntSize m_viewportSize;
151 };
152
153 }
154
155 #endif