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

Side by Side Diff: services/gfx/compositor/compositor_engine.h

Issue 1552963002: Initial checkin of the new Mozart compositor. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-11
Patch Set: Created 4 years, 11 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef SERVICES_GFX_COMPOSITOR_COMPOSITOR_H_
6 #define SERVICES_GFX_COMPOSITOR_COMPOSITOR_H_
7
8 #include <unordered_map>
9 #include <vector>
10
11 #include "base/callback.h"
12 #include "base/macros.h"
13 #include "base/memory/weak_ptr.h"
14 #include "mojo/services/gfx/composition/interfaces/compositor.mojom.h"
15 #include "services/gfx/compositor/backend/scheduler.h"
16 #include "services/gfx/compositor/renderer_state.h"
17 #include "services/gfx/compositor/scene_state.h"
18
19 namespace compositor {
20
21 // Core of the compositor.
22 // All SceneState and RendererState objects are owned by the engine.
23 class CompositorEngine {
24 public:
25 explicit CompositorEngine();
26 ~CompositorEngine();
27
28 // COMPOSITOR REQUESTS
29
30 // Registers a scene.
31 mojo::gfx::composition::SceneTokenPtr CreateScene(
32 mojo::InterfaceRequest<mojo::gfx::composition::Scene> scene_request,
33 const mojo::String& label);
34
35 // Creates a scene graph renderer.
36 void CreateRenderer(
37 mojo::ContextProviderPtr context_provider,
38 mojo::InterfaceRequest<mojo::gfx::composition::Renderer> renderer_request,
39 const mojo::String& label);
40
41 // SCENE REQUESTS
42
43 // Sets the scene listener.
44 void SetListener(SceneState* scene_state,
45 mojo::gfx::composition::SceneListenerPtr listener);
46
47 // Updates a scene.
48 // Destroys |scene_state| if an error occurs.
49 void Update(SceneState* scene_state,
50 mojo::gfx::composition::SceneUpdatePtr update);
51
52 // Publishes a scene.
53 // Destroys |scene_state| if an error occurs.
54 void Publish(SceneState* scene_state,
55 mojo::gfx::composition::SceneMetadataPtr metadata);
56
57 // Schedules a frame callback.
58 void ScheduleFrame(SceneState* scene_state,
59 const SceneFrameCallback& callback);
60
61 // RENDERER REQUESTS
62
63 // Sets the root scene.
64 // Destroys |renderer_state| if an error occurs.
65 void SetRootScene(RendererState* renderer_state,
66 mojo::gfx::composition::SceneTokenPtr scene_token,
67 uint32 scene_version,
68 mojo::RectPtr viewport);
69
70 // Performs a hit test.
71 void HitTest(
72 RendererState* renderer_state,
73 mojo::PointPtr point,
74 const mojo::gfx::composition::HitTester::HitTestCallback& callback);
75
76 private:
77 void OnSceneConnectionError(SceneState* scene_state);
78 void DestroyScene(SceneState* scene_state);
79
80 void OnRendererConnectionError(RendererState* renderer_state);
81 void DestroyRenderer(RendererState* renderer_state);
82
83 void InvalidateScene(SceneState* scene_state);
84 SceneDef::Disposition PresentScene(SceneState* scene_state,
85 int64_t presentation_time);
86
87 void PresentRenderer(RendererState* renderer_state,
88 int64_t presentation_time);
89 void SnapshotRenderer(RendererState* renderer_state,
90 const mojo::gfx::composition::FrameInfo& frame_info);
91 void SnapshotRendererInner(
92 RendererState* renderer_state,
93 const mojo::gfx::composition::FrameInfo& frame_info,
94 std::ostream* block_log);
95 void ScheduleFrameForRenderer(RendererState* renderer_state,
96 SchedulingMode scheduling_mode);
97
98 void OnOutputError(const base::WeakPtr<RendererState>& renderer_state_weak);
99 void OnOutputUpdateRequest(
100 const base::WeakPtr<RendererState>& renderer_state_weak,
101 const mojo::gfx::composition::FrameInfo& frame_info);
102 void OnOutputSnapshotRequest(
103 const base::WeakPtr<RendererState>& renderer_state_weak,
104 const mojo::gfx::composition::FrameInfo& frame_info);
105 void OnPresentScene(const base::WeakPtr<SceneState>& scene_state_weak,
106 int64_t presentation_time);
107
108 SceneDef* ResolveSceneReference(
109 mojo::gfx::composition::SceneToken* scene_token);
110 void SendResourceUnavailable(SceneState* scene_state, uint32_t resource_id);
111
112 SceneState* FindScene(uint32_t scene_token);
113
114 bool IsSceneStateRegisteredDebug(SceneState* scene_state) {
115 return scene_state && FindScene(scene_state->scene_token()->value);
116 }
117 bool IsRendererStateRegisteredDebug(RendererState* renderer_state) {
118 return renderer_state &&
119 std::any_of(renderers_.begin(), renderers_.end(),
120 [renderer_state](RendererState* other) {
121 return renderer_state == other;
122 });
123 }
124
125 uint32_t next_scene_token_value_ = 1u;
126 uint32_t next_renderer_id_ = 1u;
127 std::unordered_map<uint32_t, SceneState*> scenes_by_token_;
128 std::vector<RendererState*> renderers_;
129
130 base::WeakPtrFactory<CompositorEngine> weak_factory_; // must be last
131
132 DISALLOW_COPY_AND_ASSIGN(CompositorEngine);
133 };
134
135 } // namespace compositor
136
137 #endif // SERVICES_GFX_COMPOSITOR_COMPOSITOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698