Mir

Merge lp:~kdub/mir/sort-out-surface-observers into lp:mir

Proposed by Kevin DuBois
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
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 BufferStreamObserver can notify of frame posting and resize of a buffer stream. The surface observer no longer notifies of a new frame (as it doesn't know what the streams are doing), but it can notify that the stacking of the streams has changed.

Description of the change

Sort out the observers structure by introducing a StreamObserver. The BufferStreamObserver can notify of frame posting and resize of a buffer stream. The surface observer no longer notifies of a new frame (as it doesn't know what the streams are doing), but it can notify that the stacking of the streams has changed.

In the review of ~kdub/mir/surface-has-a-bufferstream, Alexandros pointed in this comment (https://code.launchpad.net/~kdub/mir/surface-has-a-bufferstream/+merge/257559/comments/642904)
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::BufferStreamObserver
but it seems to me that these are two different operations, so they are separate in this MP.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

*Needs Discussion*

397 +void ms::BasicSurface::add_observer(std::shared_ptr<StreamObserver> const& observer)

I'm not convinced that the Surface (and not the SurfaceObserver) is responsible for adding StreamObservers.

My instinct would be for LegacySurfaceChangeNotification::stream_added() to register a stream observer.

review: Needs Information
Revision history for this message
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 SurfaceReadyObserver : public scene::NullStreamObserver,

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 SurfaceReadyObserver be a SurfaceObserver right?

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!

review: Approve
Revision history for this message
Kevin DuBois (kdub) wrote :

Will see if I can root out the requirement on Surface tomorrow.

Revision history for this message
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...

review: Abstain
Revision history for this message
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

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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);

Subscribers

People subscribed via source and target branches