Chromium Code Reviews| 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_GFX_COMPOSITOR_COMPOSITOR_H_ | 5 #ifndef UI_GFX_COMPOSITOR_COMPOSITOR_H_ |
| 6 #define UI_GFX_COMPOSITOR_COMPOSITOR_H_ | 6 #define UI_GFX_COMPOSITOR_COMPOSITOR_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/hash_tables.h" | 9 #include "base/hash_tables.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 104 gfx::Size size() const { return size_; } | 104 gfx::Size size() const { return size_; } |
| 105 | 105 |
| 106 protected: | 106 protected: |
| 107 virtual ~Texture(); | 107 virtual ~Texture(); |
| 108 | 108 |
| 109 private: | 109 private: |
| 110 friend class base::RefCounted<Texture>; | 110 friend class base::RefCounted<Texture>; |
| 111 | 111 |
| 112 unsigned int texture_id_; | 112 unsigned int texture_id_; |
| 113 bool flipped_; | 113 bool flipped_; |
| 114 gfx::Size size_; | 114 gfx::Size size_; // in pixel |
| 115 | 115 |
| 116 DISALLOW_COPY_AND_ASSIGN(Texture); | 116 DISALLOW_COPY_AND_ASSIGN(Texture); |
| 117 }; | 117 }; |
| 118 | 118 |
| 119 // An interface to allow the compositor to communicate with its owner. | 119 // An interface to allow the compositor to communicate with its owner. |
| 120 class COMPOSITOR_EXPORT CompositorDelegate { | 120 class COMPOSITOR_EXPORT CompositorDelegate { |
| 121 public: | 121 public: |
| 122 // Requests the owner to schedule a redraw of the layer tree. | 122 // Requests the owner to schedule a redraw of the layer tree. |
| 123 virtual void ScheduleDraw() = 0; | 123 virtual void ScheduleDraw() = 0; |
| 124 | 124 |
| 125 protected: | 125 protected: |
| 126 virtual ~CompositorDelegate() {} | 126 virtual ~CompositorDelegate() {} |
| 127 }; | 127 }; |
| 128 | 128 |
| 129 // Compositor object to take care of GPU painting. | 129 // Compositor object to take care of GPU painting. |
| 130 // A Browser compositor object is responsible for generating the final | 130 // A Browser compositor object is responsible for generating the final |
| 131 // displayable form of pixels comprising a single widget's contents. It draws an | 131 // displayable form of pixels comprising a single widget's contents. It draws an |
| 132 // appropriately transformed texture for each transformed view in the widget's | 132 // appropriately transformed texture for each transformed view in the widget's |
| 133 // view hierarchy. | 133 // view hierarchy. |
| 134 class COMPOSITOR_EXPORT Compositor | 134 class COMPOSITOR_EXPORT Compositor |
| 135 : NON_EXPORTED_BASE(public WebKit::WebLayerTreeViewClient) { | 135 : NON_EXPORTED_BASE(public WebKit::WebLayerTreeViewClient) { |
| 136 public: | 136 public: |
| 137 Compositor(CompositorDelegate* delegate, | 137 Compositor(CompositorDelegate* delegate, |
| 138 gfx::AcceleratedWidget widget, | 138 gfx::AcceleratedWidget widget); |
| 139 const gfx::Size& size); | |
| 140 virtual ~Compositor(); | 139 virtual ~Compositor(); |
| 141 | 140 |
| 142 static void Initialize(bool useThread); | 141 static void Initialize(bool useThread); |
| 143 static void Terminate(); | 142 static void Terminate(); |
| 144 | 143 |
| 145 // Schedules a redraw of the layer tree associated with this compositor. | 144 // Schedules a redraw of the layer tree associated with this compositor. |
| 146 void ScheduleDraw(); | 145 void ScheduleDraw(); |
| 147 | 146 |
| 148 // Sets the root of the layer tree drawn by this Compositor. The root layer | 147 // Sets the root of the layer tree drawn by this Compositor. The root layer |
| 149 // must have no parent. The compositor's root layer is reset if the root layer | 148 // must have no parent. The compositor's root layer is reset if the root layer |
| 150 // is destroyed. NULL can be passed to reset the root layer, in which case the | 149 // is destroyed. NULL can be passed to reset the root layer, in which case the |
| 151 // compositor will stop drawing anything. | 150 // compositor will stop drawing anything. |
| 152 // The Compositor does not own the root layer. | 151 // The Compositor does not own the root layer. |
| 153 const Layer* root_layer() const { return root_layer_; } | 152 const Layer* root_layer() const { return root_layer_; } |
| 154 Layer* root_layer() { return root_layer_; } | 153 Layer* root_layer() { return root_layer_; } |
| 155 void SetRootLayer(Layer* root_layer); | 154 void SetRootLayer(Layer* root_layer); |
| 156 | 155 |
| 156 // The scale factor of the device that this compositor is | |
| 157 // compositing layers on. | |
| 158 float device_scale_factor() const { return device_scale_factor_; } | |
| 159 | |
| 157 // Draws the scene created by the layer tree and any visual effects. If | 160 // Draws the scene created by the layer tree and any visual effects. If |
| 158 // |force_clear| is true, this will cause the compositor to clear before | 161 // |force_clear| is true, this will cause the compositor to clear before |
| 159 // compositing. | 162 // compositing. |
| 160 void Draw(bool force_clear); | 163 void Draw(bool force_clear); |
| 161 | 164 |
| 162 // Where possible, draws are scissored to a damage region calculated from | 165 // Where possible, draws are scissored to a damage region calculated from |
| 163 // changes to layer properties. This bypasses that and indicates that | 166 // changes to layer properties. This bypasses that and indicates that |
| 164 // the whole frame needs to be drawn. | 167 // the whole frame needs to be drawn. |
| 165 void ScheduleFullDraw(); | 168 void ScheduleFullDraw(); |
| 166 | 169 |
| 167 // Reads the region |bounds| of the contents of the last rendered frame | 170 // Reads the region |bounds_in_pixel| of the contents of the last rendered |
| 168 // into the given bitmap. | 171 // frame into the given bitmap. |
| 169 // Returns false if the pixels could not be read. | 172 // Returns false if the pixels could not be read. |
| 170 bool ReadPixels(SkBitmap* bitmap, const gfx::Rect& bounds); | 173 bool ReadPixels(SkBitmap* bitmap, const gfx::Rect& bounds_in_pixel); |
| 171 | 174 |
| 172 // Notifies the compositor that the size of the widget that it is | 175 // Notifies the compositor that the device scale factor and size of |
| 173 // drawing to has changed. | 176 // the widget that it is drawing to has changed. |
| 174 void WidgetSizeChanged(const gfx::Size& size); | 177 void WidgetScaleOrSizeChanged(float scale, const gfx::Size& size_in_pixel); |
| 175 | 178 |
| 176 // Returns the size of the widget that is being drawn to. | 179 // Returns the size of the widget that is being drawn to in pixel coordinates. |
| 177 const gfx::Size& size() const { return size_; } | 180 const gfx::Size& size() const { return size_; } |
| 178 | 181 |
| 179 // Returns the widget for this compositor. | 182 // Returns the widget for this compositor. |
| 180 gfx::AcceleratedWidget widget() const { return widget_; } | 183 gfx::AcceleratedWidget widget() const { return widget_; } |
| 181 | 184 |
| 182 // Compositor does not own observers. It is the responsibility of the | 185 // Compositor does not own observers. It is the responsibility of the |
| 183 // observer to remove itself when it is done observing. | 186 // observer to remove itself when it is done observing. |
| 184 void AddObserver(CompositorObserver* observer); | 187 void AddObserver(CompositorObserver* observer); |
| 185 void RemoveObserver(CompositorObserver* observer); | 188 void RemoveObserver(CompositorObserver* observer); |
| 186 bool HasObserver(CompositorObserver* observer); | 189 bool HasObserver(CompositorObserver* observer); |
| 187 | 190 |
| 188 // Returns whether a draw is pending, that is, if we're between the Draw call | 191 // Returns whether a draw is pending, that is, if we're between the Draw call |
| 189 // and the OnCompositingEnded. | 192 // and the OnCompositingEnded. |
| 190 bool DrawPending() const { return swap_posted_; } | 193 bool DrawPending() const { return swap_posted_; } |
| 191 | 194 |
| 192 // Internal functions, called back by command-buffer contexts on swap buffer | 195 // Internal functions, called back by command-buffer contexts on swap buffer |
| 193 // events. | 196 // events. |
| 194 | 197 |
| 195 // Signals swap has been posted. | 198 // Signals swap has been posted. |
| 196 void OnSwapBuffersPosted(); | 199 void OnSwapBuffersPosted(); |
| 197 | 200 |
| 198 // Signals swap has completed. | 201 // Signals swap has completed. |
| 199 void OnSwapBuffersComplete(); | 202 void OnSwapBuffersComplete(); |
| 200 | 203 |
| 201 // Signals swap has aborted (e.g. lost context). | 204 // Signals swap has aborted (e.g. lost context). |
| 202 void OnSwapBuffersAborted(); | 205 void OnSwapBuffersAborted(); |
| 203 | 206 |
| 207 // Translates |transform| with translate_offset, then apply the | |
| 208 // device scale factor to the all translate operations in the transform. | |
| 209 Transform GetTranslateTransform(const Transform& transform, | |
| 210 const gfx::Point& translate_offset); | |
| 211 | |
| 204 // WebLayerTreeViewClient implementation. | 212 // WebLayerTreeViewClient implementation. |
| 205 virtual void updateAnimations(double frameBeginTime); | 213 virtual void updateAnimations(double frameBeginTime); |
| 206 virtual void layout(); | 214 virtual void layout(); |
| 207 virtual void applyScrollAndScale(const WebKit::WebSize& scrollDelta, | 215 virtual void applyScrollAndScale(const WebKit::WebSize& scrollDelta, |
| 208 float scaleFactor); | 216 float scaleFactor); |
| 209 virtual WebKit::WebGraphicsContext3D* createContext3D(); | 217 virtual WebKit::WebGraphicsContext3D* createContext3D(); |
| 210 virtual void didRebindGraphicsContext(bool success); | 218 virtual void didRebindGraphicsContext(bool success); |
| 211 virtual void didCommitAndDrawFrame(); | 219 virtual void didCommitAndDrawFrame(); |
| 212 virtual void didCompleteSwapBuffers(); | 220 virtual void didCompleteSwapBuffers(); |
| 213 virtual void scheduleComposite(); | 221 virtual void scheduleComposite(); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 230 ObserverList<CompositorObserver> observer_list_; | 238 ObserverList<CompositorObserver> observer_list_; |
| 231 | 239 |
| 232 gfx::AcceleratedWidget widget_; | 240 gfx::AcceleratedWidget widget_; |
| 233 WebKit::WebLayer root_web_layer_; | 241 WebKit::WebLayer root_web_layer_; |
| 234 WebKit::WebLayerTreeView host_; | 242 WebKit::WebLayerTreeView host_; |
| 235 | 243 |
| 236 // This is set to true when the swap buffers has been posted and we're waiting | 244 // This is set to true when the swap buffers has been posted and we're waiting |
| 237 // for completion. | 245 // for completion. |
| 238 bool swap_posted_; | 246 bool swap_posted_; |
| 239 | 247 |
| 248 float device_scale_factor_; | |
| 249 | |
| 250 // Transforms to scale the translation in |transform_|. | |
| 251 Transform scale_translate_; | |
| 252 Transform invese_scale_translate_; | |
|
piman
2012/05/04 18:46:06
nit: invese->inverse
| |
| 253 | |
| 240 friend class base::RefCounted<Compositor>; | 254 friend class base::RefCounted<Compositor>; |
| 241 }; | 255 }; |
| 242 | 256 |
| 243 } // namespace ui | 257 } // namespace ui |
| 244 | 258 |
| 245 #endif // UI_GFX_COMPOSITOR_COMPOSITOR_H_ | 259 #endif // UI_GFX_COMPOSITOR_COMPOSITOR_H_ |
| OLD | NEW |