f397e534a841d456ba2373db3519ec5af4ad6d5b
[WebKit-https.git] / Source / WebKit / chromium / src / WebLayerTreeView.cpp
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 #include "config.h"
27 #include <public/WebLayerTreeView.h>
28
29 #include "CCFontAtlas.h"
30 #include "CCGraphicsContext.h"
31 #include "CCLayerTreeHost.h"
32 #include "CCRenderingStats.h"
33 #include "LayerChromium.h"
34 #include "WebLayerTreeViewImpl.h"
35 #include <public/WebLayer.h>
36 #include <public/WebPoint.h>
37 #include <public/WebRect.h>
38 #include <public/WebRenderingStats.h>
39 #include <public/WebSize.h>
40
41 using namespace WebCore;
42
43 namespace WebKit {
44
45 WebLayerTreeView::Settings::operator CCLayerTreeSettings() const
46 {
47     CCLayerTreeSettings settings;
48     settings.showFPSCounter = showFPSCounter;
49     settings.showPlatformLayerTree = showPlatformLayerTree;
50     settings.showPaintRects = showPaintRects;
51     settings.renderVSyncEnabled = renderVSyncEnabled;
52     settings.refreshRate = refreshRate;
53     settings.defaultTileSize = defaultTileSize;
54     settings.maxUntiledLayerSize = maxUntiledLayerSize;
55     settings.acceleratePainting = acceleratePainting;
56
57     // FIXME: showFPSCounter / showPlatformLayerTree / maxPartialTextureUpdates aren't supported currently.
58     return settings;
59 }
60
61 void WebLayerTreeView::reset()
62 {
63     m_private.reset(0);
64 }
65
66 bool WebLayerTreeView::isNull() const
67 {
68     return !m_private.get();
69 }
70
71 bool WebLayerTreeView::initialize(WebLayerTreeViewClient* client, const WebLayer& root, const WebLayerTreeView::Settings& settings)
72 {
73     // We have to leak the pointer here into a WebPrivateOwnPtr. We free this object in reset().
74     m_private.reset(WebLayerTreeViewImpl::create(client, root, settings).leakPtr());
75     return !isNull();
76 }
77
78 void WebLayerTreeView::setSurfaceReady()
79 {
80     m_private->layerTreeHost()->setSurfaceReady();
81 }
82
83 void WebLayerTreeView::setRootLayer(WebLayer *root)
84 {
85     if (root)
86         m_private->layerTreeHost()->setRootLayer(*root);
87     else
88         m_private->layerTreeHost()->setRootLayer(PassRefPtr<LayerChromium>());
89 }
90
91 int WebLayerTreeView::compositorIdentifier()
92 {
93     return m_private->layerTreeHost()->compositorIdentifier();
94 }
95
96 void WebLayerTreeView::setViewportSize(const WebSize& layoutViewportSize, const WebSize& deviceViewportSize)
97 {
98     if (!deviceViewportSize.isEmpty())
99         m_private->layerTreeHost()->setViewportSize(layoutViewportSize, deviceViewportSize);
100     else
101         m_private->layerTreeHost()->setViewportSize(layoutViewportSize, layoutViewportSize);
102 }
103
104 WebSize WebLayerTreeView::layoutViewportSize() const
105 {
106     return WebSize(m_private->layerTreeHost()->layoutViewportSize());
107 }
108
109 WebSize WebLayerTreeView::deviceViewportSize() const
110 {
111     return WebSize(m_private->layerTreeHost()->deviceViewportSize());
112 }
113
114 void WebLayerTreeView::setDeviceScaleFactor(const float deviceScaleFactor)
115 {
116     m_private->layerTreeHost()->setDeviceScaleFactor(deviceScaleFactor);
117 }
118
119 float WebLayerTreeView::deviceScaleFactor() const
120 {
121     return m_private->layerTreeHost()->deviceScaleFactor();
122 }
123
124 void WebLayerTreeView::setBackgroundColor(WebColor color)
125 {
126     m_private->layerTreeHost()->setBackgroundColor(color);
127 }
128
129 void WebLayerTreeView::setHasTransparentBackground(bool transparent)
130 {
131     m_private->layerTreeHost()->setHasTransparentBackground(transparent);
132 }
133
134 void WebLayerTreeView::setVisible(bool visible)
135 {
136     m_private->layerTreeHost()->setVisible(visible);
137 }
138
139 void WebLayerTreeView::setPageScaleFactorAndLimits(float pageScaleFactor, float minimum, float maximum)
140 {
141     m_private->layerTreeHost()->setPageScaleFactorAndLimits(pageScaleFactor, minimum, maximum);
142 }
143
144 void WebLayerTreeView::startPageScaleAnimation(const WebPoint& scroll, bool useAnchor, float newPageScale, double durationSec)
145 {
146     m_private->layerTreeHost()->startPageScaleAnimation(IntSize(scroll.x, scroll.y), useAnchor, newPageScale, durationSec);
147 }
148
149 void WebLayerTreeView::setNeedsAnimate()
150 {
151     m_private->layerTreeHost()->setNeedsAnimate();
152 }
153
154 void WebLayerTreeView::setNeedsRedraw()
155 {
156     m_private->layerTreeHost()->setNeedsRedraw();
157 }
158
159 bool WebLayerTreeView::commitRequested() const
160 {
161     return m_private->layerTreeHost()->commitRequested();
162 }
163
164 void WebLayerTreeView::composite()
165 {
166     if (CCProxy::hasImplThread())
167         m_private->layerTreeHost()->setNeedsCommit();
168     else
169         m_private->layerTreeHost()->composite();
170 }
171
172 void WebLayerTreeView::updateAnimations(double frameBeginTime)
173 {
174     m_private->layerTreeHost()->updateAnimations(frameBeginTime);
175 }
176
177 bool WebLayerTreeView::compositeAndReadback(void *pixels, const WebRect& rect)
178 {
179     return m_private->layerTreeHost()->compositeAndReadback(pixels, rect);
180 }
181
182 void WebLayerTreeView::finishAllRendering()
183 {
184     m_private->layerTreeHost()->finishAllRendering();
185 }
186
187 void WebLayerTreeView::renderingStats(WebRenderingStats& stats) const
188 {
189     CCRenderingStats ccStats;
190     m_private->layerTreeHost()->renderingStats(ccStats);
191
192     stats.numAnimationFrames = ccStats.numAnimationFrames;
193     stats.numFramesSentToScreen = ccStats.numFramesSentToScreen;
194     stats.droppedFrameCount = ccStats.droppedFrameCount;
195     stats.totalPaintTimeInSeconds = ccStats.totalPaintTimeInSeconds;
196     stats.totalRasterizeTimeInSeconds = ccStats.totalRasterizeTimeInSeconds;
197 }
198
199 void WebLayerTreeView::setFontAtlas(SkBitmap bitmap, WebRect asciiToWebRectTable[128], int fontHeight)
200 {
201     IntRect asciiToRectTable[128];
202     for (int i = 0; i < 128; ++i)
203         asciiToRectTable[i] = asciiToWebRectTable[i];
204     OwnPtr<CCFontAtlas> fontAtlas = CCFontAtlas::create(bitmap, asciiToRectTable, fontHeight);
205     m_private->layerTreeHost()->setFontAtlas(fontAtlas.release());
206 }
207
208 void WebLayerTreeView::loseCompositorContext(int numTimes)
209 {
210     m_private->layerTreeHost()->loseContext(numTimes);
211 }
212
213 } // namespace WebKit