Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Side by Side Diff: webkit/compositor_bindings/web_layer_tree_view_impl.cc

Issue 11575049: Make RenderWidget responsible for the composited view's lifetime (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, remove commented out code Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "web_layer_tree_view_impl.h" 5 #include "webkit/compositor_bindings/web_layer_tree_view_impl.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "cc/font_atlas.h" 8 #include "cc/font_atlas.h"
9 #include "cc/input_handler.h" 9 #include "cc/input_handler.h"
10 #include "cc/layer.h" 10 #include "cc/layer.h"
11 #include "cc/layer_tree_host.h" 11 #include "cc/layer_tree_host.h"
12 #include "cc/switches.h" 12 #include "cc/switches.h"
13 #include "cc/thread.h" 13 #include "cc/thread.h"
14 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h" 14 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h"
15 #include "third_party/WebKit/Source/Platform/chromium/public/WebInputHandler.h" 15 #include "third_party/WebKit/Source/Platform/chromium/public/WebInputHandler.h"
16 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayer.h" 16 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayer.h"
17 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeViewCli ent.h" 17 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeViewCli ent.h"
18 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeView.h" 18 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeView.h"
19 #include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h " 19 #include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h "
20 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h" 20 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
21 #include "web_layer_impl.h" 21 #include "webkit/compositor_bindings/web_layer_impl.h"
22 #include "web_to_ccinput_handler_adapter.h"
23 #include "webkit/compositor_bindings/web_rendering_stats_impl.h" 22 #include "webkit/compositor_bindings/web_rendering_stats_impl.h"
24 23 #include "webkit/compositor_bindings/web_to_ccinput_handler_adapter.h"
25 using namespace cc; 24
26 25
27 namespace WebKit { 26 namespace WebKit {
28 27
29 WebLayerTreeViewImpl::WebLayerTreeViewImpl(WebLayerTreeViewClient* client) 28 WebLayerTreeViewImpl::WebLayerTreeViewImpl(WebLayerTreeViewClient* client)
30 : m_client(client) 29 : client_(client) {
31 { 30 }
32 } 31
33 32 WebLayerTreeViewImpl::~WebLayerTreeViewImpl() {
34 WebLayerTreeViewImpl::~WebLayerTreeViewImpl() 33 }
35 { 34
36 } 35 bool WebLayerTreeViewImpl::initialize(
37 36 const WebLayerTreeView::Settings& web_settings,
38 bool WebLayerTreeViewImpl::initialize(const WebLayerTreeView::Settings& webSetti ngs, scoped_ptr<Thread> implThread) 37 scoped_ptr<cc::Thread> impl_thread) {
39 { 38 cc::LayerTreeSettings settings;
40 LayerTreeSettings settings; 39 settings.acceleratePainting = web_settings.acceleratePainting;
41 settings.acceleratePainting = webSettings.acceleratePainting; 40 settings.renderVSyncEnabled = web_settings.renderVSyncEnabled;
42 settings.renderVSyncEnabled = webSettings.renderVSyncEnabled; 41 settings.perTilePaintingEnabled = web_settings.perTilePaintingEnabled;
43 settings.perTilePaintingEnabled = webSettings.perTilePaintingEnabled; 42 settings.acceleratedAnimationEnabled =
44 settings.acceleratedAnimationEnabled = webSettings.acceleratedAnimationEnabl ed; 43 web_settings.acceleratedAnimationEnabled;
45 settings.pageScalePinchZoomEnabled = webSettings.pageScalePinchZoomEnabled; 44 settings.pageScalePinchZoomEnabled = web_settings.pageScalePinchZoomEnabled;
46 settings.refreshRate = webSettings.refreshRate; 45 settings.refreshRate = web_settings.refreshRate;
47 settings.defaultTileSize = webSettings.defaultTileSize; 46 settings.defaultTileSize = web_settings.defaultTileSize;
48 settings.maxUntiledLayerSize = webSettings.maxUntiledLayerSize; 47 settings.maxUntiledLayerSize = web_settings.maxUntiledLayerSize;
49 settings.initialDebugState.showFPSCounter = webSettings.showFPSCounter; 48 settings.initialDebugState.showFPSCounter = web_settings.showFPSCounter;
50 settings.initialDebugState.showPaintRects = webSettings.showPaintRects; 49 settings.initialDebugState.showPaintRects = web_settings.showPaintRects;
51 settings.initialDebugState.showPlatformLayerTree = webSettings.showPlatformL ayerTree; 50 settings.initialDebugState.showPlatformLayerTree =
52 settings.initialDebugState.showDebugBorders = webSettings.showDebugBorders; 51 web_settings.showPlatformLayerTree;
53 m_layerTreeHost = LayerTreeHost::create(this, settings, implThread.Pass()); 52 settings.initialDebugState.showDebugBorders = web_settings.showDebugBorders;
54 if (!m_layerTreeHost.get()) 53 layer_tree_host_ = cc::LayerTreeHost::create(this,
55 return false; 54 settings,
56 return true; 55 impl_thread.Pass());
57 } 56 if (!layer_tree_host_)
58 57 return false;
59 void WebLayerTreeViewImpl::setSurfaceReady() 58 return true;
60 { 59 }
61 m_layerTreeHost->setSurfaceReady(); 60
62 } 61 cc::LayerTreeHost* WebLayerTreeViewImpl::layer_tree_host() const {
63 62 return layer_tree_host_.get();
64 void WebLayerTreeViewImpl::setRootLayer(const WebLayer& root) 63 }
65 { 64
66 m_layerTreeHost->setRootLayer(static_cast<const WebLayerImpl*>(&root)->layer ()); 65 void WebLayerTreeViewImpl::setSurfaceReady() {
67 } 66 layer_tree_host_->setSurfaceReady();
68 67 }
69 void WebLayerTreeViewImpl::clearRootLayer() 68
70 { 69 void WebLayerTreeViewImpl::setRootLayer(const WebLayer& root) {
71 m_layerTreeHost->setRootLayer(scoped_refptr<Layer>()); 70 layer_tree_host_->setRootLayer(
72 } 71 static_cast<const WebLayerImpl*>(&root)->layer());
73 72 }
74 void WebLayerTreeViewImpl::setViewportSize(const WebSize& layoutViewportSize, co nst WebSize& deviceViewportSize) 73
75 { 74 void WebLayerTreeViewImpl::clearRootLayer() {
76 if (!deviceViewportSize.isEmpty()) 75 layer_tree_host_->setRootLayer(scoped_refptr<cc::Layer>());
77 m_layerTreeHost->setViewportSize(layoutViewportSize, deviceViewportSize) ; 76 }
78 else 77
79 m_layerTreeHost->setViewportSize(layoutViewportSize, layoutViewportSize) ; 78 void WebLayerTreeViewImpl::setViewportSize(
80 } 79 const WebSize& layout_viewport_size, const WebSize& device_viewport_size) {
81 80 if (!device_viewport_size.isEmpty()) {
82 WebSize WebLayerTreeViewImpl::layoutViewportSize() const 81 layer_tree_host_->setViewportSize(layout_viewport_size,
83 { 82 device_viewport_size);
84 return m_layerTreeHost->layoutViewportSize(); 83 } else {
85 } 84 layer_tree_host_->setViewportSize(layout_viewport_size,
86 85 layout_viewport_size);
87 WebSize WebLayerTreeViewImpl::deviceViewportSize() const 86 }
88 { 87 }
89 return m_layerTreeHost->deviceViewportSize(); 88
90 } 89 WebSize WebLayerTreeViewImpl::layoutViewportSize() const {
91 90 return layer_tree_host_->layoutViewportSize();
92 WebFloatPoint WebLayerTreeViewImpl::adjustEventPointForPinchZoom(const WebFloatP oint& point) const 91 }
93 { 92
94 return m_layerTreeHost->adjustEventPointForPinchZoom(point); 93 WebSize WebLayerTreeViewImpl::deviceViewportSize() const {
95 } 94 return layer_tree_host_->deviceViewportSize();
96 95 }
97 void WebLayerTreeViewImpl::setDeviceScaleFactor(const float deviceScaleFactor) 96
98 { 97 WebFloatPoint WebLayerTreeViewImpl::adjustEventPointForPinchZoom(
99 m_layerTreeHost->setDeviceScaleFactor(deviceScaleFactor); 98 const WebFloatPoint& point) const {
100 } 99 return layer_tree_host_->adjustEventPointForPinchZoom(point);
101 100 }
102 float WebLayerTreeViewImpl::deviceScaleFactor() const 101
103 { 102 void WebLayerTreeViewImpl::setDeviceScaleFactor(float device_scale_factor) {
104 return m_layerTreeHost->deviceScaleFactor(); 103 layer_tree_host_->setDeviceScaleFactor(device_scale_factor);
105 } 104 }
106 105
107 void WebLayerTreeViewImpl::setBackgroundColor(WebColor color) 106 float WebLayerTreeViewImpl::deviceScaleFactor() const {
108 { 107 return layer_tree_host_->deviceScaleFactor();
109 m_layerTreeHost->setBackgroundColor(color); 108 }
110 } 109
111 110 void WebLayerTreeViewImpl::setBackgroundColor(WebColor color) {
112 void WebLayerTreeViewImpl::setHasTransparentBackground(bool transparent) 111 layer_tree_host_->setBackgroundColor(color);
113 { 112 }
114 m_layerTreeHost->setHasTransparentBackground(transparent); 113
115 } 114 void WebLayerTreeViewImpl::setHasTransparentBackground(bool transparent) {
116 115 layer_tree_host_->setHasTransparentBackground(transparent);
117 void WebLayerTreeViewImpl::setVisible(bool visible) 116 }
118 { 117
119 m_layerTreeHost->setVisible(visible); 118 void WebLayerTreeViewImpl::setVisible(bool visible) {
120 } 119 layer_tree_host_->setVisible(visible);
121 120 }
122 void WebLayerTreeViewImpl::setPageScaleFactorAndLimits(float pageScaleFactor, fl oat minimum, float maximum) 121
123 { 122 void WebLayerTreeViewImpl::setPageScaleFactorAndLimits(float page_scale_factor,
124 m_layerTreeHost->setPageScaleFactorAndLimits(pageScaleFactor, minimum, maxim um); 123 float minimum,
125 } 124 float maximum) {
126 125 layer_tree_host_->setPageScaleFactorAndLimits(page_scale_factor,
127 void WebLayerTreeViewImpl::startPageScaleAnimation(const WebPoint& scroll, bool useAnchor, float newPageScale, double durationSec) 126 minimum, maximum);
128 { 127 }
129 base::TimeDelta duration = base::TimeDelta::FromMicroseconds(durationSec * b ase::Time::kMicrosecondsPerSecond); 128
130 m_layerTreeHost->startPageScaleAnimation(gfx::Vector2d(scroll.x, scroll.y), useAnchor, newPageScale, duration); 129 void WebLayerTreeViewImpl::startPageScaleAnimation(const WebPoint& scroll,
131 } 130 bool use_anchor,
132 131 float new_page_scale,
133 void WebLayerTreeViewImpl::setNeedsAnimate() 132 double duration_sec) {
134 { 133 int64 duration_us = duration_sec * base::Time::kMicrosecondsPerSecond;
135 m_layerTreeHost->setNeedsAnimate(); 134 base::TimeDelta duration = base::TimeDelta::FromMicroseconds(duration_us);
136 } 135 layer_tree_host_->startPageScaleAnimation(gfx::Vector2d(scroll.x, scroll.y),
137 136 use_anchor,
138 void WebLayerTreeViewImpl::setNeedsRedraw() 137 new_page_scale,
139 { 138 duration);
140 m_layerTreeHost->setNeedsRedraw(); 139 }
141 } 140
142 141 void WebLayerTreeViewImpl::setNeedsAnimate() {
143 bool WebLayerTreeViewImpl::commitRequested() const 142 layer_tree_host_->setNeedsAnimate();
144 { 143 }
145 return m_layerTreeHost->commitRequested(); 144
146 } 145 void WebLayerTreeViewImpl::setNeedsRedraw() {
147 146 layer_tree_host_->setNeedsRedraw();
148 void WebLayerTreeViewImpl::composite() 147 }
149 { 148
150 m_layerTreeHost->composite(); 149 bool WebLayerTreeViewImpl::commitRequested() const {
151 } 150 return layer_tree_host_->commitRequested();
152 151 }
153 void WebLayerTreeViewImpl::updateAnimations(double frameBeginTimeSeconds) 152
154 { 153 void WebLayerTreeViewImpl::composite() {
155 base::TimeTicks frameBeginTime = base::TimeTicks::FromInternalValue(frameBeg inTimeSeconds * base::Time::kMicrosecondsPerSecond); 154 layer_tree_host_->composite();
156 m_layerTreeHost->updateAnimations(frameBeginTime); 155 }
157 } 156
158 157 void WebLayerTreeViewImpl::didStopFlinging() {
159 void WebLayerTreeViewImpl::didStopFlinging() 158 layer_tree_host_->didStopFlinging();
160 { 159 }
161 m_layerTreeHost->didStopFlinging(); 160
162 } 161 void WebLayerTreeViewImpl::updateAnimations(double frame_begin_time_seconds) {
163 162 int64 frame_begin_time_us =
164 bool WebLayerTreeViewImpl::compositeAndReadback(void *pixels, const WebRect& rec t) 163 frame_begin_time_seconds * base::Time::kMicrosecondsPerSecond;
165 { 164 base::TimeTicks frame_begin_time =
166 return m_layerTreeHost->compositeAndReadback(pixels, rect); 165 base::TimeTicks::FromInternalValue(frame_begin_time_us);
167 } 166 layer_tree_host_->updateAnimations(frame_begin_time);
168 167 }
169 void WebLayerTreeViewImpl::finishAllRendering() 168
170 { 169 bool WebLayerTreeViewImpl::compositeAndReadback(void* pixels,
171 m_layerTreeHost->finishAllRendering(); 170 const WebRect& rect) {
172 } 171 return layer_tree_host_->compositeAndReadback(pixels, rect);
173 172 }
174 void WebLayerTreeViewImpl::setDeferCommits(bool deferCommits) 173
175 { 174 void WebLayerTreeViewImpl::finishAllRendering() {
176 m_layerTreeHost->setDeferCommits(deferCommits); 175 layer_tree_host_->finishAllRendering();
177 } 176 }
178 177
179 void WebLayerTreeViewImpl::renderingStats(WebRenderingStats& stats) const 178 void WebLayerTreeViewImpl::setDeferCommits(bool defer_commits) {
180 { 179 layer_tree_host_->setDeferCommits(defer_commits);
181 m_layerTreeHost->renderingStats( 180 }
182 &static_cast<WebRenderingStatsImpl&>(stats).rendering_stats); 181
183 } 182 void WebLayerTreeViewImpl::renderingStats(WebRenderingStats& stats) const {
184 183 layer_tree_host_->renderingStats(
185 void WebLayerTreeViewImpl::setShowFPSCounter(bool show) 184 &static_cast<WebRenderingStatsImpl&>(stats).rendering_stats);
186 { 185 }
187 LayerTreeDebugState debugState = m_layerTreeHost->debugState(); 186
188 debugState.showFPSCounter = show; 187 void WebLayerTreeViewImpl::setShowFPSCounter(bool show) {
189 m_layerTreeHost->setDebugState(debugState); 188 cc::LayerTreeDebugState debug_state = layer_tree_host_->debugState();
190 } 189 debug_state.showFPSCounter = show;
191 190 layer_tree_host_->setDebugState(debug_state);
192 void WebLayerTreeViewImpl::setShowPaintRects(bool show) 191 }
193 { 192
194 LayerTreeDebugState debugState = m_layerTreeHost->debugState(); 193 void WebLayerTreeViewImpl::setShowPaintRects(bool show) {
195 debugState.showPaintRects = show; 194 cc::LayerTreeDebugState debug_state = layer_tree_host_->debugState();
196 m_layerTreeHost->setDebugState(debugState); 195 debug_state.showPaintRects = show;
197 } 196 layer_tree_host_->setDebugState(debug_state);
198 197 }
199 void WebLayerTreeViewImpl::setContinuousPaintingEnabled(bool enabled) 198
200 { 199 void WebLayerTreeViewImpl::setContinuousPaintingEnabled(bool enabled) {
201 LayerTreeDebugState debugState = m_layerTreeHost->debugState(); 200 cc::LayerTreeDebugState debug_state = layer_tree_host_->debugState();
202 debugState.continuousPainting = enabled; 201 debug_state.continuousPainting = enabled;
203 m_layerTreeHost->setDebugState(debugState); 202 layer_tree_host_->setDebugState(debug_state);
204 } 203 }
205 204
206 scoped_ptr<FontAtlas> WebLayerTreeViewImpl::createFontAtlas() 205 scoped_ptr<cc::FontAtlas> WebLayerTreeViewImpl::createFontAtlas() {
207 { 206 int font_height;
208 int fontHeight; 207 WebRect ascii_to_web_rect_table[128];
209 WebRect asciiToWebRectTable[128]; 208 gfx::Rect ascii_to_rect_table[128];
210 gfx::Rect asciiToRectTable[128]; 209 SkBitmap bitmap;
211 SkBitmap bitmap; 210
212 211 client_->createFontAtlas(bitmap, ascii_to_web_rect_table, font_height);
213 m_client->createFontAtlas(bitmap, asciiToWebRectTable, fontHeight); 212
214 213 for (int i = 0; i < 128; ++i)
215 for (int i = 0; i < 128; ++i) 214 ascii_to_rect_table[i] = ascii_to_web_rect_table[i];
216 asciiToRectTable[i] = asciiToWebRectTable[i]; 215
217 216 return cc::FontAtlas::create(bitmap, ascii_to_rect_table, font_height).Pass();
218 return FontAtlas::create(bitmap, asciiToRectTable, fontHeight).Pass(); 217 }
219 } 218
220 219 void WebLayerTreeViewImpl::willBeginFrame() {
221 void WebLayerTreeViewImpl::willBeginFrame() 220 client_->willBeginFrame();
222 { 221 }
223 m_client->willBeginFrame(); 222
224 } 223 void WebLayerTreeViewImpl::didBeginFrame() {
225 224 client_->didBeginFrame();
226 void WebLayerTreeViewImpl::didBeginFrame() 225 }
227 { 226
228 m_client->didBeginFrame(); 227 void WebLayerTreeViewImpl::animate(double monotonic_frame_begin_time) {
229 } 228 client_->updateAnimations(monotonic_frame_begin_time);
230 229 }
231 void WebLayerTreeViewImpl::animate(double monotonicFrameBeginTime) 230
232 { 231 void WebLayerTreeViewImpl::layout() {
233 m_client->updateAnimations(monotonicFrameBeginTime); 232 client_->layout();
234 } 233 }
235 234
236 void WebLayerTreeViewImpl::layout() 235 void WebLayerTreeViewImpl::applyScrollAndScale(gfx::Vector2d scroll_delta,
237 { 236 float page_scale) {
238 m_client->layout(); 237 client_->applyScrollAndScale(scroll_delta, page_scale);
239 } 238 }
240 239
241 void WebLayerTreeViewImpl::applyScrollAndScale(gfx::Vector2d scrollDelta, float pageScale) 240 scoped_ptr<cc::OutputSurface> WebLayerTreeViewImpl::createOutputSurface() {
242 { 241 WebKit::WebCompositorOutputSurface* web = client_->createOutputSurface();
243 m_client->applyScrollAndScale(scrollDelta, pageScale); 242 return make_scoped_ptr(static_cast<cc::OutputSurface*>(web));
244 } 243 }
245 244
246 scoped_ptr<cc::OutputSurface> WebLayerTreeViewImpl::createOutputSurface() 245 void WebLayerTreeViewImpl::didRecreateOutputSurface(bool success) {
247 { 246 client_->didRecreateOutputSurface(success);
248 WebKit::WebCompositorOutputSurface* web = m_client->createOutputSurface(); 247 }
249 return make_scoped_ptr(static_cast<cc::OutputSurface*>(web)); 248
250 } 249 scoped_ptr<cc::InputHandler> WebLayerTreeViewImpl::createInputHandler() {
251 250 scoped_ptr<cc::InputHandler> ret;
252 void WebLayerTreeViewImpl::didRecreateOutputSurface(bool success) 251 scoped_ptr<WebInputHandler> handler(client_->createInputHandler());
253 { 252 if (handler)
254 m_client->didRecreateOutputSurface(success); 253 ret = WebToCCInputHandlerAdapter::create(handler.Pass());
255 } 254 return ret.Pass();
256 255 }
257 scoped_ptr<InputHandler> WebLayerTreeViewImpl::createInputHandler() 256
258 { 257 void WebLayerTreeViewImpl::willCommit() {
259 scoped_ptr<InputHandler> ret; 258 client_->willCommit();
260 scoped_ptr<WebInputHandler> handler(m_client->createInputHandler()); 259 }
261 if (handler) 260
262 ret = WebToCCInputHandlerAdapter::create(handler.Pass()); 261 void WebLayerTreeViewImpl::didCommit() {
263 return ret.Pass(); 262 client_->didCommit();
264 } 263 }
265 264
266 void WebLayerTreeViewImpl::willCommit() 265 void WebLayerTreeViewImpl::didCommitAndDrawFrame() {
267 { 266 client_->didCommitAndDrawFrame();
268 m_client->willCommit(); 267 }
269 } 268
270 269 void WebLayerTreeViewImpl::didCompleteSwapBuffers() {
271 void WebLayerTreeViewImpl::didCommit() 270 client_->didCompleteSwapBuffers();
272 { 271 }
273 m_client->didCommit(); 272
274 } 273 void WebLayerTreeViewImpl::scheduleComposite() {
275 274 client_->scheduleComposite();
276 void WebLayerTreeViewImpl::didCommitAndDrawFrame() 275 }
277 { 276
278 m_client->didCommitAndDrawFrame(); 277 } // namespace WebKit
279 }
280
281 void WebLayerTreeViewImpl::didCompleteSwapBuffers()
282 {
283 m_client->didCompleteSwapBuffers();
284 }
285
286 void WebLayerTreeViewImpl::scheduleComposite()
287 {
288 m_client->scheduleComposite();
289 }
290
291 } // namespace WebKit
OLDNEW
« content/renderer/render_widget.cc ('K') | « webkit/compositor_bindings/web_layer_tree_view_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698