| 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); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 ObserverList<CompositorObserver> observer_list_; | 233 ObserverList<CompositorObserver> observer_list_; |
| 231 | 234 |
| 232 gfx::AcceleratedWidget widget_; | 235 gfx::AcceleratedWidget widget_; |
| 233 WebKit::WebLayer root_web_layer_; | 236 WebKit::WebLayer root_web_layer_; |
| 234 WebKit::WebLayerTreeView host_; | 237 WebKit::WebLayerTreeView host_; |
| 235 | 238 |
| 236 // This is set to true when the swap buffers has been posted and we're waiting | 239 // This is set to true when the swap buffers has been posted and we're waiting |
| 237 // for completion. | 240 // for completion. |
| 238 bool swap_posted_; | 241 bool swap_posted_; |
| 239 | 242 |
| 243 // The device scale factor of the monitor that this compositor is compositing |
| 244 // layers on. |
| 245 float device_scale_factor_; |
| 246 |
| 240 friend class base::RefCounted<Compositor>; | 247 friend class base::RefCounted<Compositor>; |
| 241 }; | 248 }; |
| 242 | 249 |
| 243 } // namespace ui | 250 } // namespace ui |
| 244 | 251 |
| 245 #endif // UI_GFX_COMPOSITOR_COMPOSITOR_H_ | 252 #endif // UI_GFX_COMPOSITOR_COMPOSITOR_H_ |
| OLD | NEW |