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

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

Issue 2337913003: Fork cc::OutputSurface into cc::CompositorFrameSink. (Closed)
Patch Set: cfsfork: android-vulkan Created 4 years, 3 months 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/android/delegated_frame_host_android.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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 // This class abstracts the creation of the 3D context for the compositor. It is 93 // This class abstracts the creation of the 3D context for the compositor. It is
94 // a global object. 94 // a global object.
95 class COMPOSITOR_EXPORT ContextFactory { 95 class COMPOSITOR_EXPORT ContextFactory {
96 public: 96 public:
97 virtual ~ContextFactory() {} 97 virtual ~ContextFactory() {}
98 98
99 // Creates an output surface for the given compositor. The factory may keep 99 // Creates an output surface for the given compositor. The factory may keep
100 // per-compositor data (e.g. a shared context), that needs to be cleaned up 100 // per-compositor data (e.g. a shared context), that needs to be cleaned up
101 // by calling RemoveCompositor when the compositor gets destroyed. 101 // by calling RemoveCompositor when the compositor gets destroyed.
102 virtual void CreateOutputSurface(base::WeakPtr<Compositor> compositor) = 0; 102 virtual void CreateCompositorFrameSink(
103 base::WeakPtr<Compositor> compositor) = 0;
103 104
104 // Creates a reflector that copies the content of the |mirrored_compositor| 105 // Creates a reflector that copies the content of the |mirrored_compositor|
105 // onto |mirroring_layer|. 106 // onto |mirroring_layer|.
106 virtual std::unique_ptr<Reflector> CreateReflector( 107 virtual std::unique_ptr<Reflector> CreateReflector(
107 Compositor* mirrored_compositor, 108 Compositor* mirrored_compositor,
108 Layer* mirroring_layer) = 0; 109 Layer* mirroring_layer) = 0;
109 // Removes the reflector, which stops the mirroring. 110 // Removes the reflector, which stops the mirroring.
110 virtual void RemoveReflector(Reflector* reflector) = 0; 111 virtual void RemoveReflector(Reflector* reflector) = 0;
111 112
112 // Return a reference to a shared offscreen context provider usable from the 113 // Return a reference to a shared offscreen context provider usable from the
(...skipping 22 matching lines...) Expand all
135 virtual cc::TaskGraphRunner* GetTaskGraphRunner() = 0; 136 virtual cc::TaskGraphRunner* GetTaskGraphRunner() = 0;
136 137
137 // Allocate a new client ID for the display compositor. 138 // Allocate a new client ID for the display compositor.
138 virtual uint32_t AllocateSurfaceClientId() = 0; 139 virtual uint32_t AllocateSurfaceClientId() = 0;
139 140
140 // Gets the surface manager. 141 // Gets the surface manager.
141 virtual cc::SurfaceManager* GetSurfaceManager() = 0; 142 virtual cc::SurfaceManager* GetSurfaceManager() = 0;
142 143
143 // Inform the display corresponding to this compositor if it is visible. When 144 // Inform the display corresponding to this compositor if it is visible. When
144 // false it does not need to produce any frames. Visibility is reset for each 145 // false it does not need to produce any frames. Visibility is reset for each
145 // call to CreateOutputSurface. 146 // call to CreateCompositorFrameSink.
146 virtual void SetDisplayVisible(ui::Compositor* compositor, bool visible) = 0; 147 virtual void SetDisplayVisible(ui::Compositor* compositor, bool visible) = 0;
147 148
148 // Resize the display corresponding to this compositor to a particular size. 149 // Resize the display corresponding to this compositor to a particular size.
149 virtual void ResizeDisplay(ui::Compositor* compositor, 150 virtual void ResizeDisplay(ui::Compositor* compositor,
150 const gfx::Size& size) = 0; 151 const gfx::Size& size) = 0;
151 152
152 // Set the output color profile into which this compositor should render. 153 // Set the output color profile into which this compositor should render.
153 virtual void SetDisplayColorSpace(ui::Compositor* compositor, 154 virtual void SetDisplayColorSpace(ui::Compositor* compositor,
154 const gfx::ColorSpace& color_space) = 0; 155 const gfx::ColorSpace& color_space) = 0;
155 156
156 virtual void SetAuthoritativeVSyncInterval(ui::Compositor* compositor, 157 virtual void SetAuthoritativeVSyncInterval(ui::Compositor* compositor,
157 base::TimeDelta interval) = 0; 158 base::TimeDelta interval) = 0;
158 // Mac path for transporting vsync parameters to the display. Other platforms 159 // Mac path for transporting vsync parameters to the display. Other platforms
159 // update it via the BrowserCompositorOutputSurface directly. 160 // update it via the BrowserCompositorCompositorFrameSink directly.
160 virtual void SetDisplayVSyncParameters(ui::Compositor* compositor, 161 virtual void SetDisplayVSyncParameters(ui::Compositor* compositor,
161 base::TimeTicks timebase, 162 base::TimeTicks timebase,
162 base::TimeDelta interval) = 0; 163 base::TimeDelta interval) = 0;
163 164
164 virtual void SetOutputIsSecure(Compositor* compositor, bool secure) = 0; 165 virtual void SetOutputIsSecure(Compositor* compositor, bool secure) = 0;
165 166
166 virtual void AddObserver(ContextFactoryObserver* observer) = 0; 167 virtual void AddObserver(ContextFactoryObserver* observer) = 0;
167 168
168 virtual void RemoveObserver(ContextFactoryObserver* observer) = 0; 169 virtual void RemoveObserver(ContextFactoryObserver* observer) = 0;
169 }; 170 };
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 public: 206 public:
206 Compositor(ui::ContextFactory* context_factory, 207 Compositor(ui::ContextFactory* context_factory,
207 scoped_refptr<base::SingleThreadTaskRunner> task_runner); 208 scoped_refptr<base::SingleThreadTaskRunner> task_runner);
208 ~Compositor() override; 209 ~Compositor() override;
209 210
210 ui::ContextFactory* context_factory() { return context_factory_; } 211 ui::ContextFactory* context_factory() { return context_factory_; }
211 212
212 void AddSurfaceClient(uint32_t client_id); 213 void AddSurfaceClient(uint32_t client_id);
213 void RemoveSurfaceClient(uint32_t client_id); 214 void RemoveSurfaceClient(uint32_t client_id);
214 215
215 void SetOutputSurface(std::unique_ptr<cc::OutputSurface> surface); 216 void SetCompositorFrameSink(std::unique_ptr<cc::CompositorFrameSink> surface);
216 217
217 // Schedules a redraw of the layer tree associated with this compositor. 218 // Schedules a redraw of the layer tree associated with this compositor.
218 void ScheduleDraw(); 219 void ScheduleDraw();
219 220
220 // Sets the root of the layer tree drawn by this Compositor. The root layer 221 // Sets the root of the layer tree drawn by this Compositor. The root layer
221 // must have no parent. The compositor's root layer is reset if the root layer 222 // must have no parent. The compositor's root layer is reset if the root layer
222 // is destroyed. NULL can be passed to reset the root layer, in which case the 223 // is destroyed. NULL can be passed to reset the root layer, in which case the
223 // compositor will stop drawing anything. 224 // compositor will stop drawing anything.
224 // The Compositor does not own the root layer. 225 // The Compositor does not own the root layer.
225 const Layer* root_layer() const { return root_layer_; } 226 const Layer* root_layer() const { return root_layer_; }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 bool ScrollLayerTo(int layer_id, const gfx::ScrollOffset& offset); 278 bool ScrollLayerTo(int layer_id, const gfx::ScrollOffset& offset);
278 279
279 // The "authoritative" vsync interval, if provided, will override interval 280 // The "authoritative" vsync interval, if provided, will override interval
280 // reported from 3D context. This is typically the value reported by a more 281 // reported from 3D context. This is typically the value reported by a more
281 // reliable source, e.g, the platform display configuration. 282 // reliable source, e.g, the platform display configuration.
282 // In the particular case of ChromeOS -- this is the value queried through 283 // In the particular case of ChromeOS -- this is the value queried through
283 // XRandR, which is more reliable than the value queried through the 3D 284 // XRandR, which is more reliable than the value queried through the 3D
284 // context. 285 // context.
285 void SetAuthoritativeVSyncInterval(const base::TimeDelta& interval); 286 void SetAuthoritativeVSyncInterval(const base::TimeDelta& interval);
286 287
287 // Most platforms set their vsync info via BrowerCompositorOutputSurface's 288 // Most platforms set their vsync info via
289 // BrowerCompositorCompositorFrameSink's
288 // OnUpdateVSyncParametersFromGpu, but Mac routes vsync info via the 290 // OnUpdateVSyncParametersFromGpu, but Mac routes vsync info via the
289 // browser compositor instead through this path. 291 // browser compositor instead through this path.
290 void SetDisplayVSyncParameters(base::TimeTicks timebase, 292 void SetDisplayVSyncParameters(base::TimeTicks timebase,
291 base::TimeDelta interval); 293 base::TimeDelta interval);
292 294
293 // Sets the widget for the compositor to render into. 295 // Sets the widget for the compositor to render into.
294 void SetAcceleratedWidget(gfx::AcceleratedWidget widget); 296 void SetAcceleratedWidget(gfx::AcceleratedWidget widget);
295 // Releases the widget previously set through SetAcceleratedWidget(). 297 // Releases the widget previously set through SetAcceleratedWidget().
296 // After returning it will not be used for rendering anymore. 298 // After returning it will not be used for rendering anymore.
297 // The compositor must be set to invisible when taking away a widget. 299 // The compositor must be set to invisible when taking away a widget.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 void WillBeginMainFrame() override {} 352 void WillBeginMainFrame() override {}
351 void DidBeginMainFrame() override {} 353 void DidBeginMainFrame() override {}
352 void BeginMainFrame(const cc::BeginFrameArgs& args) override; 354 void BeginMainFrame(const cc::BeginFrameArgs& args) override;
353 void BeginMainFrameNotExpectedSoon() override; 355 void BeginMainFrameNotExpectedSoon() override;
354 void UpdateLayerTreeHost() override; 356 void UpdateLayerTreeHost() override;
355 void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta, 357 void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta,
356 const gfx::Vector2dF& outer_delta, 358 const gfx::Vector2dF& outer_delta,
357 const gfx::Vector2dF& elastic_overscroll_delta, 359 const gfx::Vector2dF& elastic_overscroll_delta,
358 float page_scale, 360 float page_scale,
359 float top_controls_delta) override {} 361 float top_controls_delta) override {}
360 void RequestNewOutputSurface() override; 362 void RequestNewCompositorFrameSink() override;
361 void DidInitializeOutputSurface() override; 363 void DidInitializeCompositorFrameSink() override;
362 void DidFailToInitializeOutputSurface() override; 364 void DidFailToInitializeCompositorFrameSink() override;
363 void WillCommit() override {} 365 void WillCommit() override {}
364 void DidCommit() override; 366 void DidCommit() override;
365 void DidCommitAndDrawFrame() override; 367 void DidCommitAndDrawFrame() override;
366 void DidCompleteSwapBuffers() override; 368 void DidCompleteSwapBuffers() override;
367 void DidCompletePageScaleAnimation() override {} 369 void DidCompletePageScaleAnimation() override {}
368 370
369 // cc::LayerTreeHostSingleThreadClient implementation. 371 // cc::LayerTreeHostSingleThreadClient implementation.
370 void DidPostSwapBuffers() override; 372 void DidPostSwapBuffers() override;
371 void DidAbortSwapBuffers() override; 373 void DidAbortSwapBuffers() override;
372 374
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 base::ObserverList<CompositorObserver, true> observer_list_; 408 base::ObserverList<CompositorObserver, true> observer_list_;
407 base::ObserverList<CompositorAnimationObserver> animation_observer_list_; 409 base::ObserverList<CompositorAnimationObserver> animation_observer_list_;
408 410
409 gfx::AcceleratedWidget widget_; 411 gfx::AcceleratedWidget widget_;
410 #if defined(USE_AURA) 412 #if defined(USE_AURA)
411 ui::Window* window_; 413 ui::Window* window_;
412 #endif 414 #endif
413 // A map from child id to parent id. 415 // A map from child id to parent id.
414 std::unordered_map<uint32_t, uint32_t> surface_clients_; 416 std::unordered_map<uint32_t, uint32_t> surface_clients_;
415 bool widget_valid_; 417 bool widget_valid_;
416 bool output_surface_requested_; 418 bool compositor_frame_sink_requested_;
417 std::unique_ptr<cc::SurfaceIdAllocator> surface_id_allocator_; 419 std::unique_ptr<cc::SurfaceIdAllocator> surface_id_allocator_;
418 scoped_refptr<cc::Layer> root_web_layer_; 420 scoped_refptr<cc::Layer> root_web_layer_;
419 std::unique_ptr<cc::LayerTreeHost> host_; 421 std::unique_ptr<cc::LayerTreeHost> host_;
420 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 422 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
421 423
422 // The manager of vsync parameters for this compositor. 424 // The manager of vsync parameters for this compositor.
423 scoped_refptr<CompositorVSyncManager> vsync_manager_; 425 scoped_refptr<CompositorVSyncManager> vsync_manager_;
424 426
425 // The device scale factor of the monitor that this compositor is compositing 427 // The device scale factor of the monitor that this compositor is compositing
426 // layers on. 428 // layers on.
427 float device_scale_factor_; 429 float device_scale_factor_;
428 430
429 bool locks_will_time_out_; 431 bool locks_will_time_out_;
430 CompositorLock* compositor_lock_; 432 CompositorLock* compositor_lock_;
431 433
432 LayerAnimatorCollection layer_animator_collection_; 434 LayerAnimatorCollection layer_animator_collection_;
433 scoped_refptr<cc::AnimationTimeline> animation_timeline_; 435 scoped_refptr<cc::AnimationTimeline> animation_timeline_;
434 436
435 gfx::ColorSpace color_space_; 437 gfx::ColorSpace color_space_;
436 438
437 base::WeakPtrFactory<Compositor> weak_ptr_factory_; 439 base::WeakPtrFactory<Compositor> weak_ptr_factory_;
438 440
439 DISALLOW_COPY_AND_ASSIGN(Compositor); 441 DISALLOW_COPY_AND_ASSIGN(Compositor);
440 }; 442 };
441 443
442 } // namespace ui 444 } // namespace ui
443 445
444 #endif // UI_COMPOSITOR_COMPOSITOR_H_ 446 #endif // UI_COMPOSITOR_COMPOSITOR_H_
OLDNEW
« no previous file with comments | « ui/android/delegated_frame_host_android.cc ('k') | ui/compositor/compositor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698