17a876a9851ddfc0cf9a561c986adc23bbd6aab6
[WebKit-https.git] / Source / WebKit / chromium / public / platform / WebLayerTreeView.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  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WebLayerTreeView_h
27 #define WebLayerTreeView_h
28
29 #include "WebCommon.h"
30 #include "WebPrivatePtr.h"
31
32 namespace WebCore {
33 class CCLayerTreeHost;
34 struct CCSettings;
35 }
36
37 namespace WebKit {
38 class WebLayer;
39 class WebLayerTreeViewClient;
40 struct WebRect;
41 struct WebSize;
42
43 class WebLayerTreeView {
44 public:
45     struct Settings {
46         Settings()
47             : acceleratePainting(false)
48             , compositeOffscreen(false)
49             , showFPSCounter(false)
50             , showPlatformLayerTree(false)
51             , refreshRate(0)
52             , perTilePainting(false)
53             , partialSwapEnabled(false)
54             , threadedAnimationEnabled(false) { }
55
56         bool acceleratePainting;
57         bool compositeOffscreen;
58         bool showFPSCounter;
59         bool showPlatformLayerTree;
60         double refreshRate;
61         bool perTilePainting;
62         bool partialSwapEnabled;
63         bool threadedAnimationEnabled;
64 #if WEBKIT_IMPLEMENTATION
65         operator WebCore::CCSettings() const;
66 #endif
67     };
68
69     WEBKIT_EXPORT static WebLayerTreeView create(WebLayerTreeViewClient*, const WebLayer& root, const Settings&);
70
71     WebLayerTreeView() { }
72     WebLayerTreeView(const WebLayerTreeView& layer) { assign(layer); }
73     ~WebLayerTreeView() { reset(); }
74     WebLayerTreeView& operator=(const WebLayerTreeView& layer)
75     {
76         assign(layer);
77         return *this;
78     }
79     WEBKIT_EXPORT void reset();
80     WEBKIT_EXPORT void assign(const WebLayerTreeView&);
81     WEBKIT_EXPORT bool equals(const WebLayerTreeView&) const;
82
83     // Triggers a compositing pass. If the compositor thread was not
84     // enabled via WebCompositor::initialize, the compositing pass happens
85     // immediately. If it is enabled, the compositing pass will happen at a
86     // later time. Before the compositing pass happens (i.e. before composite()
87     // returns when the compositor thread is disabled), WebContentLayers will be
88     // asked to paint their dirty region, through
89     // WebContentLayerClient::paintContents.
90     WEBKIT_EXPORT void composite();
91
92     WEBKIT_EXPORT void setViewportSize(const WebSize&);
93     WEBKIT_EXPORT WebSize viewportSize() const;
94
95     // Composites and attempts to read back the result into the provided
96     // buffer. If it wasn't possible, e.g. due to context lost, will return
97     // false. Pixel format is 32bit (RGBA), and the provided buffer must be
98     // large enough contain viewportSize().width() * viewportSize().height()
99     // pixels. The WebLayerTreeView does not assume ownership of the buffer.
100     // The buffer is not modified if the false is returned.
101     WEBKIT_EXPORT bool compositeAndReadback(void *pixels, const WebRect&);
102
103     // Sets the root of the tree. The root is set by way of the constructor.
104     // This is typically used to explicitly set the root to null to break
105     // cycles.
106     WEBKIT_EXPORT void setRootLayer(WebLayer*);
107
108 #if WEBKIT_IMPLEMENTATION
109     WebLayerTreeView(const WTF::PassRefPtr<WebCore::CCLayerTreeHost>&);
110     WebLayerTreeView& operator=(const WTF::PassRefPtr<WebCore::CCLayerTreeHost>&);
111     operator WTF::PassRefPtr<WebCore::CCLayerTreeHost>() const;
112 #endif
113
114     WEBKIT_EXPORT void setNeedsRedraw();
115
116 protected:
117     WebPrivatePtr<WebCore::CCLayerTreeHost> m_private;
118 };
119
120 inline bool operator==(const WebLayerTreeView& a, const WebLayerTreeView& b)
121 {
122     return a.equals(b);
123 }
124
125 inline bool operator!=(const WebLayerTreeView& a, const WebLayerTreeView& b)
126 {
127     return !(a == b);
128 }
129
130 } // namespace WebKit
131
132 #endif // WebLayerTreeView_h