Merge lp:~kdub/mir/sort-out-surface-observers into lp:mir
- sort-out-surface-observers
- Merge into development-branch
Status: | Work in progress |
---|---|
Proposed branch: | lp:~kdub/mir/sort-out-surface-observers |
Merge into: | lp:mir |
Diff against target: |
989 lines (+376/-66) 31 files modified
include/server/mir/frontend/buffer_stream.h (+3/-3) include/server/mir/scene/null_stream_observer.h (+36/-0) include/server/mir/scene/null_surface_observer.h (+1/-1) include/server/mir/scene/stream_observer.h (+45/-0) include/server/mir/scene/surface.h (+2/-0) include/server/mir/scene/surface_observer.h (+1/-1) include/server/mir/shell/surface_ready_observer.h (+3/-2) src/include/server/mir/scene/stream_observers.h (+43/-0) src/include/server/mir/scene/surface_observers.h (+1/-1) src/server/compositor/buffer_stream_surfaces.cpp (+2/-2) src/server/compositor/buffer_stream_surfaces.h (+4/-4) src/server/input/cursor_controller.cpp (+0/-4) src/server/scene/CMakeLists.txt (+1/-0) src/server/scene/basic_surface.cpp (+54/-15) src/server/scene/basic_surface.h (+5/-0) src/server/scene/legacy_scene_change_notification.cpp (+3/-2) src/server/scene/legacy_stream_change_notification.cpp (+37/-0) src/server/scene/legacy_stream_change_notification.h (+45/-0) src/server/scene/legacy_surface_change_notification.cpp (+4/-6) src/server/scene/legacy_surface_change_notification.h (+2/-5) src/server/scene/null_surface_observer.cpp (+5/-1) src/server/scene/stream_change_notification.h (+45/-0) src/server/shell/surface_ready_observer.cpp (+4/-0) src/server/symbols.map (+8/-2) tests/include/mir_test_doubles/mock_buffer_stream.h (+2/-2) tests/include/mir_test_doubles/mock_surface.h (+2/-0) tests/include/mir_test_doubles/stub_buffer_stream.h (+2/-2) tests/include/mir_test_doubles/stub_scene_surface.h (+2/-0) tests/unit-tests/compositor/test_buffer_stream.cpp (+2/-3) tests/unit-tests/scene/test_basic_surface.cpp (+1/-1) tests/unit-tests/scene/test_legacy_scene_change_notification.cpp (+11/-9) |
To merge this branch: | bzr merge lp:~kdub/mir/sort-out-surface-observers |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Daniel van Vugt | Abstain | ||
Robert Carr (community) | Approve | ||
Alan Griffiths | Needs Information | ||
PS Jenkins bot (community) | continuous-integration | Approve | |
Review via email: mp+261553@code.launchpad.net |
Commit message
Sort out the observers structure by introducing a StreamObserver. The BufferStreamObs
Description of the change
Sort out the observers structure by introducing a StreamObserver. The BufferStreamObs
In the review of ~kdub/mir/
that the SurfaceObservers keeping track of the streams was a bit strange, and this MP corrects this.
I also considered having
ms::SurfaceObserver : public ms::BufferStrea
but it seems to me that these are two different operations, so they are separate in this MP.
PS Jenkins bot (ps-jenkins) wrote : | # |
Alan Griffiths (alan-griffiths) wrote : | # |
*Needs Discussion*
397 +void ms::BasicSurfac
I'm not convinced that the Surface (and not the SurfaceObserver) is responsible for adding StreamObservers.
My instinct would be for LegacySurfaceCh
Robert Carr (robertcarr) wrote : | # |
I'm not totally sure this is an improvement. It seems to solve the problem of having to use the implement complete surface observer interface when only a stream observer is needed but this is pretty easy to manager with null observers and isn't so much a safety issue as a wart (as far as I see it)...I think this branch comes with a few warts:
+class SurfaceReadyObs
We've fixed one name mismatch but introduced another as far as I can see...the other wart I notice being the increased complexity in BasicSurface.
It's possible Alan's suggestion about making the Surface Observer responsible for adding the StreamObserver would resolve some of my concerns, this way you would have SurfaceReadyObs
Anyway though...it seems a reasonable and runtime correct step and I assume you find it useful if you've proposed it so I'll approve!
Kevin DuBois (kdub) wrote : | # |
Will see if I can root out the requirement on Surface tomorrow.
Daniel van Vugt (vanvugt) wrote : | # |
I think our Surface-related classes are quite overcomplicated for the limited functionality they have. So from a high level I feel there's no justifiable reason to grow the code, we should be shrinking it.
But I won't block progress in wishing we were doing better...
Kevin DuBois (kdub) wrote : | # |
The rework should not complicate the Surface class anymore. This is somewhat on the backburner, will re-propose at a later time.
Unmerged revisions
- 2642. By Kevin DuBois
-
remove a dup symbol from the table
- 2641. By Kevin DuBois
-
merge in mir
- 2640. By Kevin DuBois
-
round of cleanups
- 2639. By Kevin DuBois
-
shift around files
- 2638. By Kevin DuBois
-
sort out observers with resetting the streams
- 2637. By Kevin DuBois
-
merge in mir
- 2636. By Kevin DuBois
-
tests to pass
- 2635. By Kevin DuBois
-
merge in mir
- 2634. By Kevin DuBois
-
transition most things to having a separate stream and surface notification path
Preview Diff
1 | === modified file 'include/server/mir/frontend/buffer_stream.h' |
2 | --- include/server/mir/frontend/buffer_stream.h 2015-06-02 13:41:40 +0000 |
3 | +++ include/server/mir/frontend/buffer_stream.h 2015-06-10 12:39:17 +0000 |
4 | @@ -32,7 +32,7 @@ |
5 | } |
6 | namespace scene |
7 | { |
8 | -class SurfaceObserver; |
9 | +class StreamObserver; |
10 | } |
11 | |
12 | namespace frontend |
13 | @@ -45,8 +45,8 @@ |
14 | |
15 | virtual void swap_buffers(graphics::Buffer* old_buffer, std::function<void(graphics::Buffer* new_buffer)> complete) = 0; |
16 | |
17 | - virtual void add_observer(std::shared_ptr<scene::SurfaceObserver> const& observer) = 0; |
18 | - virtual void remove_observer(std::weak_ptr<scene::SurfaceObserver> const& observer) = 0; |
19 | + virtual void add_observer(std::shared_ptr<scene::StreamObserver> const& observer) = 0; |
20 | + virtual void remove_observer(std::weak_ptr<scene::StreamObserver> const& observer) = 0; |
21 | |
22 | virtual void with_most_recent_buffer_do( |
23 | std::function<void(graphics::Buffer&)> const& exec) = 0; |
24 | |
25 | === added file 'include/server/mir/scene/null_stream_observer.h' |
26 | --- include/server/mir/scene/null_stream_observer.h 1970-01-01 00:00:00 +0000 |
27 | +++ include/server/mir/scene/null_stream_observer.h 2015-06-10 12:39:17 +0000 |
28 | @@ -0,0 +1,36 @@ |
29 | +/* |
30 | + * Copyright © 2015 Canonical Ltd. |
31 | + * |
32 | + * This program is free software: you can redistribute it and/or modify it |
33 | + * under the terms of the GNU General Public License version 3, |
34 | + * as published by the Free Software Foundation. |
35 | + * |
36 | + * This program is distributed in the hope that it will be useful, |
37 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
38 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
39 | + * GNU General Public License for more details. |
40 | + * |
41 | + * You should have received a copy of the GNU General Public License |
42 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
43 | + * |
44 | + * Authored by: Kevin DuBois <kevin.dubois@canonical.com> |
45 | + */ |
46 | + |
47 | +#ifndef MIR_SCENE_NULL_STREAM_OBSERVER_H_ |
48 | +#define MIR_SCENE_NULL_STREAM_OBSERVER_H_ |
49 | + |
50 | +#include "mir/scene/stream_observer.h" |
51 | + |
52 | +namespace mir |
53 | +{ |
54 | +namespace scene |
55 | +{ |
56 | +class NullStreamObserver : public StreamObserver |
57 | +{ |
58 | + void frame_posted(int frames_available) override; |
59 | + void resized_to(geometry::Size const& size) override; |
60 | +}; |
61 | +} |
62 | +} |
63 | + |
64 | +#endif // MIR_SCENE_NULL_STREAM_OBSERVER_H_ |
65 | |
66 | === modified file 'include/server/mir/scene/null_surface_observer.h' |
67 | --- include/server/mir/scene/null_surface_observer.h 2015-04-09 08:57:24 +0000 |
68 | +++ include/server/mir/scene/null_surface_observer.h 2015-06-10 12:39:17 +0000 |
69 | @@ -35,7 +35,6 @@ |
70 | void resized_to(geometry::Size const& size) override; |
71 | void moved_to(geometry::Point const& top_left) override; |
72 | void hidden_set_to(bool hide) override; |
73 | - void frame_posted(int frames_available) override; |
74 | void alpha_set_to(float alpha) override; |
75 | void orientation_set_to(MirOrientation orientation) override; |
76 | void transformation_set_to(glm::mat4 const& t) override; |
77 | @@ -44,6 +43,7 @@ |
78 | void client_surface_close_requested() override; |
79 | void keymap_changed(xkb_rule_names const& names) override; |
80 | void renamed(char const* name) override; |
81 | + void streams_repositioned() override; |
82 | |
83 | protected: |
84 | NullSurfaceObserver(NullSurfaceObserver const&) = delete; |
85 | |
86 | === added file 'include/server/mir/scene/stream_observer.h' |
87 | --- include/server/mir/scene/stream_observer.h 1970-01-01 00:00:00 +0000 |
88 | +++ include/server/mir/scene/stream_observer.h 2015-06-10 12:39:17 +0000 |
89 | @@ -0,0 +1,45 @@ |
90 | +/* |
91 | + * Copyright © 2015 Canonical Ltd. |
92 | + * |
93 | + * This program is free software: you can redistribute it and/or modify it |
94 | + * under the terms of the GNU General Public License version 3, |
95 | + * as published by the Free Software Foundation. |
96 | + * |
97 | + * This program is distributed in the hope that it will be useful, |
98 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
99 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
100 | + * GNU General Public License for more details. |
101 | + * |
102 | + * You should have received a copy of the GNU General Public License |
103 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
104 | + * |
105 | + * Authored by: Kevin DuBois <kevin.dubois@canonical.com> |
106 | + */ |
107 | + |
108 | +#ifndef MIR_SCENE_STREAM_OBSERVER_H_ |
109 | +#define MIR_SCENE_STREAM_OBSERVER_H_ |
110 | + |
111 | +namespace mir |
112 | +{ |
113 | +namespace geometry |
114 | +{ |
115 | +struct Size; |
116 | +} |
117 | +namespace scene |
118 | +{ |
119 | +class StreamObserver |
120 | +{ |
121 | +public: |
122 | + virtual void resized_to(geometry::Size const& size) = 0; |
123 | + virtual void frame_posted(int frames_available) = 0; |
124 | + |
125 | +protected: |
126 | + StreamObserver() = default; |
127 | + virtual ~StreamObserver() = default; |
128 | + StreamObserver(StreamObserver const&) = delete; |
129 | + StreamObserver& operator=(StreamObserver const&) = delete; |
130 | +}; |
131 | +} |
132 | +} |
133 | + |
134 | +#endif // MIR_SCENE_SURFACE_OBSERVER_H_ |
135 | |
136 | === modified file 'include/server/mir/scene/surface.h' |
137 | --- include/server/mir/scene/surface.h 2015-06-02 13:41:40 +0000 |
138 | +++ include/server/mir/scene/surface.h 2015-06-10 12:39:17 +0000 |
139 | @@ -93,6 +93,8 @@ |
140 | virtual void set_cursor_image(std::shared_ptr<graphics::CursorImage> const& image) override = 0; |
141 | virtual std::shared_ptr<graphics::CursorImage> cursor_image() const override = 0; |
142 | |
143 | + virtual void add_observer(std::shared_ptr<StreamObserver> const& observer) = 0; |
144 | + virtual void remove_observer(std::weak_ptr<StreamObserver> const& observer) = 0; |
145 | virtual void add_observer(std::shared_ptr<SurfaceObserver> const& observer) = 0; |
146 | virtual void remove_observer(std::weak_ptr<SurfaceObserver> const& observer) = 0; |
147 | |
148 | |
149 | === modified file 'include/server/mir/scene/surface_observer.h' |
150 | --- include/server/mir/scene/surface_observer.h 2015-04-09 08:57:24 +0000 |
151 | +++ include/server/mir/scene/surface_observer.h 2015-06-10 12:39:17 +0000 |
152 | @@ -47,7 +47,6 @@ |
153 | virtual void resized_to(geometry::Size const& size) = 0; |
154 | virtual void moved_to(geometry::Point const& top_left) = 0; |
155 | virtual void hidden_set_to(bool hide) = 0; |
156 | - virtual void frame_posted(int frames_available) = 0; |
157 | virtual void alpha_set_to(float alpha) = 0; |
158 | virtual void orientation_set_to(MirOrientation orientation) = 0; |
159 | virtual void transformation_set_to(glm::mat4 const& t) = 0; |
160 | @@ -56,6 +55,7 @@ |
161 | virtual void client_surface_close_requested() = 0; |
162 | virtual void keymap_changed(xkb_rule_names const& names) = 0; |
163 | virtual void renamed(char const* name) = 0; |
164 | + virtual void streams_repositioned() = 0; |
165 | |
166 | protected: |
167 | SurfaceObserver() = default; |
168 | |
169 | === modified file 'include/server/mir/shell/surface_ready_observer.h' |
170 | --- include/server/mir/shell/surface_ready_observer.h 2015-05-18 19:58:07 +0000 |
171 | +++ include/server/mir/shell/surface_ready_observer.h 2015-06-10 12:39:17 +0000 |
172 | @@ -19,7 +19,7 @@ |
173 | #ifndef MIR_SHELL_SURFACE_READY_OBSERVER_H_ |
174 | #define MIR_SHELL_SURFACE_READY_OBSERVER_H_ |
175 | |
176 | -#include "mir/scene/null_surface_observer.h" |
177 | +#include "mir/scene/null_stream_observer.h" |
178 | |
179 | #include <functional> |
180 | #include <memory> |
181 | @@ -30,7 +30,7 @@ |
182 | |
183 | namespace shell |
184 | { |
185 | -class SurfaceReadyObserver : public scene::NullSurfaceObserver, |
186 | +class SurfaceReadyObserver : public scene::NullStreamObserver, |
187 | public std::enable_shared_from_this<SurfaceReadyObserver> |
188 | { |
189 | public: |
190 | @@ -47,6 +47,7 @@ |
191 | |
192 | private: |
193 | void frame_posted(int) override; |
194 | + void resized_to(geometry::Size const&) override; |
195 | |
196 | ActivateFunction const activate; |
197 | std::weak_ptr<scene::Session> const session; |
198 | |
199 | === added file 'src/include/server/mir/scene/stream_observers.h' |
200 | --- src/include/server/mir/scene/stream_observers.h 1970-01-01 00:00:00 +0000 |
201 | +++ src/include/server/mir/scene/stream_observers.h 2015-06-10 12:39:17 +0000 |
202 | @@ -0,0 +1,43 @@ |
203 | +/* |
204 | + * Copyright © 2015 Canonical Ltd. |
205 | + * |
206 | + * This program is free software: you can redistribute it and/or modify it |
207 | + * under the terms of the GNU General Public License version 3, |
208 | + * as published by the Free Software Foundation. |
209 | + * |
210 | + * This program is distributed in the hope that it will be useful, |
211 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
212 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
213 | + * GNU General Public License for more details. |
214 | + * |
215 | + * You should have received a copy of the GNU General Public License |
216 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
217 | + * |
218 | + * Authored by: Kevin DuBois <kevin.dubois@canonical.com> |
219 | + */ |
220 | + |
221 | +#ifndef MIR_SCENE_STREAM_OBSERVERS_H_ |
222 | +#define MIR_SCENE_STREAM_OBSERVERS_H_ |
223 | + |
224 | +#include "mir/basic_observers.h" |
225 | +#include "mir/scene/stream_observer.h" |
226 | + |
227 | +namespace mir |
228 | +{ |
229 | +namespace scene |
230 | +{ |
231 | + |
232 | +class StreamObservers : public StreamObserver, BasicObservers<StreamObserver> |
233 | +{ |
234 | +public: |
235 | + using BasicObservers<StreamObserver>::add; |
236 | + using BasicObservers<StreamObserver>::remove; |
237 | + using BasicObservers<StreamObserver>::for_each; |
238 | + void frame_posted(int frames_available) override; |
239 | + void resized_to(geometry::Size const& size) override; |
240 | +}; |
241 | + |
242 | +} |
243 | +} |
244 | + |
245 | +#endif /* MIR_SCENE_STREAM_OBSERVERS_H_ */ |
246 | |
247 | === modified file 'src/include/server/mir/scene/surface_observers.h' |
248 | --- src/include/server/mir/scene/surface_observers.h 2015-05-19 21:34:34 +0000 |
249 | +++ src/include/server/mir/scene/surface_observers.h 2015-06-10 12:39:17 +0000 |
250 | @@ -37,7 +37,6 @@ |
251 | void resized_to(geometry::Size const& size) override; |
252 | void moved_to(geometry::Point const& top_left) override; |
253 | void hidden_set_to(bool hide) override; |
254 | - void frame_posted(int frames_available) override; |
255 | void alpha_set_to(float alpha) override; |
256 | void orientation_set_to(MirOrientation orientation) override; |
257 | void transformation_set_to(glm::mat4 const& t) override; |
258 | @@ -46,6 +45,7 @@ |
259 | void client_surface_close_requested() override; |
260 | void keymap_changed(xkb_rule_names const& names) override; |
261 | void renamed(char const*) override; |
262 | + void streams_repositioned() override; |
263 | }; |
264 | |
265 | } |
266 | |
267 | === modified file 'src/server/compositor/buffer_stream_surfaces.cpp' |
268 | --- src/server/compositor/buffer_stream_surfaces.cpp 2015-05-19 21:34:34 +0000 |
269 | +++ src/server/compositor/buffer_stream_surfaces.cpp 2015-06-10 12:39:17 +0000 |
270 | @@ -125,12 +125,12 @@ |
271 | return buffer_bundle->properties().format; |
272 | } |
273 | |
274 | -void mc::BufferStreamSurfaces::add_observer(std::shared_ptr<scene::SurfaceObserver> const& observer) |
275 | +void mc::BufferStreamSurfaces::add_observer(std::shared_ptr<scene::StreamObserver> const& observer) |
276 | { |
277 | observers.add(observer); |
278 | } |
279 | |
280 | -void mc::BufferStreamSurfaces::remove_observer(std::weak_ptr<scene::SurfaceObserver> const& observer) |
281 | +void mc::BufferStreamSurfaces::remove_observer(std::weak_ptr<scene::StreamObserver> const& observer) |
282 | { |
283 | if (auto o = observer.lock()) |
284 | observers.remove(o); |
285 | |
286 | === modified file 'src/server/compositor/buffer_stream_surfaces.h' |
287 | --- src/server/compositor/buffer_stream_surfaces.h 2015-05-19 21:34:34 +0000 |
288 | +++ src/server/compositor/buffer_stream_surfaces.h 2015-06-10 12:39:17 +0000 |
289 | @@ -21,7 +21,7 @@ |
290 | #define MIR_COMPOSITOR_BUFFER_STREAM_SCENE_H_ |
291 | |
292 | #include "mir/compositor/buffer_stream.h" |
293 | -#include "mir/scene/surface_observers.h" |
294 | +#include "mir/scene/stream_observers.h" |
295 | |
296 | #include <mutex> |
297 | |
298 | @@ -45,8 +45,8 @@ |
299 | graphics::Buffer* old_buffer, std::function<void(graphics::Buffer* new_buffer)> complete) override; |
300 | void with_most_recent_buffer_do(std::function<void(graphics::Buffer&)> const& exec) override; |
301 | MirPixelFormat pixel_format() const override; |
302 | - void add_observer(std::shared_ptr<scene::SurfaceObserver> const& observer) override; |
303 | - void remove_observer(std::weak_ptr<scene::SurfaceObserver> const& observer) override; |
304 | + void add_observer(std::shared_ptr<scene::StreamObserver> const& observer) override; |
305 | + void remove_observer(std::weak_ptr<scene::StreamObserver> const& observer) override; |
306 | |
307 | //from mc::BufferStream |
308 | void acquire_client_buffer(std::function<void(graphics::Buffer* buffer)> complete); |
309 | @@ -70,7 +70,7 @@ |
310 | private: |
311 | std::mutex mutable mutex; |
312 | std::shared_ptr<BufferBundle> const buffer_bundle; |
313 | - scene::SurfaceObservers observers; |
314 | + scene::StreamObservers observers; |
315 | bool first_frame_posted; |
316 | }; |
317 | |
318 | |
319 | === modified file 'src/server/input/cursor_controller.cpp' |
320 | --- src/server/input/cursor_controller.cpp 2015-05-12 06:58:52 +0000 |
321 | +++ src/server/input/cursor_controller.cpp 2015-06-10 12:39:17 +0000 |
322 | @@ -62,10 +62,6 @@ |
323 | { |
324 | cursor_controller->update_cursor_image(); |
325 | } |
326 | - void frame_posted(int) override |
327 | - { |
328 | - // Frame posting wont trigger a cursor update |
329 | - } |
330 | void alpha_set_to(float) override |
331 | { |
332 | cursor_controller->update_cursor_image(); |
333 | |
334 | === modified file 'src/server/scene/CMakeLists.txt' |
335 | --- src/server/scene/CMakeLists.txt 2015-05-19 17:17:57 +0000 |
336 | +++ src/server/scene/CMakeLists.txt 2015-06-10 12:39:17 +0000 |
337 | @@ -20,6 +20,7 @@ |
338 | threaded_snapshot_strategy.cpp |
339 | legacy_scene_change_notification.cpp |
340 | legacy_surface_change_notification.cpp |
341 | + legacy_stream_change_notification.cpp |
342 | prompt_session_container.cpp |
343 | prompt_session_impl.cpp |
344 | prompt_session_manager_impl.cpp |
345 | |
346 | === modified file 'src/server/scene/basic_surface.cpp' |
347 | --- src/server/scene/basic_surface.cpp 2015-06-04 11:32:52 +0000 |
348 | +++ src/server/scene/basic_surface.cpp 2015-06-10 12:39:17 +0000 |
349 | @@ -29,7 +29,7 @@ |
350 | #include "mir/geometry/displacement.h" |
351 | |
352 | #include "mir/scene/scene_report.h" |
353 | -#include "mir/scene/null_surface_observer.h" |
354 | +#include "mir/scene/null_stream_observer.h" |
355 | |
356 | #include <boost/throw_exception.hpp> |
357 | |
358 | @@ -70,12 +70,23 @@ |
359 | { observer->hidden_set_to(hide); }); |
360 | } |
361 | |
362 | -void ms::SurfaceObservers::frame_posted(int frames_available) |
363 | +void ms::StreamObservers::frame_posted(int frames_available) |
364 | { |
365 | - for_each([&](std::shared_ptr<SurfaceObserver> const& observer) |
366 | + for_each([&](std::shared_ptr<StreamObserver> const& observer) |
367 | { observer->frame_posted(frames_available); }); |
368 | } |
369 | |
370 | +void ms::StreamObservers::resized_to(geom::Size const& size) |
371 | +{ |
372 | + for_each([&](std::shared_ptr<StreamObserver> const& observer) |
373 | + { observer->resized_to(size); }); |
374 | +} |
375 | + |
376 | +void ms::SurfaceObservers::streams_repositioned() |
377 | +{ |
378 | + for_each([&](std::shared_ptr<SurfaceObserver> const& observer) |
379 | + { observer->streams_repositioned(); }); |
380 | +} |
381 | void ms::SurfaceObservers::alpha_set_to(float alpha) |
382 | { |
383 | for_each([&](std::shared_ptr<SurfaceObserver> const& observer) |
384 | @@ -557,7 +568,7 @@ |
385 | |
386 | namespace |
387 | { |
388 | -struct FramePostObserver : public ms::NullSurfaceObserver |
389 | +struct FramePostObserver : public ms::NullStreamObserver |
390 | { |
391 | FramePostObserver(std::function<void()> const& exec) |
392 | : exec(exec) |
393 | @@ -729,11 +740,28 @@ |
394 | return new_visibility; |
395 | } |
396 | |
397 | +void ms::BasicSurface::add_observer(std::shared_ptr<StreamObserver> const& observer) |
398 | +{ |
399 | + stream_observers.add(observer); |
400 | + std::lock_guard<std::mutex> lg(guard); |
401 | + for (auto& info : layers) |
402 | + info.stream->add_observer(observer); |
403 | +} |
404 | + |
405 | +void ms::BasicSurface::remove_observer(std::weak_ptr<StreamObserver> const& observer) |
406 | +{ |
407 | + auto o = observer.lock(); |
408 | + if (!o) |
409 | + BOOST_THROW_EXCEPTION(std::runtime_error("Invalid observer (previously destroyed)")); |
410 | + std::lock_guard<std::mutex> lg(guard); |
411 | + for (auto& info : layers) |
412 | + info.stream->remove_observer(observer); |
413 | + stream_observers.remove(o); |
414 | +} |
415 | + |
416 | void ms::BasicSurface::add_observer(std::shared_ptr<SurfaceObserver> const& observer) |
417 | { |
418 | observers.add(observer); |
419 | - for (auto& info : layers) |
420 | - info.stream->add_observer(observer); |
421 | } |
422 | |
423 | void ms::BasicSurface::remove_observer(std::weak_ptr<SurfaceObserver> const& observer) |
424 | @@ -742,8 +770,6 @@ |
425 | if (!o) |
426 | BOOST_THROW_EXCEPTION(std::runtime_error("Invalid observer (previously destroyed)")); |
427 | observers.remove(o); |
428 | - for (auto& info : layers) |
429 | - info.stream->remove_observer(observer); |
430 | } |
431 | |
432 | std::shared_ptr<ms::Surface> ms::BasicSurface::parent() const |
433 | @@ -844,15 +870,28 @@ |
434 | |
435 | void ms::BasicSurface::set_streams(std::list<scene::StreamInfo> const& s) |
436 | { |
437 | - std::unique_lock<std::mutex> lk(guard); |
438 | - |
439 | - if (s.end() == std::find_if(s.begin(), s.end(), |
440 | - [this] (ms::StreamInfo const& info) { return info.stream == surface_buffer_stream; })) |
441 | { |
442 | - BOOST_THROW_EXCEPTION(std::logic_error("cannot remove the created-with buffer stream yet")); |
443 | + std::unique_lock<std::mutex> lk(guard); |
444 | + |
445 | + if (s.end() == std::find_if(s.begin(), s.end(), |
446 | + [this] (ms::StreamInfo const& info) { return info.stream == surface_buffer_stream; })) |
447 | + { |
448 | + BOOST_THROW_EXCEPTION(std::logic_error("cannot remove the created-with buffer stream yet")); |
449 | + } |
450 | + |
451 | + stream_observers.for_each([this](std::shared_ptr<StreamObserver> const& observer) { |
452 | + for(auto& layer : layers) |
453 | + layer.stream->remove_observer(observer); |
454 | + }); |
455 | + |
456 | + layers = s; |
457 | + |
458 | + stream_observers.for_each([this](std::shared_ptr<StreamObserver> const& observer) { |
459 | + for(auto& layer : layers) |
460 | + layer.stream->add_observer(observer); |
461 | + }); |
462 | } |
463 | - |
464 | - layers = s; |
465 | + observers.streams_repositioned(); |
466 | } |
467 | |
468 | mg::RenderableList ms::BasicSurface::generate_renderables(mc::CompositorID id) const |
469 | |
470 | === modified file 'src/server/scene/basic_surface.h' |
471 | --- src/server/scene/basic_surface.h 2015-06-04 11:32:52 +0000 |
472 | +++ src/server/scene/basic_surface.h 2015-06-10 12:39:17 +0000 |
473 | @@ -22,6 +22,7 @@ |
474 | #include "mir/scene/surface.h" |
475 | #include "mir/basic_observers.h" |
476 | #include "mir/scene/surface_observers.h" |
477 | +#include "mir/scene/stream_observers.h" |
478 | |
479 | #include "mir/geometry/rectangle.h" |
480 | |
481 | @@ -139,6 +140,8 @@ |
482 | |
483 | void add_observer(std::shared_ptr<SurfaceObserver> const& observer) override; |
484 | void remove_observer(std::weak_ptr<SurfaceObserver> const& observer) override; |
485 | + void add_observer(std::shared_ptr<StreamObserver> const& observer) override; |
486 | + void remove_observer(std::weak_ptr<StreamObserver> const& observer) override; |
487 | |
488 | int dpi() const; |
489 | |
490 | @@ -157,6 +160,8 @@ |
491 | MirOrientationMode set_preferred_orientation(MirOrientationMode mode); |
492 | |
493 | SurfaceObservers observers; |
494 | + StreamObservers stream_observers; |
495 | + |
496 | std::mutex mutable guard; |
497 | std::string surface_name; |
498 | geometry::Rectangle surface_rect; |
499 | |
500 | === modified file 'src/server/scene/legacy_scene_change_notification.cpp' |
501 | --- src/server/scene/legacy_scene_change_notification.cpp 2015-06-01 16:19:11 +0000 |
502 | +++ src/server/scene/legacy_scene_change_notification.cpp 2015-06-10 12:39:17 +0000 |
503 | @@ -19,6 +19,7 @@ |
504 | #include "legacy_surface_change_notification.h" |
505 | |
506 | #include "mir/scene/legacy_scene_change_notification.h" |
507 | +#include "legacy_stream_change_notification.h" |
508 | #include "mir/scene/surface.h" |
509 | |
510 | #include <boost/throw_exception.hpp> |
511 | @@ -48,9 +49,9 @@ |
512 | was_visible = surface->visible(); |
513 | }; |
514 | |
515 | - auto observer = std::make_shared<ms::LegacySurfaceChangeNotification>( |
516 | - notifier, buffer_notify_change); |
517 | + auto observer = std::make_shared<ms::LegacySurfaceChangeNotification>(notifier); |
518 | surface->add_observer(observer); |
519 | + surface->add_observer(std::make_shared<ms::LegacyStreamChangeNotification>(buffer_notify_change)); |
520 | |
521 | { |
522 | std::unique_lock<decltype(surface_observers_guard)> lg(surface_observers_guard); |
523 | |
524 | === added file 'src/server/scene/legacy_stream_change_notification.cpp' |
525 | --- src/server/scene/legacy_stream_change_notification.cpp 1970-01-01 00:00:00 +0000 |
526 | +++ src/server/scene/legacy_stream_change_notification.cpp 2015-06-10 12:39:17 +0000 |
527 | @@ -0,0 +1,37 @@ |
528 | +/* |
529 | + * Copyright © 2015 Canonical Ltd. |
530 | + * |
531 | + * This program is free software: you can redistribute it and/or modify it |
532 | + * under the terms of the GNU General Public License version 3, |
533 | + * as published by the Free Software Foundation. |
534 | + * |
535 | + * This program is distributed in the hope that it will be useful, |
536 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
537 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
538 | + * GNU General Public License for more details. |
539 | + * |
540 | + * You should have received a copy of the GNU General Public License |
541 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
542 | + * |
543 | + * Authored by: Kevin DuBois <kevin.dubois@canonical.com> |
544 | + */ |
545 | + |
546 | +#include "legacy_stream_change_notification.h" |
547 | + |
548 | +namespace ms = mir::scene; |
549 | +namespace geom = mir::geometry; |
550 | + |
551 | +ms::LegacyStreamChangeNotification::LegacyStreamChangeNotification( |
552 | + std::function<void(int)> const& notify_buffer_change) : |
553 | + notify_buffer_change(notify_buffer_change) |
554 | +{ |
555 | +} |
556 | + |
557 | +void ms::LegacyStreamChangeNotification::frame_posted(int frames_available) |
558 | +{ |
559 | + notify_buffer_change(frames_available); |
560 | +} |
561 | + |
562 | +void ms::LegacyStreamChangeNotification::resized_to(geom::Size const&) |
563 | +{ |
564 | +} |
565 | |
566 | === added file 'src/server/scene/legacy_stream_change_notification.h' |
567 | --- src/server/scene/legacy_stream_change_notification.h 1970-01-01 00:00:00 +0000 |
568 | +++ src/server/scene/legacy_stream_change_notification.h 2015-06-10 12:39:17 +0000 |
569 | @@ -0,0 +1,45 @@ |
570 | +/* |
571 | + * Copyright © 2015 Canonical Ltd. |
572 | + * |
573 | + * This program is free software: you can redistribute it and/or modify it |
574 | + * under the terms of the GNU General Public License version 3, |
575 | + * as published by the Free Software Foundation. |
576 | + * |
577 | + * This program is distributed in the hope that it will be useful, |
578 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
579 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
580 | + * GNU General Public License for more details. |
581 | + * |
582 | + * You should have received a copy of the GNU General Public License |
583 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
584 | + * |
585 | + * Authored by: Kevin DuBois <kevin.dubois@canonical.com> |
586 | + */ |
587 | + |
588 | +#ifndef MIR_SCENE_LEGACY_STREAM_CHANGE_NOTIFICATION_H_ |
589 | +#define MIR_SCENE_LEGACY_STREAM_CHANGE_NOTIFICATION_H_ |
590 | + |
591 | +#include "mir/scene/stream_observer.h" |
592 | + |
593 | +#include <functional> |
594 | + |
595 | +namespace ms = mir::scene; |
596 | +namespace geom = mir::geometry; |
597 | + |
598 | +namespace mir |
599 | +{ |
600 | +namespace scene |
601 | +{ |
602 | +class LegacyStreamChangeNotification : public ms::StreamObserver |
603 | +{ |
604 | +public: |
605 | + LegacyStreamChangeNotification(std::function<void(int)> const& stream_change); |
606 | + void frame_posted(int frames_available) override; |
607 | + void resized_to(geometry::Size const& size) override; |
608 | +private: |
609 | + std::function<void(int)> const notify_buffer_change; |
610 | +}; |
611 | +} |
612 | +} |
613 | + |
614 | +#endif // MIR_SCENE_LEGACY_STREAM_CHANGE_NOTIFICATION_H_ |
615 | |
616 | === modified file 'src/server/scene/legacy_surface_change_notification.cpp' |
617 | --- src/server/scene/legacy_surface_change_notification.cpp 2015-04-09 08:57:24 +0000 |
618 | +++ src/server/scene/legacy_surface_change_notification.cpp 2015-06-10 12:39:17 +0000 |
619 | @@ -24,10 +24,8 @@ |
620 | namespace geom = mir::geometry; |
621 | |
622 | ms::LegacySurfaceChangeNotification::LegacySurfaceChangeNotification( |
623 | - std::function<void()> const& notify_scene_change, |
624 | - std::function<void(int)> const& notify_buffer_change) : |
625 | - notify_scene_change(notify_scene_change), |
626 | - notify_buffer_change(notify_buffer_change) |
627 | + std::function<void()> const& notify_scene_change) : |
628 | + notify_scene_change(notify_scene_change) |
629 | { |
630 | } |
631 | |
632 | @@ -46,9 +44,9 @@ |
633 | notify_scene_change(); |
634 | } |
635 | |
636 | -void ms::LegacySurfaceChangeNotification::frame_posted(int frames_available) |
637 | +void ms::LegacySurfaceChangeNotification::streams_repositioned() |
638 | { |
639 | - notify_buffer_change(frames_available); |
640 | + notify_scene_change(); |
641 | } |
642 | |
643 | void ms::LegacySurfaceChangeNotification::alpha_set_to(float /*alpha*/) |
644 | |
645 | === modified file 'src/server/scene/legacy_surface_change_notification.h' |
646 | --- src/server/scene/legacy_surface_change_notification.h 2015-04-09 08:57:24 +0000 |
647 | +++ src/server/scene/legacy_surface_change_notification.h 2015-06-10 12:39:17 +0000 |
648 | @@ -33,14 +33,11 @@ |
649 | class LegacySurfaceChangeNotification : public ms::SurfaceObserver |
650 | { |
651 | public: |
652 | - LegacySurfaceChangeNotification( |
653 | - std::function<void()> const& notify_scene_change, |
654 | - std::function<void(int)> const& notify_buffer_change); |
655 | + LegacySurfaceChangeNotification(std::function<void()> const& notify_scene_change); |
656 | |
657 | void resized_to(geometry::Size const& /*size*/) override; |
658 | void moved_to(geometry::Point const& /*top_left*/) override; |
659 | void hidden_set_to(bool /*hide*/) override; |
660 | - void frame_posted(int frames_available) override; |
661 | void alpha_set_to(float /*alpha*/) override; |
662 | void orientation_set_to(MirOrientation orientation) override; |
663 | void transformation_set_to(glm::mat4 const& /*t*/) override; |
664 | @@ -50,10 +47,10 @@ |
665 | void client_surface_close_requested() override; |
666 | void keymap_changed(xkb_rule_names const& names) override; |
667 | void renamed(char const*) override; |
668 | + void streams_repositioned() override; |
669 | |
670 | private: |
671 | std::function<void()> const notify_scene_change; |
672 | - std::function<void(int)> const notify_buffer_change; |
673 | }; |
674 | } |
675 | } |
676 | |
677 | === modified file 'src/server/scene/null_surface_observer.cpp' |
678 | --- src/server/scene/null_surface_observer.cpp 2015-04-09 08:57:24 +0000 |
679 | +++ src/server/scene/null_surface_observer.cpp 2015-06-10 12:39:17 +0000 |
680 | @@ -17,6 +17,7 @@ |
681 | */ |
682 | |
683 | #include "mir/scene/null_surface_observer.h" |
684 | +#include "mir/scene/null_stream_observer.h" |
685 | |
686 | namespace ms = mir::scene; |
687 | namespace mg = mir::graphics; |
688 | @@ -25,7 +26,6 @@ |
689 | void ms::NullSurfaceObserver::resized_to(geometry::Size const& /*size*/) {} |
690 | void ms::NullSurfaceObserver::moved_to(geometry::Point const& /*top_left*/) {} |
691 | void ms::NullSurfaceObserver::hidden_set_to(bool /*hide*/) {} |
692 | -void ms::NullSurfaceObserver::frame_posted(int /*frames_available*/) {} |
693 | void ms::NullSurfaceObserver::alpha_set_to(float /*alpha*/) {} |
694 | void ms::NullSurfaceObserver::orientation_set_to(MirOrientation /*orientation*/) {} |
695 | void ms::NullSurfaceObserver::transformation_set_to(glm::mat4 const& /*t*/) {} |
696 | @@ -34,3 +34,7 @@ |
697 | void ms::NullSurfaceObserver::client_surface_close_requested() {} |
698 | void ms::NullSurfaceObserver::keymap_changed(xkb_rule_names const& /* names */) {} |
699 | void ms::NullSurfaceObserver::renamed(char const*) {} |
700 | +void ms::NullSurfaceObserver::streams_repositioned() {} |
701 | + |
702 | +void ms::NullStreamObserver::frame_posted(int /*frames_available*/) {} |
703 | +void ms::NullStreamObserver::resized_to(geometry::Size const& /*size*/) {} |
704 | |
705 | === added file 'src/server/scene/stream_change_notification.h' |
706 | --- src/server/scene/stream_change_notification.h 1970-01-01 00:00:00 +0000 |
707 | +++ src/server/scene/stream_change_notification.h 2015-06-10 12:39:17 +0000 |
708 | @@ -0,0 +1,45 @@ |
709 | +/* |
710 | + * Copyright © 2015 Canonical Ltd. |
711 | + * |
712 | + * This program is free software: you can redistribute it and/or modify it |
713 | + * under the terms of the GNU General Public License version 3, |
714 | + * as published by the Free Software Foundation. |
715 | + * |
716 | + * This program is distributed in the hope that it will be useful, |
717 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
718 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
719 | + * GNU General Public License for more details. |
720 | + * |
721 | + * You should have received a copy of the GNU General Public License |
722 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
723 | + * |
724 | + * Authored by: Kevin DuBois <kevin.dubois@canonical.com> |
725 | + */ |
726 | + |
727 | +#ifndef MIR_SCENE_STREAM_CHANGE_NOTIFICATION_H_ |
728 | +#define MIR_SCENE_STREAM_CHANGE_NOTIFICATION_H_ |
729 | + |
730 | +#include "mir/scene/surface_observer.h" |
731 | + |
732 | +#include <functional> |
733 | + |
734 | +namespace ms = mir::scene; |
735 | +namespace geom = mir::geometry; |
736 | + |
737 | +namespace mir |
738 | +{ |
739 | +namespace scene |
740 | +{ |
741 | +class LegacySurfaceChangeNotification : public ms::SurfaceObserver |
742 | +{ |
743 | +public: |
744 | + LegacySurfaceChangeNotification(std::function<void(int)> const& notify_buffer_change); |
745 | + void resized_to(geometry::Size const& /*size*/) override; |
746 | + void frame_posted(int frames_available) override; |
747 | +private: |
748 | + std::function<void()> const notify_scene_change; |
749 | +}; |
750 | +} |
751 | +} |
752 | + |
753 | +#endif // MIR_SCENE_STREAM_CHANGE_NOTIFICATION_H_ |
754 | |
755 | === modified file 'src/server/shell/surface_ready_observer.cpp' |
756 | --- src/server/shell/surface_ready_observer.cpp 2015-05-18 19:58:07 +0000 |
757 | +++ src/server/shell/surface_ready_observer.cpp 2015-06-10 12:39:17 +0000 |
758 | @@ -43,3 +43,7 @@ |
759 | s->remove_observer(shared_from_this()); |
760 | } |
761 | } |
762 | + |
763 | +void msh::SurfaceReadyObserver::resized_to(mir::geometry::Size const&) |
764 | +{ |
765 | +} |
766 | |
767 | === modified file 'src/server/symbols.map' |
768 | --- src/server/symbols.map 2015-06-09 07:20:56 +0000 |
769 | +++ src/server/symbols.map 2015-06-10 12:39:17 +0000 |
770 | @@ -71,11 +71,12 @@ |
771 | mir::scene::NullSessionListener::?NullSessionListener*; |
772 | mir::scene::NullSessionListener::NullSessionListener*; |
773 | mir::scene::NullSessionListener::operator*; |
774 | + mir::scene::NullStreamObserver::frame_posted*; |
775 | + mir::scene::NullStreamObserver::resized_to*; |
776 | mir::scene::NullSurfaceObserver::alpha_set_to*; |
777 | mir::scene::NullSurfaceObserver::attrib_changed*; |
778 | mir::scene::NullSurfaceObserver::client_surface_close_requested*; |
779 | mir::scene::NullSurfaceObserver::cursor_image_set_to*; |
780 | - mir::scene::NullSurfaceObserver::frame_posted*; |
781 | mir::scene::NullSurfaceObserver::hidden_set_to*; |
782 | mir::scene::NullSurfaceObserver::keymap_changed*; |
783 | mir::scene::NullSurfaceObserver::moved_to*; |
784 | @@ -87,6 +88,7 @@ |
785 | mir::scene::NullSurfaceObserver::resized_to*; |
786 | mir::scene::NullSurfaceObserver::transformation_set_to*; |
787 | mir::scene::NullSurfaceObserver::renamed*; |
788 | + mir::scene::NullSurfaceObserver::streams_repositioned*; |
789 | mir::scene::Observer::?Observer*; |
790 | mir::scene::Observer::Observer*; |
791 | mir::scene::Observer::operator*; |
792 | @@ -280,11 +282,12 @@ |
793 | non-virtual?thunk?to?mir::LockableCallback::?LockableCallback*; |
794 | non-virtual?thunk?to?mir::scene::CoordinateTranslator::?CoordinateTranslator*; |
795 | non-virtual?thunk?to?mir::scene::NullSessionListener::?NullSessionListener*; |
796 | + non-virtual?thunk?to?mir::scene::NullStreamObserver::frame_posted*; |
797 | + non-virtual?thunk?to?mir::scene::NullStreamObserver::resized_to*; |
798 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::alpha_set_to*; |
799 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::attrib_changed*; |
800 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::client_surface_close_requested*; |
801 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::cursor_image_set_to*; |
802 | - non-virtual?thunk?to?mir::scene::NullSurfaceObserver::frame_posted*; |
803 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::hidden_set_to*; |
804 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::keymap_changed*; |
805 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::moved_to*; |
806 | @@ -292,6 +295,7 @@ |
807 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::orientation_set_to*; |
808 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::reception_mode_set_to*; |
809 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::resized_to*; |
810 | + non-virtual?thunk?to?mir::scene::NullSurfaceObserver::streams_repositioned*; |
811 | non-virtual?thunk?to?mir::scene::NullSurfaceObserver::transformation_set_to*; |
812 | non-virtual?thunk?to?mir::scene::Observer::?Observer*; |
813 | non-virtual?thunk?to?mir::scene::PlacementStrategy::?PlacementStrategy*; |
814 | @@ -375,6 +379,7 @@ |
815 | typeinfo?for?mir::MainLoop; |
816 | typeinfo?for?mir::scene::CoordinateTranslator; |
817 | typeinfo?for?mir::scene::NullSessionListener; |
818 | + typeinfo?for?mir::scene::NullStreamObserver; |
819 | typeinfo?for?mir::scene::NullSurfaceObserver; |
820 | typeinfo?for?mir::scene::Observer; |
821 | typeinfo?for?mir::scene::PlacementStrategy; |
822 | @@ -432,6 +437,7 @@ |
823 | vtable?for?mir::MainLoop; |
824 | vtable?for?mir::scene::CoordinateTranslator; |
825 | vtable?for?mir::scene::NullSessionListener; |
826 | + vtable?for?mir::scene::NullStreamObserver; |
827 | vtable?for?mir::scene::NullSurfaceObserver; |
828 | vtable?for?mir::scene::Observer; |
829 | vtable?for?mir::scene::PlacementStrategy; |
830 | |
831 | === modified file 'tests/include/mir_test_doubles/mock_buffer_stream.h' |
832 | --- tests/include/mir_test_doubles/mock_buffer_stream.h 2015-05-29 13:48:13 +0000 |
833 | +++ tests/include/mir_test_doubles/mock_buffer_stream.h 2015-06-10 12:39:17 +0000 |
834 | @@ -58,8 +58,8 @@ |
835 | MOCK_METHOD1(release_client_buffer, void(graphics::Buffer*)); |
836 | MOCK_METHOD1(lock_compositor_buffer, |
837 | std::shared_ptr<graphics::Buffer>(void const*)); |
838 | - MOCK_METHOD1(add_observer, void(std::shared_ptr<scene::SurfaceObserver> const&)); |
839 | - MOCK_METHOD1(remove_observer, void(std::weak_ptr<scene::SurfaceObserver> const&)); |
840 | + MOCK_METHOD1(add_observer, void(std::shared_ptr<scene::StreamObserver> const&)); |
841 | + MOCK_METHOD1(remove_observer, void(std::weak_ptr<scene::StreamObserver> const&)); |
842 | |
843 | MOCK_METHOD0(get_stream_pixel_format, MirPixelFormat()); |
844 | MOCK_METHOD0(stream_size, geometry::Size()); |
845 | |
846 | === modified file 'tests/include/mir_test_doubles/mock_surface.h' |
847 | --- tests/include/mir_test_doubles/mock_surface.h 2015-05-19 21:34:34 +0000 |
848 | +++ tests/include/mir_test_doubles/mock_surface.h 2015-06-10 12:39:17 +0000 |
849 | @@ -68,6 +68,8 @@ |
850 | MOCK_METHOD2(configure, int(MirSurfaceAttrib, int)); |
851 | MOCK_METHOD1(add_observer, void(std::shared_ptr<scene::SurfaceObserver> const&)); |
852 | MOCK_METHOD1(remove_observer, void(std::weak_ptr<scene::SurfaceObserver> const&)); |
853 | + MOCK_METHOD1(add_observer, void(std::shared_ptr<scene::StreamObserver> const&)); |
854 | + MOCK_METHOD1(remove_observer, void(std::weak_ptr<scene::StreamObserver> const&)); |
855 | MOCK_CONST_METHOD0(primary_buffer_stream, std::shared_ptr<frontend::BufferStream>()); |
856 | }; |
857 | |
858 | |
859 | === modified file 'tests/include/mir_test_doubles/stub_buffer_stream.h' |
860 | --- tests/include/mir_test_doubles/stub_buffer_stream.h 2015-05-19 21:34:34 +0000 |
861 | +++ tests/include/mir_test_doubles/stub_buffer_stream.h 2015-06-10 12:39:17 +0000 |
862 | @@ -76,8 +76,8 @@ |
863 | fn(*stub_compositor_buffer); |
864 | } |
865 | MirPixelFormat pixel_format() const { return mir_pixel_format_abgr_8888; } |
866 | - void add_observer(std::shared_ptr<scene::SurfaceObserver> const&) {} |
867 | - void remove_observer(std::weak_ptr<scene::SurfaceObserver> const&) {} |
868 | + void add_observer(std::shared_ptr<scene::StreamObserver> const&) {} |
869 | + void remove_observer(std::weak_ptr<scene::StreamObserver> const&) {} |
870 | bool has_submitted_buffer() const { return true; } |
871 | |
872 | StubBuffer stub_client_buffer; |
873 | |
874 | === modified file 'tests/include/mir_test_doubles/stub_scene_surface.h' |
875 | --- tests/include/mir_test_doubles/stub_scene_surface.h 2015-05-29 13:48:13 +0000 |
876 | +++ tests/include/mir_test_doubles/stub_scene_surface.h 2015-06-10 12:39:17 +0000 |
877 | @@ -80,6 +80,8 @@ |
878 | void set_alpha(float) override {} |
879 | void set_orientation(MirOrientation) {} |
880 | |
881 | + void add_observer(std::shared_ptr<scene::StreamObserver> const&) override {} |
882 | + void remove_observer(std::weak_ptr<scene::StreamObserver> const&) override {} |
883 | void add_observer(std::shared_ptr<scene::SurfaceObserver> const&) override {} |
884 | void remove_observer(std::weak_ptr<scene::SurfaceObserver> const&) override {} |
885 | |
886 | |
887 | === modified file 'tests/unit-tests/compositor/test_buffer_stream.cpp' |
888 | --- tests/unit-tests/compositor/test_buffer_stream.cpp 2015-05-19 21:34:34 +0000 |
889 | +++ tests/unit-tests/compositor/test_buffer_stream.cpp 2015-06-10 12:39:17 +0000 |
890 | @@ -17,7 +17,7 @@ |
891 | */ |
892 | |
893 | #include "src/server/compositor/buffer_stream_surfaces.h" |
894 | -#include "src/server/scene/legacy_surface_change_notification.h" |
895 | +#include "src/server/scene/legacy_stream_change_notification.h" |
896 | |
897 | #include "mir_test_doubles/stub_buffer.h" |
898 | #include "mir_test_doubles/mock_buffer_bundle.h" |
899 | @@ -222,8 +222,7 @@ |
900 | }; |
901 | NiceMock<MockCallback> mock_cb; |
902 | EXPECT_CALL(mock_cb, call()).Times(3); |
903 | - auto observer = std::make_shared<mir::scene::LegacySurfaceChangeNotification>( |
904 | - []{ FAIL() << "buffer stream shouldnt notify of scene changes.";}, |
905 | + auto observer = std::make_shared<mir::scene::LegacyStreamChangeNotification>( |
906 | std::bind(&MockCallback::call, &mock_cb)); |
907 | |
908 | mc::BufferStreamSurfaces buffer_stream(mock_bundle); |
909 | |
910 | === modified file 'tests/unit-tests/scene/test_basic_surface.cpp' |
911 | --- tests/unit-tests/scene/test_basic_surface.cpp 2015-06-04 11:24:07 +0000 |
912 | +++ tests/unit-tests/scene/test_basic_surface.cpp 2015-06-10 12:39:17 +0000 |
913 | @@ -93,7 +93,7 @@ |
914 | std::shared_ptr<ms::SceneReport> const report = mr::null_scene_report(); |
915 | void const* compositor_id{nullptr}; |
916 | std::shared_ptr<ms::LegacySurfaceChangeNotification> observer = |
917 | - std::make_shared<ms::LegacySurfaceChangeNotification>(mock_change_cb, [this](int){mock_change_cb();}); |
918 | + std::make_shared<ms::LegacySurfaceChangeNotification>(mock_change_cb); |
919 | std::shared_ptr<mi::InputSender> const stub_input_sender = std::make_shared<mtd::StubInputSender>(); |
920 | testing::NiceMock<mtd::MockInputSender> mock_sender; |
921 | |
922 | |
923 | === modified file 'tests/unit-tests/scene/test_legacy_scene_change_notification.cpp' |
924 | --- tests/unit-tests/scene/test_legacy_scene_change_notification.cpp 2015-06-01 16:19:11 +0000 |
925 | +++ tests/unit-tests/scene/test_legacy_scene_change_notification.cpp 2015-06-10 12:39:17 +0000 |
926 | @@ -66,7 +66,8 @@ |
927 | |
928 | TEST_F(LegacySceneChangeNotificationTest, registers_observer_with_surfaces) |
929 | { |
930 | - EXPECT_CALL(surface, add_observer(testing::_)) |
931 | + using namespace testing; |
932 | + EXPECT_CALL(surface, add_observer(Matcher<std::shared_ptr<ms::SurfaceObserver> const&>(_))) |
933 | .Times(1); |
934 | |
935 | ms::LegacySceneChangeNotification observer(scene_change_callback, buffer_change_callback); |
936 | @@ -75,7 +76,8 @@ |
937 | |
938 | TEST_F(LegacySceneChangeNotificationTest, registers_observer_with_existing_surfaces) |
939 | { |
940 | - EXPECT_CALL(surface, add_observer(testing::_)) |
941 | + using namespace testing; |
942 | + EXPECT_CALL(surface, add_observer(Matcher<std::shared_ptr<ms::SurfaceObserver> const&>(_))) |
943 | .Times(1); |
944 | |
945 | ms::LegacySceneChangeNotification observer(scene_change_callback, buffer_change_callback); |
946 | @@ -85,8 +87,8 @@ |
947 | TEST_F(LegacySceneChangeNotificationTest, observes_surface_changes) |
948 | { |
949 | using namespace ::testing; |
950 | - std::shared_ptr<ms::SurfaceObserver> surface_observer; |
951 | - EXPECT_CALL(surface, add_observer(_)).Times(1) |
952 | + std::shared_ptr<ms::StreamObserver> surface_observer; |
953 | + EXPECT_CALL(surface, add_observer(Matcher<std::shared_ptr<ms::StreamObserver> const&>(_))) |
954 | .WillOnce(SaveArg<0>(&surface_observer)); |
955 | |
956 | int buffer_num{3}; |
957 | @@ -104,7 +106,7 @@ |
958 | |
959 | std::shared_ptr<ms::SurfaceObserver> surface_observer; |
960 | |
961 | - EXPECT_CALL(surface, add_observer(_)).Times(1) |
962 | + EXPECT_CALL(surface, add_observer(Matcher<std::shared_ptr<ms::SurfaceObserver> const&>(_))) |
963 | .WillOnce(SaveArg<0>(&surface_observer)); |
964 | EXPECT_CALL(scene_callback, invoke()).Times(1); |
965 | |
966 | @@ -118,9 +120,9 @@ |
967 | { |
968 | using namespace ::testing; |
969 | |
970 | - EXPECT_CALL(surface, add_observer(_)) |
971 | + EXPECT_CALL(surface, add_observer(Matcher<std::shared_ptr<ms::SurfaceObserver> const&>(_))) |
972 | .Times(1); |
973 | - EXPECT_CALL(surface, remove_observer(_)) |
974 | + EXPECT_CALL(surface, remove_observer(Matcher<std::weak_ptr<ms::SurfaceObserver> const&>(_))) |
975 | .Times(1); |
976 | { |
977 | ms::LegacySceneChangeNotification observer(scene_change_callback, buffer_change_callback); |
978 | @@ -131,9 +133,9 @@ |
979 | TEST_F(LegacySceneChangeNotificationTest, ending_observation_unregisters_observers) |
980 | { |
981 | using namespace ::testing; |
982 | - EXPECT_CALL(surface, add_observer(_)) |
983 | + EXPECT_CALL(surface, add_observer(Matcher<std::shared_ptr<ms::SurfaceObserver> const&>(_))) |
984 | .Times(1); |
985 | - EXPECT_CALL(surface, remove_observer(_)) |
986 | + EXPECT_CALL(surface, remove_observer(Matcher<std::weak_ptr<ms::SurfaceObserver> const&>(_))) |
987 | .Times(1); |
988 | |
989 | ms::LegacySceneChangeNotification observer(scene_change_callback, buffer_change_callback); |
PASSED: Continuous integration, rev:2642 jenkins. qa.ubuntu. com/job/ mir-ci/ 4068/ jenkins. qa.ubuntu. com/job/ mir-android- vivid-i386- build/2800 jenkins. qa.ubuntu. com/job/ mir-clang- wily-amd64- build/313 jenkins. qa.ubuntu. com/job/ mir-mediumtests -vivid- touch/2748 jenkins. qa.ubuntu. com/job/ mir-wily- amd64-ci/ 224 jenkins. qa.ubuntu. com/job/ mir-wily- amd64-ci/ 224/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ mir-mediumtests -builder- vivid-armhf/ 2748 jenkins. qa.ubuntu. com/job/ mir-mediumtests -builder- vivid-armhf/ 2748/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ mir-mediumtests -runner- mako/5585 s-jenkins. ubuntu- ci:8080/ job/touch- flash-device/ 21098
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/mir- ci/4068/ rebuild
http://