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

Side by Side Diff: ui/compositor/compositor.h

Issue 2563783002: ui + mus: Split ContextFactory into ContextFactory(Client) and ContextFactoryPrivate (Closed)
Patch Set: Restore mash Created 4 years 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
« no previous file with comments | « ui/aura/window_tree_host.cc ('k') | ui/compositor/compositor.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 // Notifies that the ContextProvider returned from 79 // Notifies that the ContextProvider returned from
80 // ui::ContextFactory::SharedMainThreadContextProvider was lost. When this 80 // ui::ContextFactory::SharedMainThreadContextProvider was lost. When this
81 // is called, the old resources (e.g. shared context, GL helper) still 81 // is called, the old resources (e.g. shared context, GL helper) still
82 // exist, but are about to be destroyed. Getting a reference to those 82 // exist, but are about to be destroyed. Getting a reference to those
83 // resources from the ContextFactory (e.g. through 83 // resources from the ContextFactory (e.g. through
84 // SharedMainThreadContextProvider()) will return newly recreated, valid 84 // SharedMainThreadContextProvider()) will return newly recreated, valid
85 // resources. 85 // resources.
86 virtual void OnLostResources() = 0; 86 virtual void OnLostResources() = 0;
87 }; 87 };
88 88
89 // This class abstracts the creation of the 3D context for the compositor. It is 89 // This is privileged interface to the compositor. It is a global object.
90 // a global object. 90 class COMPOSITOR_EXPORT ContextFactoryPrivate {
91 class COMPOSITOR_EXPORT ContextFactory {
92 public: 91 public:
93 virtual ~ContextFactory() {}
94
95 // Creates an output surface for the given compositor. The factory may keep
96 // per-compositor data (e.g. a shared context), that needs to be cleaned up
97 // by calling RemoveCompositor when the compositor gets destroyed.
98 virtual void CreateCompositorFrameSink(
99 base::WeakPtr<Compositor> compositor) = 0;
100
101 // Creates a reflector that copies the content of the |mirrored_compositor| 92 // Creates a reflector that copies the content of the |mirrored_compositor|
102 // onto |mirroring_layer|. 93 // onto |mirroring_layer|.
103 virtual std::unique_ptr<Reflector> CreateReflector( 94 virtual std::unique_ptr<Reflector> CreateReflector(
104 Compositor* mirrored_compositor, 95 Compositor* mirrored_compositor,
105 Layer* mirroring_layer) = 0; 96 Layer* mirroring_layer) = 0;
97
106 // Removes the reflector, which stops the mirroring. 98 // Removes the reflector, which stops the mirroring.
107 virtual void RemoveReflector(Reflector* reflector) = 0; 99 virtual void RemoveReflector(Reflector* reflector) = 0;
108 100
109 // Return a reference to a shared offscreen context provider usable from the
110 // main thread.
111 virtual scoped_refptr<cc::ContextProvider>
112 SharedMainThreadContextProvider() = 0;
113
114 // Destroys per-compositor data.
115 virtual void RemoveCompositor(Compositor* compositor) = 0;
116
117 // When true, the factory uses test contexts that do not do real GL
118 // operations.
119 virtual bool DoesCreateTestContexts() = 0;
120
121 // Returns the OpenGL target to use for image textures.
122 virtual uint32_t GetImageTextureTarget(gfx::BufferFormat format,
123 gfx::BufferUsage usage) = 0;
124
125 // Gets the GPU memory buffer manager.
126 virtual gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() = 0;
127
128 // Gets the task graph runner.
129 virtual cc::TaskGraphRunner* GetTaskGraphRunner() = 0;
130
131 // Allocate a new client ID for the display compositor. 101 // Allocate a new client ID for the display compositor.
132 virtual cc::FrameSinkId AllocateFrameSinkId() = 0; 102 virtual cc::FrameSinkId AllocateFrameSinkId() = 0;
133 103
134 // Gets the surface manager. 104 // Gets the surface manager.
135 virtual cc::SurfaceManager* GetSurfaceManager() = 0; 105 virtual cc::SurfaceManager* GetSurfaceManager() = 0;
136 106
137 // Inform the display corresponding to this compositor if it is visible. When 107 // Inform the display corresponding to this compositor if it is visible. When
138 // false it does not need to produce any frames. Visibility is reset for each 108 // false it does not need to produce any frames. Visibility is reset for each
139 // call to CreateCompositorFrameSink. 109 // call to CreateCompositorFrameSink.
140 virtual void SetDisplayVisible(ui::Compositor* compositor, bool visible) = 0; 110 virtual void SetDisplayVisible(ui::Compositor* compositor, bool visible) = 0;
141 111
142 // Resize the display corresponding to this compositor to a particular size. 112 // Resize the display corresponding to this compositor to a particular size.
143 virtual void ResizeDisplay(ui::Compositor* compositor, 113 virtual void ResizeDisplay(ui::Compositor* compositor,
144 const gfx::Size& size) = 0; 114 const gfx::Size& size) = 0;
145 115
146 // Set the output color profile into which this compositor should render. 116 // Set the output color profile into which this compositor should render.
147 virtual void SetDisplayColorSpace(ui::Compositor* compositor, 117 virtual void SetDisplayColorSpace(ui::Compositor* compositor,
148 const gfx::ColorSpace& color_space) = 0; 118 const gfx::ColorSpace& color_space) = 0;
149 119
150 virtual void SetAuthoritativeVSyncInterval(ui::Compositor* compositor, 120 virtual void SetAuthoritativeVSyncInterval(ui::Compositor* compositor,
151 base::TimeDelta interval) = 0; 121 base::TimeDelta interval) = 0;
152 // Mac path for transporting vsync parameters to the display. Other platforms 122 // Mac path for transporting vsync parameters to the display. Other platforms
153 // update it via the BrowserCompositorCompositorFrameSink directly. 123 // update it via the BrowserCompositorCompositorFrameSink directly.
154 virtual void SetDisplayVSyncParameters(ui::Compositor* compositor, 124 virtual void SetDisplayVSyncParameters(ui::Compositor* compositor,
155 base::TimeTicks timebase, 125 base::TimeTicks timebase,
156 base::TimeDelta interval) = 0; 126 base::TimeDelta interval) = 0;
157 127
158 virtual void SetOutputIsSecure(Compositor* compositor, bool secure) = 0; 128 virtual void SetOutputIsSecure(Compositor* compositor, bool secure) = 0;
129 };
130
131 // This class abstracts the creation of the 3D context for the compositor. It is
132 // a global object.
133 class COMPOSITOR_EXPORT ContextFactory {
134 public:
135 virtual ~ContextFactory() {}
136
137 // Creates an output surface for the given compositor. The factory may keep
138 // per-compositor data (e.g. a shared context), that needs to be cleaned up
139 // by calling RemoveCompositor when the compositor gets destroyed.
140 virtual void CreateCompositorFrameSink(
141 base::WeakPtr<Compositor> compositor) = 0;
142
143 // Return a reference to a shared offscreen context provider usable from the
144 // main thread.
145 virtual scoped_refptr<cc::ContextProvider>
146 SharedMainThreadContextProvider() = 0;
147
148 // Destroys per-compositor data.
149 virtual void RemoveCompositor(Compositor* compositor) = 0;
150
151 // When true, the factory uses test contexts that do not do real GL
152 // operations.
153 virtual bool DoesCreateTestContexts() = 0;
154
155 // Returns the OpenGL target to use for image textures.
156 virtual uint32_t GetImageTextureTarget(gfx::BufferFormat format,
157 gfx::BufferUsage usage) = 0;
158
159 // Gets the GPU memory buffer manager.
160 virtual gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() = 0;
161
162 // Gets the task graph runner.
163 virtual cc::TaskGraphRunner* GetTaskGraphRunner() = 0;
159 164
160 virtual void AddObserver(ContextFactoryObserver* observer) = 0; 165 virtual void AddObserver(ContextFactoryObserver* observer) = 0;
161 166
162 virtual void RemoveObserver(ContextFactoryObserver* observer) = 0; 167 virtual void RemoveObserver(ContextFactoryObserver* observer) = 0;
163 }; 168 };
164 169
165 // This class represents a lock on the compositor, that can be used to prevent 170 // This class represents a lock on the compositor, that can be used to prevent
166 // commits to the compositor tree while we're waiting for an asynchronous 171 // commits to the compositor tree while we're waiting for an asynchronous
167 // event. The typical use case is when waiting for a renderer to produce a frame 172 // event. The typical use case is when waiting for a renderer to produce a frame
168 // at the right size. The caller keeps a reference on this object, and drops the 173 // at the right size. The caller keeps a reference on this object, and drops the
(...skipping 22 matching lines...) Expand all
191 // Compositor object to take care of GPU painting. 196 // Compositor object to take care of GPU painting.
192 // A Browser compositor object is responsible for generating the final 197 // A Browser compositor object is responsible for generating the final
193 // displayable form of pixels comprising a single widget's contents. It draws an 198 // displayable form of pixels comprising a single widget's contents. It draws an
194 // appropriately transformed texture for each transformed view in the widget's 199 // appropriately transformed texture for each transformed view in the widget's
195 // view hierarchy. 200 // view hierarchy.
196 class COMPOSITOR_EXPORT Compositor 201 class COMPOSITOR_EXPORT Compositor
197 : NON_EXPORTED_BASE(public cc::LayerTreeHostClient), 202 : NON_EXPORTED_BASE(public cc::LayerTreeHostClient),
198 NON_EXPORTED_BASE(public cc::LayerTreeHostSingleThreadClient) { 203 NON_EXPORTED_BASE(public cc::LayerTreeHostSingleThreadClient) {
199 public: 204 public:
200 Compositor(ui::ContextFactory* context_factory, 205 Compositor(ui::ContextFactory* context_factory,
206 ui::ContextFactoryPrivate* context_factory_private,
201 scoped_refptr<base::SingleThreadTaskRunner> task_runner); 207 scoped_refptr<base::SingleThreadTaskRunner> task_runner);
202 ~Compositor() override; 208 ~Compositor() override;
203 209
204 ui::ContextFactory* context_factory() { return context_factory_; } 210 ui::ContextFactory* context_factory() { return context_factory_; }
205 211
212 ui::ContextFactoryPrivate* context_factory_private() {
213 return context_factory_private_;
214 }
215
206 void AddFrameSink(const cc::FrameSinkId& frame_sink_id); 216 void AddFrameSink(const cc::FrameSinkId& frame_sink_id);
207 void RemoveFrameSink(const cc::FrameSinkId& frame_sink_id); 217 void RemoveFrameSink(const cc::FrameSinkId& frame_sink_id);
208 218
209 void SetCompositorFrameSink(std::unique_ptr<cc::CompositorFrameSink> surface); 219 void SetCompositorFrameSink(std::unique_ptr<cc::CompositorFrameSink> surface);
210 220
211 // Schedules a redraw of the layer tree associated with this compositor. 221 // Schedules a redraw of the layer tree associated with this compositor.
212 void ScheduleDraw(); 222 void ScheduleDraw();
213 223
214 // Sets the root of the layer tree drawn by this Compositor. The root layer 224 // Sets the root of the layer tree drawn by this Compositor. The root layer
215 // must have no parent. The compositor's root layer is reset if the root layer 225 // must have no parent. The compositor's root layer is reset if the root layer
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 395
386 // Called by CompositorLock. 396 // Called by CompositorLock.
387 void UnlockCompositor(); 397 void UnlockCompositor();
388 398
389 // Called to release any pending CompositorLock 399 // Called to release any pending CompositorLock
390 void CancelCompositorLock(); 400 void CancelCompositorLock();
391 401
392 gfx::Size size_; 402 gfx::Size size_;
393 403
394 ui::ContextFactory* context_factory_; 404 ui::ContextFactory* context_factory_;
405 ui::ContextFactoryPrivate* context_factory_private_;
395 406
396 // The root of the Layer tree drawn by this compositor. 407 // The root of the Layer tree drawn by this compositor.
397 Layer* root_layer_; 408 Layer* root_layer_;
398 409
399 base::ObserverList<CompositorObserver, true> observer_list_; 410 base::ObserverList<CompositorObserver, true> observer_list_;
400 base::ObserverList<CompositorAnimationObserver> animation_observer_list_; 411 base::ObserverList<CompositorAnimationObserver> animation_observer_list_;
401 412
402 gfx::AcceleratedWidget widget_; 413 gfx::AcceleratedWidget widget_;
403 #if defined(USE_AURA) 414 #if defined(USE_AURA)
404 ui::Window* window_; 415 ui::Window* window_;
(...skipping 24 matching lines...) Expand all
429 gfx::ColorSpace color_space_; 440 gfx::ColorSpace color_space_;
430 441
431 base::WeakPtrFactory<Compositor> weak_ptr_factory_; 442 base::WeakPtrFactory<Compositor> weak_ptr_factory_;
432 443
433 DISALLOW_COPY_AND_ASSIGN(Compositor); 444 DISALLOW_COPY_AND_ASSIGN(Compositor);
434 }; 445 };
435 446
436 } // namespace ui 447 } // namespace ui
437 448
438 #endif // UI_COMPOSITOR_COMPOSITOR_H_ 449 #endif // UI_COMPOSITOR_COMPOSITOR_H_
OLDNEW
« no previous file with comments | « ui/aura/window_tree_host.cc ('k') | ui/compositor/compositor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698