You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/sphinx/architecture.md
+31-31Lines changed: 31 additions & 31 deletions
Original file line number
Diff line number
Diff line change
@@ -1,31 +1,31 @@
1
-
# Overview
1
+
# Architecture
2
2
This document describes the high-level architecture of *Mir*, including a diagram and a brief introduction of the libraries.
3
3
4
-
# Audience
4
+
##Audience
5
5
This document is intended to provide contributors to *Mir* an overview of *Mir*'s systems. It is *not* intended to guide compositor-implementers, unless they are specifically interested in the internals of *Mir*.
- The `include` folder at the root of the project provides the public-facing API.
13
13
- This directory *strictly* includes the interfaces that are useful to a compositor-implementer.
14
14
- If one is only interested in implementing their own *Mir*-based compositor, they need not look any further than this directory.
15
15
16
-
## `/src`
16
+
###`/src`
17
17
- The `src` folder at the root of the project comprises the core implementation of *Mir*.
18
18
19
-
## `/examples`
19
+
###`/examples`
20
20
- A collection of demo *Mir* compositors that are used as examples of how one might build a true compositor. Examples include:
21
21
-`miral-app`
22
22
-`miral-shell`
23
23
-`mir_demo_server`
24
24
25
-
## `/tests`
25
+
###`/tests`
26
26
- Tests for the project, including unit tests, integration tests, acceptance tests, and test framework.
27
27
28
-
# Libraries
28
+
##Libraries
29
29
The following is the library tree:
30
30
```
31
31
├── miral
@@ -54,28 +54,28 @@ The following is the library tree:
54
54
└── mirwayland
55
55
```
56
56
57
-
## miral
57
+
###miral
58
58
- The "Mir Abstraction Layer" (aka `MirAL` or `miral`) is an API that makes Mir easy for compositor-implementers to work with. It provides the core window management concepts and an interface that is more ABI stable than Mir's internal mirserver API.
59
59
- Public-facing
60
60
- Directories:
61
61
-`include/miral`
62
62
-`src/miral`
63
63
64
-
## miroil
64
+
###miroil
65
65
- A custom *Mir* library for the [Lomiri](https://lomiri.com/) folks
66
66
- This is unimportant for 99% of people
67
67
- Directories:
68
68
-`include/miroil`
69
69
-`src/miroil`
70
70
71
-
## mircore
71
+
###mircore
72
72
- Fundamental data structures like 2D points, Rectangles, File Descriptor, etc.
73
73
- Public-facing
74
74
- Directories:
75
75
-`include/core`
76
76
-`src/core`
77
77
-
78
-
## mircommon
78
+
###mircommon
79
79
- Data structures and utility functions like Mir-event building, logging, keymaps, etc.
80
80
- Differs from `mircore` in that the concepts map strictly onto *Mir*'s concepts instead of being general concepts like a Rectangle
81
81
- Public-facing
@@ -84,15 +84,15 @@ The following is the library tree:
84
84
-`src/common`
85
85
-`src/include/common`
86
86
87
-
## mircookie
87
+
###mircookie
88
88
- Provides event timestamps for inputs events that are difficult to spoof.
89
89
- Public-facing
90
90
- Directories:
91
91
-`include/cookie`
92
92
-`src/cookie`
93
93
-`src/include/cookie`
94
94
95
-
## mirserver
95
+
###mirserver
96
96
- Provides the core *Mir* runtime, with the entry-point being the `mir::Server` class.
97
97
- The `Server` class has a `DisplayServer` which provides access to the interfaces that that support the server's runtime.
98
98
- The `ServerConfiguration` provides a bunch of methods called `the_XYZ()` to access these various instances, where "XYZ" can be replaced with the interface of interest.
@@ -102,14 +102,14 @@ The following is the library tree:
102
102
-`src/server`
103
103
-`src/include/server`
104
104
105
-
## mircompositor
105
+
###mircompositor
106
106
- Included in `mirserver.so`
107
107
- The `Compositor` is responsible for collecting the set of renderables and sending them off to the outputs to be displayed.
108
108
- Directories:
109
109
-`src/include/server/mir/compositor`
110
110
-`src/server/compositor`
111
111
112
-
## mirinput
112
+
###mirinput
113
113
- Included in `mirserver.so`
114
114
- Deals with everything input (e.g. keyboard presses, mouse clicks)
115
115
- The `InputManager` provides access to the specific input platform that is running (e.g. X, Wayland, or libinput).
@@ -118,33 +118,33 @@ The following is the library tree:
118
118
-`src/include/server/mir/input`
119
119
-`src/server/input`
120
120
121
-
## mirfrontend-wayland
121
+
###mirfrontend-wayland
122
122
- The *Mir* implementation of the wayland protocol.
123
123
- The `WaylandConnector` class is the glue between the compositor and the specific details of the wayland protocol.
124
124
- Directories:
125
125
-`src/server/frontend_wayland`
126
126
127
-
## mirfrontend-xwayland
127
+
###mirfrontend-xwayland
128
128
- The *Mir* implementation of the xwayland protocol.
129
129
- The `XWaylandConnector` class is the glue between the compositor and the specific details of the xwayland protocol.
130
130
- This protocol talks to the `xwayland` server, which is spawned as a subprocess.
131
131
- Directories:
132
132
-`src/server/frontend_xwayland`
133
133
134
-
## mirshell
134
+
###mirshell
135
135
- The `Shell` is responsible for managing the surfaces that the compositor wants to show.
136
136
- It provides an interface to create, update, and remove these surfaces from the display.
137
137
- As an example, the `WaylandConnector` might ask the `Shell` to create a new surface for it.
138
138
- Directories:
139
139
-`src/include/server/mir/shell`
140
140
-`src/server/shell`
141
141
142
-
## mirshelldecoration
142
+
###mirshelldecoration
143
143
- Manages *Mir*'s server-side decoration of windows. Currently only used for X11 clients.
144
144
- Directories:
145
145
-`src/server/shell/decoration`
146
146
147
-
## mirscene
147
+
###mirscene
148
148
- The `Scene` provides an interface for the `Compositor` to access the list of renderable items
149
149
- These renderables are derived from the surfaces that were added to the `Shell`.
150
150
- You can think of the `Scene` as you would think of a "scene graph" in a 3D game engine.
@@ -153,45 +153,45 @@ The following is the library tree:
153
153
-`src/include/mir/server/scene`
154
154
-`src/server/scene`
155
155
156
-
## mirgraphics
156
+
###mirgraphics
157
157
- A graphics abstraction layer sitting between the compositor and the specific graphics platform that it is using to render.
158
158
- Directories:
159
159
-`src/include/mir/server/graphics`
160
160
-`src/server/graphics`
161
161
162
-
## mirreport
162
+
###mirreport
163
163
- Default logging and reporting facilities
164
164
- Directories:
165
165
-`src/server/report`
166
166
167
-
## mirconsole
167
+
###mirconsole
168
168
- Handles `logind` and virtual-terminal related tasks for the compositor
169
169
- Directories:
170
170
-`src/server/console`
171
171
172
-
## mirgl
172
+
###mirgl
173
173
- A short list of helpers for GL things
174
174
- Directories:
175
175
-`src/gl`
176
176
177
-
## mirrenderergl
177
+
###mirrenderergl
178
178
- The only supported `Renderer` type for now
179
179
- Future renderers will be found alongside it in the `src/renderers` directory
180
180
- Directories:
181
181
-`src/renderers/gl`
182
182
183
-
## mirplatform
183
+
###mirplatform
184
184
- Graphics and input code that is shared between the platforms found in `src/platforms`
185
185
- Directories
186
186
-`src/include/platform`
187
187
-`src/platform`
188
188
189
-
## mirwayland
189
+
###mirwayland
190
190
- A subproject used to generate C++ classes from wayland protocol XML files.
191
191
- Directories:
192
192
-`src/wayland`
193
193
194
-
## platforms (the directory, not a namespace)
194
+
###platforms (the directory, not a namespace)
195
195
- A **platform** is a backend that the compositor selects at runtime
196
196
- There are three distinct platforms that the compositor makes use of:
197
197
-*DisplayPlatform*: determines what the compositor is rendering *to* (e.g gbm-kms, x11, wayland)
0 commit comments