OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef UI_COMPOSITOR_COMPOSITOR_H_ | 5 #ifndef UI_COMPOSITOR_COMPOSITOR_H_ |
6 #define UI_COMPOSITOR_COMPOSITOR_H_ | 6 #define UI_COMPOSITOR_COMPOSITOR_H_ |
7 | 7 |
8 #include "base/hash_tables.h" | 8 #include "base/hash_tables.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
11 #include "base/observer_list.h" | 11 #include "base/observer_list.h" |
12 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayer.h" | 12 #include "cc/layer_tree_host_client.h" |
13 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeView.h" | |
14 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeViewCli
ent.h" | |
15 #include "ui/compositor/compositor_export.h" | 13 #include "ui/compositor/compositor_export.h" |
16 #include "ui/gfx/native_widget_types.h" | 14 #include "ui/gfx/native_widget_types.h" |
17 #include "ui/gfx/size.h" | 15 #include "ui/gfx/size.h" |
18 #include "ui/gfx/transform.h" | 16 #include "ui/gfx/transform.h" |
19 #include "ui/gl/gl_share_group.h" | 17 #include "ui/gl/gl_share_group.h" |
20 | 18 |
21 class SkBitmap; | 19 class SkBitmap; |
22 | 20 |
| 21 namespace cc { |
| 22 class Layer; |
| 23 class LayerTreeHost; |
| 24 } |
| 25 |
23 namespace gfx { | 26 namespace gfx { |
24 class GLContext; | 27 class GLContext; |
25 class GLSurface; | 28 class GLSurface; |
26 class GLShareGroup; | 29 class GLShareGroup; |
27 class Point; | 30 class Point; |
28 class Rect; | 31 class Rect; |
29 } | 32 } |
30 | 33 |
| 34 namespace WebKit { |
| 35 class WebGraphicsContext3D; |
| 36 } |
| 37 |
31 namespace ui { | 38 namespace ui { |
32 | 39 |
33 class Compositor; | 40 class Compositor; |
34 class CompositorObserver; | 41 class CompositorObserver; |
35 class Layer; | 42 class Layer; |
36 class PostedSwapQueue; | 43 class PostedSwapQueue; |
37 | 44 |
38 // This class abstracts the creation of the 3D context for the compositor. It is | 45 // This class abstracts the creation of the 3D context for the compositor. It is |
39 // a global object. | 46 // a global object. |
40 class COMPOSITOR_EXPORT ContextFactory { | 47 class COMPOSITOR_EXPORT ContextFactory { |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 DISALLOW_COPY_AND_ASSIGN(CompositorLock); | 159 DISALLOW_COPY_AND_ASSIGN(CompositorLock); |
153 }; | 160 }; |
154 | 161 |
155 | 162 |
156 // Compositor object to take care of GPU painting. | 163 // Compositor object to take care of GPU painting. |
157 // A Browser compositor object is responsible for generating the final | 164 // A Browser compositor object is responsible for generating the final |
158 // displayable form of pixels comprising a single widget's contents. It draws an | 165 // displayable form of pixels comprising a single widget's contents. It draws an |
159 // appropriately transformed texture for each transformed view in the widget's | 166 // appropriately transformed texture for each transformed view in the widget's |
160 // view hierarchy. | 167 // view hierarchy. |
161 class COMPOSITOR_EXPORT Compositor | 168 class COMPOSITOR_EXPORT Compositor |
162 : NON_EXPORTED_BASE(public WebKit::WebLayerTreeViewClient) { | 169 : NON_EXPORTED_BASE(public cc::LayerTreeHostClient) { |
163 public: | 170 public: |
164 Compositor(CompositorDelegate* delegate, | 171 Compositor(CompositorDelegate* delegate, |
165 gfx::AcceleratedWidget widget); | 172 gfx::AcceleratedWidget widget); |
166 virtual ~Compositor(); | 173 virtual ~Compositor(); |
167 | 174 |
168 static void Initialize(bool useThread); | 175 static void Initialize(bool useThread); |
169 static void Terminate(); | 176 static void Terminate(); |
170 | 177 |
171 // Schedules a redraw of the layer tree associated with this compositor. | 178 // Schedules a redraw of the layer tree associated with this compositor. |
172 void ScheduleDraw(); | 179 void ScheduleDraw(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 | 235 |
229 // Signals swap has been posted. | 236 // Signals swap has been posted. |
230 void OnSwapBuffersPosted(); | 237 void OnSwapBuffersPosted(); |
231 | 238 |
232 // Signals swap has completed. | 239 // Signals swap has completed. |
233 void OnSwapBuffersComplete(); | 240 void OnSwapBuffersComplete(); |
234 | 241 |
235 // Signals swap has aborted (e.g. lost context). | 242 // Signals swap has aborted (e.g. lost context). |
236 void OnSwapBuffersAborted(); | 243 void OnSwapBuffersAborted(); |
237 | 244 |
238 // WebLayerTreeViewClient implementation. | 245 // LayerTreeHostClient implementation. |
239 virtual void updateAnimations(double frameBeginTime); | 246 virtual void willBeginFrame() OVERRIDE; |
240 virtual void layout(); | 247 virtual void didBeginFrame() OVERRIDE; |
241 virtual void applyScrollAndScale(const WebKit::WebSize& scrollDelta, | 248 virtual void animate(double frameBeginTime) OVERRIDE; |
242 float scaleFactor); | 249 virtual void layout() OVERRIDE; |
243 virtual WebKit::WebCompositorOutputSurface* createOutputSurface(); | 250 virtual void applyScrollAndScale(gfx::Vector2d scrollDelta, |
244 virtual void didRecreateOutputSurface(bool success); | 251 float pageScale) OVERRIDE; |
245 virtual void didCommit(); | 252 virtual scoped_ptr<WebKit::WebCompositorOutputSurface> |
246 virtual void didCommitAndDrawFrame(); | 253 createOutputSurface() OVERRIDE; |
247 virtual void didCompleteSwapBuffers(); | 254 virtual void didRecreateOutputSurface(bool success) OVERRIDE; |
248 virtual void scheduleComposite(); | 255 virtual scoped_ptr<cc::InputHandler> createInputHandler() OVERRIDE; |
| 256 virtual void willCommit() OVERRIDE; |
| 257 virtual void didCommit() OVERRIDE; |
| 258 virtual void didCommitAndDrawFrame() OVERRIDE; |
| 259 virtual void didCompleteSwapBuffers() OVERRIDE; |
| 260 virtual void scheduleComposite() OVERRIDE; |
| 261 |
249 | 262 |
250 int last_started_frame() { return last_started_frame_; } | 263 int last_started_frame() { return last_started_frame_; } |
251 int last_ended_frame() { return last_ended_frame_; } | 264 int last_ended_frame() { return last_ended_frame_; } |
252 | 265 |
253 bool IsLocked() { return compositor_lock_ != NULL; } | 266 bool IsLocked() { return compositor_lock_ != NULL; } |
254 | 267 |
255 private: | 268 private: |
256 friend class base::RefCounted<Compositor>; | 269 friend class base::RefCounted<Compositor>; |
257 friend class CompositorLock; | 270 friend class CompositorLock; |
258 | 271 |
259 // Called by CompositorLock. | 272 // Called by CompositorLock. |
260 void UnlockCompositor(); | 273 void UnlockCompositor(); |
261 | 274 |
262 // Called to release any pending CompositorLock | 275 // Called to release any pending CompositorLock |
263 void CancelCompositorLock(); | 276 void CancelCompositorLock(); |
264 | 277 |
265 // Notifies the compositor that compositing is complete. | 278 // Notifies the compositor that compositing is complete. |
266 void NotifyEnd(); | 279 void NotifyEnd(); |
267 | 280 |
268 CompositorDelegate* delegate_; | 281 CompositorDelegate* delegate_; |
269 gfx::Size size_; | 282 gfx::Size size_; |
270 | 283 |
271 // The root of the Layer tree drawn by this compositor. | 284 // The root of the Layer tree drawn by this compositor. |
272 Layer* root_layer_; | 285 Layer* root_layer_; |
273 | 286 |
274 ObserverList<CompositorObserver> observer_list_; | 287 ObserverList<CompositorObserver> observer_list_; |
275 | 288 |
276 gfx::AcceleratedWidget widget_; | 289 gfx::AcceleratedWidget widget_; |
277 scoped_ptr<WebKit::WebLayer> root_web_layer_; | 290 scoped_refptr<cc::Layer> root_web_layer_; |
278 scoped_ptr<WebKit::WebLayerTreeView> host_; | 291 scoped_ptr<cc::LayerTreeHost> host_; |
279 | 292 |
280 // Used to verify that we have at most one draw swap in flight. | 293 // Used to verify that we have at most one draw swap in flight. |
281 scoped_ptr<PostedSwapQueue> posted_swaps_; | 294 scoped_ptr<PostedSwapQueue> posted_swaps_; |
282 | 295 |
283 // The device scale factor of the monitor that this compositor is compositing | 296 // The device scale factor of the monitor that this compositor is compositing |
284 // layers on. | 297 // layers on. |
285 float device_scale_factor_; | 298 float device_scale_factor_; |
286 | 299 |
287 int last_started_frame_; | 300 int last_started_frame_; |
288 int last_ended_frame_; | 301 int last_ended_frame_; |
289 | 302 |
290 bool disable_schedule_composite_; | 303 bool disable_schedule_composite_; |
291 | 304 |
292 CompositorLock* compositor_lock_; | 305 CompositorLock* compositor_lock_; |
293 | 306 |
294 DISALLOW_COPY_AND_ASSIGN(Compositor); | 307 DISALLOW_COPY_AND_ASSIGN(Compositor); |
295 }; | 308 }; |
296 | 309 |
297 } // namespace ui | 310 } // namespace ui |
298 | 311 |
299 #endif // UI_COMPOSITOR_COMPOSITOR_H_ | 312 #endif // UI_COMPOSITOR_COMPOSITOR_H_ |
OLD | NEW |