Index: ui/gfx/compositor/compositor.h |
diff --git a/ui/gfx/compositor/compositor.h b/ui/gfx/compositor/compositor.h |
deleted file mode 100644 |
index 9475cf62445acfe2de8b85b8450cbaba2fe1cf07..0000000000000000000000000000000000000000 |
--- a/ui/gfx/compositor/compositor.h |
+++ /dev/null |
@@ -1,245 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef UI_GFX_COMPOSITOR_COMPOSITOR_H_ |
-#define UI_GFX_COMPOSITOR_COMPOSITOR_H_ |
-#pragma once |
- |
-#include "base/hash_tables.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/observer_list.h" |
-#include "third_party/WebKit/Source/Platform/chromium/public/WebLayer.h" |
-#include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeView.h" |
-#include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeViewClient.h" |
-#include "ui/gfx/compositor/compositor_export.h" |
-#include "ui/gfx/gl/gl_share_group.h" |
-#include "ui/gfx/native_widget_types.h" |
-#include "ui/gfx/size.h" |
-#include "ui/gfx/transform.h" |
- |
- |
-class SkBitmap; |
-namespace gfx { |
-class GLContext; |
-class GLSurface; |
-class GLShareGroup; |
-class Point; |
-class Rect; |
-} |
- |
-namespace ui { |
- |
-class Compositor; |
-class CompositorObserver; |
-class Layer; |
- |
-// This class abstracts the creation of the 3D context for the compositor. It is |
-// a global object. |
-class COMPOSITOR_EXPORT ContextFactory { |
- public: |
- virtual ~ContextFactory() {} |
- |
- // Gets the global instance. |
- static ContextFactory* GetInstance(); |
- |
- // Sets the global instance. Caller keeps ownership. |
- // If this function isn't called (for tests), a "default" factory will be |
- // created on the first call of GetInstance. |
- static void SetInstance(ContextFactory* instance); |
- |
- // Creates a context for given compositor. The factory may keep per-compositor |
- // data (e.g. a shared context), that needs to be cleaned up by calling |
- // RemoveCompositor when the compositor gets destroyed. |
- virtual WebKit::WebGraphicsContext3D* CreateContext( |
- Compositor* compositor) = 0; |
- |
- // Creates a context for given compositor used for offscreen rendering. See |
- // the comments of CreateContext to know how per-compositor data is handled. |
- virtual WebKit::WebGraphicsContext3D* CreateOffscreenContext( |
- Compositor* compositor) = 0; |
- |
- // Destroys per-compositor data. |
- virtual void RemoveCompositor(Compositor* compositor) = 0; |
-}; |
- |
-// The default factory that creates in-process contexts. |
-class COMPOSITOR_EXPORT DefaultContextFactory : public ContextFactory { |
- public: |
- DefaultContextFactory(); |
- virtual ~DefaultContextFactory(); |
- |
- // ContextFactory implementation |
- virtual WebKit::WebGraphicsContext3D* CreateContext( |
- Compositor* compositor) OVERRIDE; |
- virtual WebKit::WebGraphicsContext3D* CreateOffscreenContext( |
- Compositor* compositor) OVERRIDE; |
- virtual void RemoveCompositor(Compositor* compositor) OVERRIDE; |
- |
- bool Initialize(); |
- |
- void set_share_group(gfx::GLShareGroup* share_group) { |
- share_group_ = share_group; |
- } |
- |
- private: |
- WebKit::WebGraphicsContext3D* CreateContextCommon( |
- Compositor* compositor, |
- bool offscreen); |
- |
- scoped_refptr<gfx::GLShareGroup> share_group_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DefaultContextFactory); |
-}; |
- |
-// Texture provide an abstraction over the external texture that can be passed |
-// to a layer. |
-class COMPOSITOR_EXPORT Texture : public base::RefCounted<Texture> { |
- public: |
- Texture(bool flipped, const gfx::Size& size); |
- |
- unsigned int texture_id() const { return texture_id_; } |
- void set_texture_id(unsigned int id) { texture_id_ = id; } |
- bool flipped() const { return flipped_; } |
- gfx::Size size() const { return size_; } |
- |
- protected: |
- virtual ~Texture(); |
- |
- private: |
- friend class base::RefCounted<Texture>; |
- |
- unsigned int texture_id_; |
- bool flipped_; |
- gfx::Size size_; |
- |
- DISALLOW_COPY_AND_ASSIGN(Texture); |
-}; |
- |
-// An interface to allow the compositor to communicate with its owner. |
-class COMPOSITOR_EXPORT CompositorDelegate { |
- public: |
- // Requests the owner to schedule a redraw of the layer tree. |
- virtual void ScheduleDraw() = 0; |
- |
- protected: |
- virtual ~CompositorDelegate() {} |
-}; |
- |
-// Compositor object to take care of GPU painting. |
-// A Browser compositor object is responsible for generating the final |
-// displayable form of pixels comprising a single widget's contents. It draws an |
-// appropriately transformed texture for each transformed view in the widget's |
-// view hierarchy. |
-class COMPOSITOR_EXPORT Compositor |
- : NON_EXPORTED_BASE(public WebKit::WebLayerTreeViewClient) { |
- public: |
- Compositor(CompositorDelegate* delegate, |
- gfx::AcceleratedWidget widget, |
- const gfx::Size& size); |
- virtual ~Compositor(); |
- |
- static void Initialize(bool useThread); |
- static void Terminate(); |
- |
- // Schedules a redraw of the layer tree associated with this compositor. |
- void ScheduleDraw(); |
- |
- // Sets the root of the layer tree drawn by this Compositor. The root layer |
- // must have no parent. The compositor's root layer is reset if the root layer |
- // is destroyed. NULL can be passed to reset the root layer, in which case the |
- // compositor will stop drawing anything. |
- // The Compositor does not own the root layer. |
- const Layer* root_layer() const { return root_layer_; } |
- Layer* root_layer() { return root_layer_; } |
- void SetRootLayer(Layer* root_layer); |
- |
- // Draws the scene created by the layer tree and any visual effects. If |
- // |force_clear| is true, this will cause the compositor to clear before |
- // compositing. |
- void Draw(bool force_clear); |
- |
- // Where possible, draws are scissored to a damage region calculated from |
- // changes to layer properties. This bypasses that and indicates that |
- // the whole frame needs to be drawn. |
- void ScheduleFullDraw(); |
- |
- // Reads the region |bounds| of the contents of the last rendered frame |
- // into the given bitmap. |
- // Returns false if the pixels could not be read. |
- bool ReadPixels(SkBitmap* bitmap, const gfx::Rect& bounds); |
- |
- // Notifies the compositor that the size of the widget that it is |
- // drawing to has changed. |
- void WidgetSizeChanged(const gfx::Size& size); |
- |
- // Returns the size of the widget that is being drawn to. |
- const gfx::Size& size() const { return size_; } |
- |
- // Returns the widget for this compositor. |
- gfx::AcceleratedWidget widget() const { return widget_; } |
- |
- // Compositor does not own observers. It is the responsibility of the |
- // observer to remove itself when it is done observing. |
- void AddObserver(CompositorObserver* observer); |
- void RemoveObserver(CompositorObserver* observer); |
- bool HasObserver(CompositorObserver* observer); |
- |
- // Returns whether a draw is pending, that is, if we're between the Draw call |
- // and the OnCompositingEnded. |
- bool DrawPending() const { return swap_posted_; } |
- |
- // Internal functions, called back by command-buffer contexts on swap buffer |
- // events. |
- |
- // Signals swap has been posted. |
- void OnSwapBuffersPosted(); |
- |
- // Signals swap has completed. |
- void OnSwapBuffersComplete(); |
- |
- // Signals swap has aborted (e.g. lost context). |
- void OnSwapBuffersAborted(); |
- |
- // WebLayerTreeViewClient implementation. |
- virtual void updateAnimations(double frameBeginTime); |
- virtual void layout(); |
- virtual void applyScrollAndScale(const WebKit::WebSize& scrollDelta, |
- float scaleFactor); |
- virtual WebKit::WebGraphicsContext3D* createContext3D(); |
- virtual void didRebindGraphicsContext(bool success); |
- virtual void didCommitAndDrawFrame(); |
- virtual void didCompleteSwapBuffers(); |
- virtual void scheduleComposite(); |
- |
- private: |
- // When reading back pixel data we often get RGBA rather than BGRA pixels and |
- // and the image often needs to be flipped vertically. |
- static void SwizzleRGBAToBGRAAndFlip(unsigned char* pixels, |
- const gfx::Size& image_size); |
- |
- // Notifies the compositor that compositing is complete. |
- void NotifyEnd(); |
- |
- CompositorDelegate* delegate_; |
- gfx::Size size_; |
- |
- // The root of the Layer tree drawn by this compositor. |
- Layer* root_layer_; |
- |
- ObserverList<CompositorObserver> observer_list_; |
- |
- gfx::AcceleratedWidget widget_; |
- WebKit::WebLayer root_web_layer_; |
- WebKit::WebLayerTreeView host_; |
- |
- // This is set to true when the swap buffers has been posted and we're waiting |
- // for completion. |
- bool swap_posted_; |
- |
- friend class base::RefCounted<Compositor>; |
-}; |
- |
-} // namespace ui |
- |
-#endif // UI_GFX_COMPOSITOR_COMPOSITOR_H_ |