Merge lp:~raof/mir/buffer-age-misc-cleanups into lp:~mir-team/mir/trunk
- buffer-age-misc-cleanups
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Alan Griffiths |
Approved revision: | no longer in the source branch. |
Merged at revision: | 536 |
Proposed branch: | lp:~raof/mir/buffer-age-misc-cleanups |
Merge into: | lp:~mir-team/mir/trunk |
Diff against target: |
549 lines (+156/-58) 14 files modified
src/client/android/android_client_buffer_factory.cpp (+2/-2) src/client/android/android_client_buffer_factory.h (+2/-2) src/client/client_buffer_depository.cpp (+2/-2) src/client/client_buffer_depository.h (+2/-2) src/client/client_buffer_factory.h (+7/-1) src/client/client_platform.h (+1/-1) src/client/gbm/gbm_client_buffer_factory.cpp (+1/-1) src/client/gbm/gbm_client_buffer_factory.h (+1/-1) src/client/gbm/gbm_client_platform.h (+1/-1) src/client/mir_connection.cpp (+1/-2) src/client/mir_surface.cpp (+4/-4) src/client/mir_surface.h (+3/-3) tests/unit-tests/client/test_client_buffer_depository.cpp (+22/-15) tests/unit-tests/client/test_client_mir_surface.cpp (+107/-21) |
To merge this branch: | bzr merge lp:~raof/mir/buffer-age-misc-cleanups |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Alexandros Frantzis (community) | Approve | ||
Alan Griffiths | Approve | ||
PS Jenkins bot (community) | continuous-integration | Approve | |
Review via email: mp+155164@code.launchpad.net |
Commit message
Miscellaneous cleanups left over from non-blocking merge reviews of
lp:~raof/mir/client-side-buffer-age.
Description of the change
Miscellaneous cleanups left over from non-blocking merge reviews of
lp:~raof/mir/client-side-buffer-age.
PS Jenkins bot (ps-jenkins) wrote : | # |
Alan Griffiths (alan-griffiths) wrote : | # |
180 - buffer_
181 logger(logger)
182 {
183 + buffer_depository = std::make_
184 +
Use initializers where possible. Vis:
buffer_
~~~~
in test_client_
226 +#include <cstring>
227 +
Is anything from this header used?
~~~~
$ bin/unit-tests --gtest_
66
Robert Carr (robertcarr) wrote : | # |
Looks good to me besides Alan's comments.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:503
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
Click here to trigger a rebuild:
http://
Chris Halse Rogers (raof) wrote : | # |
> in test_client_
>
>226 +#include <cstring>
>227 +
>
>Is anything from this header used?
Yes - memcmp, for the BufferPackageMa
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:504
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
Click here to trigger a rebuild:
http://
Alexandros Frantzis (afrantzis) wrote : | # |
Looks good.
Preview Diff
1 | === modified file 'src/client/android/android_client_buffer_factory.cpp' | |||
2 | --- src/client/android/android_client_buffer_factory.cpp 2013-03-20 06:14:48 +0000 | |||
3 | +++ src/client/android/android_client_buffer_factory.cpp 2013-03-26 09:39:22 +0000 | |||
4 | @@ -24,12 +24,12 @@ | |||
5 | 24 | namespace mcla=mir::client::android; | 24 | namespace mcla=mir::client::android; |
6 | 25 | namespace geom=mir::geometry; | 25 | namespace geom=mir::geometry; |
7 | 26 | 26 | ||
9 | 27 | mcla::AndroidClientBufferFactory::AndroidClientBufferFactory(std::shared_ptr<AndroidRegistrar> const &buffer_registrar) | 27 | mcla::AndroidClientBufferFactory::AndroidClientBufferFactory(std::shared_ptr<AndroidRegistrar> const& buffer_registrar) |
10 | 28 | : registrar(buffer_registrar) | 28 | : registrar(buffer_registrar) |
11 | 29 | { | 29 | { |
12 | 30 | } | 30 | } |
13 | 31 | 31 | ||
15 | 32 | std::shared_ptr<mcl::ClientBuffer> mcla::AndroidClientBufferFactory::create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const & package, geom::Size size, geom::PixelFormat pf) | 32 | std::shared_ptr<mcl::ClientBuffer> mcla::AndroidClientBufferFactory::create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const& package, geom::Size size, geom::PixelFormat pf) |
16 | 33 | { | 33 | { |
17 | 34 | return std::make_shared<mcla::AndroidClientBuffer>(registrar, package, size, pf); | 34 | return std::make_shared<mcla::AndroidClientBuffer>(registrar, package, size, pf); |
18 | 35 | } | 35 | } |
19 | 36 | 36 | ||
20 | === modified file 'src/client/android/android_client_buffer_factory.h' | |||
21 | --- src/client/android/android_client_buffer_factory.h 2013-03-20 06:14:48 +0000 | |||
22 | +++ src/client/android/android_client_buffer_factory.h 2013-03-26 09:39:22 +0000 | |||
23 | @@ -41,9 +41,9 @@ | |||
24 | 41 | class AndroidClientBufferFactory : public ClientBufferFactory | 41 | class AndroidClientBufferFactory : public ClientBufferFactory |
25 | 42 | { | 42 | { |
26 | 43 | public: | 43 | public: |
28 | 44 | explicit AndroidClientBufferFactory(std::shared_ptr<AndroidRegistrar> const &); | 44 | explicit AndroidClientBufferFactory(std::shared_ptr<AndroidRegistrar> const&); |
29 | 45 | 45 | ||
31 | 46 | virtual std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const & package, | 46 | virtual std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const& package, |
32 | 47 | geometry::Size size, geometry::PixelFormat pf); | 47 | geometry::Size size, geometry::PixelFormat pf); |
33 | 48 | private: | 48 | private: |
34 | 49 | std::shared_ptr<AndroidRegistrar> registrar; | 49 | std::shared_ptr<AndroidRegistrar> registrar; |
35 | 50 | 50 | ||
36 | === modified file 'src/client/client_buffer_depository.cpp' | |||
37 | --- src/client/client_buffer_depository.cpp 2013-03-18 05:58:51 +0000 | |||
38 | +++ src/client/client_buffer_depository.cpp 2013-03-26 09:39:22 +0000 | |||
39 | @@ -27,14 +27,14 @@ | |||
40 | 27 | 27 | ||
41 | 28 | namespace mcl=mir::client; | 28 | namespace mcl=mir::client; |
42 | 29 | 29 | ||
44 | 30 | mcl::ClientBufferDepository::ClientBufferDepository(std::shared_ptr<ClientBufferFactory> const &factory, int max_buffers) | 30 | mcl::ClientBufferDepository::ClientBufferDepository(std::shared_ptr<ClientBufferFactory> const& factory, int max_buffers) |
45 | 31 | : factory(factory), | 31 | : factory(factory), |
46 | 32 | current_buffer_iter(buffers.end()), | 32 | current_buffer_iter(buffers.end()), |
47 | 33 | max_age(max_buffers - 1) | 33 | max_age(max_buffers - 1) |
48 | 34 | { | 34 | { |
49 | 35 | } | 35 | } |
50 | 36 | 36 | ||
52 | 37 | void mcl::ClientBufferDepository::deposit_package(std::shared_ptr<mir_toolkit::MirBufferPackage> const & package, int id, geometry::Size size, geometry::PixelFormat pf) | 37 | void mcl::ClientBufferDepository::deposit_package(std::shared_ptr<mir_toolkit::MirBufferPackage> const& package, int id, geometry::Size size, geometry::PixelFormat pf) |
53 | 38 | { | 38 | { |
54 | 39 | for (auto next = buffers.begin(); next != buffers.end();) | 39 | for (auto next = buffers.begin(); next != buffers.end();) |
55 | 40 | { | 40 | { |
56 | 41 | 41 | ||
57 | === modified file 'src/client/client_buffer_depository.h' | |||
58 | --- src/client/client_buffer_depository.h 2013-03-24 23:33:49 +0000 | |||
59 | +++ src/client/client_buffer_depository.h 2013-03-26 09:39:22 +0000 | |||
60 | @@ -47,13 +47,13 @@ | |||
61 | 47 | class ClientBufferDepository | 47 | class ClientBufferDepository |
62 | 48 | { | 48 | { |
63 | 49 | public: | 49 | public: |
65 | 50 | ClientBufferDepository(std::shared_ptr<ClientBufferFactory> const &factory, int max_buffers); | 50 | ClientBufferDepository(std::shared_ptr<ClientBufferFactory> const& factory, int max_buffers); |
66 | 51 | 51 | ||
67 | 52 | /// Construct a ClientBuffer from the IPC data, and use it as the current buffer. | 52 | /// Construct a ClientBuffer from the IPC data, and use it as the current buffer. |
68 | 53 | 53 | ||
69 | 54 | /// This also marks the previous current buffer (if any) as being submitted to the server. | 54 | /// This also marks the previous current buffer (if any) as being submitted to the server. |
70 | 55 | /// \post current_buffer() will return a ClientBuffer constructed from this IPC data. | 55 | /// \post current_buffer() will return a ClientBuffer constructed from this IPC data. |
72 | 56 | void deposit_package(std::shared_ptr<mir_toolkit::MirBufferPackage> const &, int id, | 56 | void deposit_package(std::shared_ptr<mir_toolkit::MirBufferPackage> const&, int id, |
73 | 57 | geometry::Size, geometry::PixelFormat); | 57 | geometry::Size, geometry::PixelFormat); |
74 | 58 | std::shared_ptr<ClientBuffer> current_buffer(); | 58 | std::shared_ptr<ClientBuffer> current_buffer(); |
75 | 59 | 59 | ||
76 | 60 | 60 | ||
77 | === modified file 'src/client/client_buffer_factory.h' | |||
78 | --- src/client/client_buffer_factory.h 2013-03-20 06:14:48 +0000 | |||
79 | +++ src/client/client_buffer_factory.h 2013-03-26 09:39:22 +0000 | |||
80 | @@ -35,8 +35,14 @@ | |||
81 | 35 | class ClientBufferFactory | 35 | class ClientBufferFactory |
82 | 36 | { | 36 | { |
83 | 37 | public: | 37 | public: |
85 | 38 | virtual std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const & package, | 38 | virtual std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const& package, |
86 | 39 | geometry::Size size, geometry::PixelFormat pf) = 0; | 39 | geometry::Size size, geometry::PixelFormat pf) = 0; |
87 | 40 | |||
88 | 41 | protected: | ||
89 | 42 | ClientBufferFactory() = default; | ||
90 | 43 | ClientBufferFactory(ClientBufferFactory const &) = delete; | ||
91 | 44 | ClientBufferFactory &operator=(ClientBufferFactory const &) = delete; | ||
92 | 45 | virtual ~ClientBufferFactory() {} | ||
93 | 40 | }; | 46 | }; |
94 | 41 | 47 | ||
95 | 42 | } | 48 | } |
96 | 43 | 49 | ||
97 | === modified file 'src/client/client_platform.h' | |||
98 | --- src/client/client_platform.h 2013-03-24 23:33:49 +0000 | |||
99 | +++ src/client/client_platform.h 2013-03-26 09:39:22 +0000 | |||
100 | @@ -36,7 +36,7 @@ | |||
101 | 36 | ClientPlatform(const ClientPlatform& p) = delete; | 36 | ClientPlatform(const ClientPlatform& p) = delete; |
102 | 37 | ClientPlatform& operator=(const ClientPlatform& p) = delete; | 37 | ClientPlatform& operator=(const ClientPlatform& p) = delete; |
103 | 38 | 38 | ||
105 | 39 | virtual std::shared_ptr<ClientBufferFactory> create_buffer_factory () = 0; | 39 | virtual std::shared_ptr<ClientBufferFactory> create_buffer_factory() = 0; |
106 | 40 | virtual std::shared_ptr<EGLNativeWindowType> create_egl_native_window(ClientSurface *surface) = 0; | 40 | virtual std::shared_ptr<EGLNativeWindowType> create_egl_native_window(ClientSurface *surface) = 0; |
107 | 41 | virtual std::shared_ptr<EGLNativeDisplayType> create_egl_native_display() = 0; | 41 | virtual std::shared_ptr<EGLNativeDisplayType> create_egl_native_display() = 0; |
108 | 42 | }; | 42 | }; |
109 | 43 | 43 | ||
110 | === modified file 'src/client/gbm/gbm_client_buffer_factory.cpp' | |||
111 | --- src/client/gbm/gbm_client_buffer_factory.cpp 2013-03-20 23:50:00 +0000 | |||
112 | +++ src/client/gbm/gbm_client_buffer_factory.cpp 2013-03-26 09:39:22 +0000 | |||
113 | @@ -29,7 +29,7 @@ | |||
114 | 29 | { | 29 | { |
115 | 30 | } | 30 | } |
116 | 31 | 31 | ||
118 | 32 | std::shared_ptr<mcl::ClientBuffer> mclg::GBMClientBufferFactory::create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const & package, geometry::Size size, geometry::PixelFormat pf) | 32 | std::shared_ptr<mcl::ClientBuffer> mclg::GBMClientBufferFactory::create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const& package, geometry::Size size, geometry::PixelFormat pf) |
119 | 33 | { | 33 | { |
120 | 34 | return std::make_shared<mclg::GBMClientBuffer>(drm_fd_handler, package, size, pf); | 34 | return std::make_shared<mclg::GBMClientBuffer>(drm_fd_handler, package, size, pf); |
121 | 35 | } | 35 | } |
122 | 36 | 36 | ||
123 | === modified file 'src/client/gbm/gbm_client_buffer_factory.h' | |||
124 | --- src/client/gbm/gbm_client_buffer_factory.h 2013-03-20 23:50:00 +0000 | |||
125 | +++ src/client/gbm/gbm_client_buffer_factory.h 2013-03-26 09:39:22 +0000 | |||
126 | @@ -39,7 +39,7 @@ | |||
127 | 39 | public: | 39 | public: |
128 | 40 | explicit GBMClientBufferFactory(std::shared_ptr<DRMFDHandler> const& drm_fd_handler); | 40 | explicit GBMClientBufferFactory(std::shared_ptr<DRMFDHandler> const& drm_fd_handler); |
129 | 41 | 41 | ||
131 | 42 | std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const & package, | 42 | std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<mir_toolkit::MirBufferPackage> const& package, |
132 | 43 | geometry::Size size, geometry::PixelFormat pf); | 43 | geometry::Size size, geometry::PixelFormat pf); |
133 | 44 | private: | 44 | private: |
134 | 45 | std::shared_ptr<DRMFDHandler> drm_fd_handler; | 45 | std::shared_ptr<DRMFDHandler> drm_fd_handler; |
135 | 46 | 46 | ||
136 | === modified file 'src/client/gbm/gbm_client_platform.h' | |||
137 | --- src/client/gbm/gbm_client_platform.h 2013-03-24 23:33:49 +0000 | |||
138 | +++ src/client/gbm/gbm_client_platform.h 2013-03-26 09:39:22 +0000 | |||
139 | @@ -39,7 +39,7 @@ | |||
140 | 39 | std::shared_ptr<DRMFDHandler> const& drm_fd_handler, | 39 | std::shared_ptr<DRMFDHandler> const& drm_fd_handler, |
141 | 40 | EGLNativeDisplayContainer& display_container); | 40 | EGLNativeDisplayContainer& display_container); |
142 | 41 | 41 | ||
144 | 42 | std::shared_ptr<ClientBufferFactory> create_buffer_factory (); | 42 | std::shared_ptr<ClientBufferFactory> create_buffer_factory(); |
145 | 43 | std::shared_ptr<EGLNativeWindowType> create_egl_native_window(ClientSurface *surface); | 43 | std::shared_ptr<EGLNativeWindowType> create_egl_native_window(ClientSurface *surface); |
146 | 44 | std::shared_ptr<EGLNativeDisplayType> create_egl_native_display(); | 44 | std::shared_ptr<EGLNativeDisplayType> create_egl_native_display(); |
147 | 45 | 45 | ||
148 | 46 | 46 | ||
149 | === modified file 'src/client/mir_connection.cpp' | |||
150 | --- src/client/mir_connection.cpp 2013-03-24 23:33:49 +0000 | |||
151 | +++ src/client/mir_connection.cpp 2013-03-26 09:39:22 +0000 | |||
152 | @@ -66,9 +66,8 @@ | |||
153 | 66 | mir_surface_lifecycle_callback callback, | 66 | mir_surface_lifecycle_callback callback, |
154 | 67 | void * context) | 67 | void * context) |
155 | 68 | { | 68 | { |
156 | 69 | auto depository = std::make_shared<mir::client::ClientBufferDepository>(platform->create_buffer_factory(), 3); | ||
157 | 70 | auto null_log = std::make_shared<mir::client::NullLogger>(); | 69 | auto null_log = std::make_shared<mir::client::NullLogger>(); |
159 | 71 | auto surface = new MirSurface(this, server, null_log, depository, params, callback, context); | 70 | auto surface = new MirSurface(this, server, null_log, platform->create_buffer_factory(), params, callback, context); |
160 | 72 | return surface->get_create_wait_handle(); | 71 | return surface->get_create_wait_handle(); |
161 | 73 | } | 72 | } |
162 | 74 | 73 | ||
163 | 75 | 74 | ||
164 | === modified file 'src/client/mir_surface.cpp' | |||
165 | --- src/client/mir_surface.cpp 2013-03-24 23:33:49 +0000 | |||
166 | +++ src/client/mir_surface.cpp 2013-03-26 09:39:22 +0000 | |||
167 | @@ -32,13 +32,13 @@ | |||
168 | 32 | mir_toolkit::MirSurface::MirSurface( | 32 | mir_toolkit::MirSurface::MirSurface( |
169 | 33 | MirConnection *allocating_connection, | 33 | MirConnection *allocating_connection, |
170 | 34 | mp::DisplayServer::Stub & server, | 34 | mp::DisplayServer::Stub & server, |
174 | 35 | const std::shared_ptr<mir::client::Logger>& logger, | 35 | std::shared_ptr<mir::client::Logger> const& logger, |
175 | 36 | const std::shared_ptr<mcl::ClientBufferDepository>& depository, | 36 | std::shared_ptr<mcl::ClientBufferFactory> const& factory, |
176 | 37 | MirSurfaceParameters const & params, | 37 | MirSurfaceParameters const& params, |
177 | 38 | mir_surface_lifecycle_callback callback, void * context) | 38 | mir_surface_lifecycle_callback callback, void * context) |
178 | 39 | : server(server), | 39 | : server(server), |
179 | 40 | connection(allocating_connection), | 40 | connection(allocating_connection), |
181 | 41 | buffer_depository(depository), | 41 | buffer_depository(std::make_shared<mcl::ClientBufferDepository>(factory, 3)), |
182 | 42 | logger(logger) | 42 | logger(logger) |
183 | 43 | { | 43 | { |
184 | 44 | mir::protobuf::SurfaceParameters message; | 44 | mir::protobuf::SurfaceParameters message; |
185 | 45 | 45 | ||
186 | === modified file 'src/client/mir_surface.h' | |||
187 | --- src/client/mir_surface.h 2013-03-24 23:33:49 +0000 | |||
188 | +++ src/client/mir_surface.h 2013-03-26 09:39:22 +0000 | |||
189 | @@ -49,9 +49,9 @@ | |||
190 | 49 | MirSurface( | 49 | MirSurface( |
191 | 50 | MirConnection *allocating_connection, | 50 | MirConnection *allocating_connection, |
192 | 51 | mir::protobuf::DisplayServer::Stub & server, | 51 | mir::protobuf::DisplayServer::Stub & server, |
196 | 52 | const std::shared_ptr<mir::client::Logger>& logger, | 52 | std::shared_ptr<mir::client::Logger> const& logger, |
197 | 53 | const std::shared_ptr<mir::client::ClientBufferDepository>& depository, | 53 | std::shared_ptr<mir::client::ClientBufferFactory> const& buffer_factory, |
198 | 54 | MirSurfaceParameters const & params, | 54 | MirSurfaceParameters const& params, |
199 | 55 | mir_surface_lifecycle_callback callback, void * context); | 55 | mir_surface_lifecycle_callback callback, void * context); |
200 | 56 | 56 | ||
201 | 57 | ~MirSurface(); | 57 | ~MirSurface(); |
202 | 58 | 58 | ||
203 | === modified file 'tests/unit-tests/client/test_client_buffer_depository.cpp' | |||
204 | --- tests/unit-tests/client/test_client_buffer_depository.cpp 2013-03-21 07:54:30 +0000 | |||
205 | +++ tests/unit-tests/client/test_client_buffer_depository.cpp 2013-03-26 09:39:22 +0000 | |||
206 | @@ -36,6 +36,9 @@ | |||
207 | 36 | using namespace testing; | 36 | using namespace testing; |
208 | 37 | ON_CALL(*this, mark_as_submitted()) | 37 | ON_CALL(*this, mark_as_submitted()) |
209 | 38 | .WillByDefault(Invoke([this](){this->AgingBuffer::mark_as_submitted();})); | 38 | .WillByDefault(Invoke([this](){this->AgingBuffer::mark_as_submitted();})); |
210 | 39 | |||
211 | 40 | // By default we expect all buffers to be destroyed. | ||
212 | 41 | EXPECT_CALL(*this, Destroy()).Times(1); | ||
213 | 39 | } | 42 | } |
214 | 40 | 43 | ||
215 | 41 | MOCK_METHOD0(Destroy, void()); | 44 | MOCK_METHOD0(Destroy, void()); |
216 | @@ -67,7 +70,7 @@ | |||
217 | 67 | } | 70 | } |
218 | 68 | 71 | ||
219 | 69 | MOCK_METHOD3(create_buffer, | 72 | MOCK_METHOD3(create_buffer, |
221 | 70 | std::shared_ptr<mcl::ClientBuffer>(std::shared_ptr<MirBufferPackage> const &, | 73 | std::shared_ptr<mcl::ClientBuffer>(std::shared_ptr<MirBufferPackage> const&, |
222 | 71 | geom::Size, geom::PixelFormat)); | 74 | geom::Size, geom::PixelFormat)); |
223 | 72 | 75 | ||
224 | 73 | std::shared_ptr<mcl::ClientBuffer> buffer; | 76 | std::shared_ptr<mcl::ClientBuffer> buffer; |
225 | @@ -265,19 +268,23 @@ | |||
226 | 265 | depository.deposit_package(packages[0], 1, size, pf); | 268 | depository.deposit_package(packages[0], 1, size, pf); |
227 | 266 | // Raw pointer so we don't influence the buffer's life-cycle | 269 | // Raw pointer so we don't influence the buffer's life-cycle |
228 | 267 | MockBuffer *first_buffer = static_cast<MockBuffer *>(depository.current_buffer().get()); | 270 | MockBuffer *first_buffer = static_cast<MockBuffer *>(depository.current_buffer().get()); |
229 | 271 | // We expect this to not be destroyed before we deposit the fourth buffer. | ||
230 | 272 | bool buffer_destroyed = false; | ||
231 | 273 | ON_CALL(*first_buffer, Destroy()).WillByDefault(Invoke([&buffer_destroyed] () {buffer_destroyed = true;})); | ||
232 | 274 | |||
233 | 268 | 275 | ||
234 | 269 | depository.deposit_package(packages[1], 2, size, pf); | 276 | depository.deposit_package(packages[1], 2, size, pf); |
235 | 270 | depository.deposit_package(packages[2], 3, size, pf); | 277 | depository.deposit_package(packages[2], 3, size, pf); |
236 | 271 | 278 | ||
237 | 272 | // We've deposited three different buffers now; the fourth should trigger the destruction | 279 | // We've deposited three different buffers now; the fourth should trigger the destruction |
238 | 273 | // of the first buffer. | 280 | // of the first buffer. |
240 | 274 | EXPECT_CALL(*first_buffer, Destroy()); | 281 | ASSERT_FALSE(buffer_destroyed); |
241 | 275 | 282 | ||
242 | 276 | depository.deposit_package(packages[3], 4, size, pf); | 283 | depository.deposit_package(packages[3], 4, size, pf); |
243 | 277 | 284 | ||
244 | 278 | // Explicitly verify that the buffer has been destroyed here, before the depository goes out of scope | 285 | // Explicitly verify that the buffer has been destroyed here, before the depository goes out of scope |
245 | 279 | // and its destructor cleans everything up. | 286 | // and its destructor cleans everything up. |
247 | 280 | Mock::VerifyAndClearExpectations(first_buffer); | 287 | EXPECT_TRUE(buffer_destroyed); |
248 | 281 | } | 288 | } |
249 | 282 | 289 | ||
250 | 283 | TEST_F(MirBufferDepositoryTest, depositing_packages_implicitly_submits_current_buffer) | 290 | TEST_F(MirBufferDepositoryTest, depositing_packages_implicitly_submits_current_buffer) |
251 | @@ -300,33 +307,33 @@ | |||
252 | 300 | using namespace testing; | 307 | using namespace testing; |
253 | 301 | std::shared_ptr<mcl::ClientBufferDepository> depository; | 308 | std::shared_ptr<mcl::ClientBufferDepository> depository; |
254 | 302 | std::shared_ptr<MirBufferPackage> packages[10]; | 309 | std::shared_ptr<MirBufferPackage> packages[10]; |
256 | 303 | MockBuffer *buffers[10]; | 310 | bool buffer_destroyed[10]; |
257 | 304 | 311 | ||
258 | 305 | for (int num_buffers = 2; num_buffers < 10; ++num_buffers) | 312 | for (int num_buffers = 2; num_buffers < 10; ++num_buffers) |
259 | 306 | { | 313 | { |
260 | 307 | depository = std::make_shared<mcl::ClientBufferDepository>(mock_factory, num_buffers); | 314 | depository = std::make_shared<mcl::ClientBufferDepository>(mock_factory, num_buffers); |
265 | 308 | 315 | ||
266 | 309 | depository->deposit_package(packages[0], 1, size, pf); | 316 | // Reset destroyed tracking; resetting the depository will have destroyed all the buffers |
267 | 310 | // Raw pointer so we don't influence the buffer's life-cycle | 317 | for (bool& destroyed_flag : buffer_destroyed) |
268 | 311 | MockBuffer* first_buffer = static_cast<MockBuffer *>(depository->current_buffer().get()); | 318 | destroyed_flag = false; |
269 | 312 | 319 | ||
270 | 313 | int i; | 320 | int i; |
272 | 314 | for (i = 1; i < num_buffers ; ++i) | 321 | for (i = 0; i < num_buffers ; ++i) |
273 | 315 | { | 322 | { |
274 | 323 | MockBuffer *buffer; | ||
275 | 316 | depository->deposit_package(packages[i], i + 1, size, pf); | 324 | depository->deposit_package(packages[i], i + 1, size, pf); |
279 | 317 | buffers[i] = static_cast<MockBuffer *>(depository->current_buffer().get()); | 325 | buffer = static_cast<MockBuffer *>(depository->current_buffer().get()); |
280 | 318 | // None of these buffers should be destroyed | 326 | ON_CALL(*buffer, Destroy()).WillByDefault(Invoke([&buffer_destroyed, i] () {buffer_destroyed[i] = true;})); |
278 | 319 | EXPECT_CALL(*buffers[i], Destroy()).Times(0); | ||
281 | 320 | } | 327 | } |
282 | 321 | 328 | ||
283 | 322 | // Next deposit should destroy first buffer | 329 | // Next deposit should destroy first buffer |
285 | 323 | EXPECT_CALL(*first_buffer, Destroy()).Times(1); | 330 | ASSERT_FALSE(buffer_destroyed[0]); |
286 | 324 | depository->deposit_package(packages[i], i+1, size, pf); | 331 | depository->deposit_package(packages[i], i+1, size, pf); |
288 | 325 | EXPECT_TRUE(Mock::VerifyAndClearExpectations(first_buffer)); | 332 | EXPECT_TRUE(buffer_destroyed[0]); |
289 | 326 | 333 | ||
290 | 327 | // Verify none of the other buffers have been destroyed | 334 | // Verify none of the other buffers have been destroyed |
291 | 328 | for (i = 1; i < num_buffers; ++i) | 335 | for (i = 1; i < num_buffers; ++i) |
293 | 329 | EXPECT_TRUE(Mock::VerifyAndClearExpectations(buffers[i])); | 336 | EXPECT_FALSE(buffer_destroyed[i]); |
294 | 330 | } | 337 | } |
295 | 331 | } | 338 | } |
296 | 332 | 339 | ||
297 | 333 | 340 | ||
298 | === modified file 'tests/unit-tests/client/test_client_mir_surface.cpp' | |||
299 | --- tests/unit-tests/client/test_client_mir_surface.cpp 2013-03-24 23:33:49 +0000 | |||
300 | +++ tests/unit-tests/client/test_client_mir_surface.cpp 2013-03-26 09:39:22 +0000 | |||
301 | @@ -33,6 +33,8 @@ | |||
302 | 33 | #include "mir_test/test_protobuf_client.h" | 33 | #include "mir_test/test_protobuf_client.h" |
303 | 34 | #include "mir_test/gmock_fixes.h" | 34 | #include "mir_test/gmock_fixes.h" |
304 | 35 | 35 | ||
305 | 36 | #include <cstring> | ||
306 | 37 | |||
307 | 36 | #include <gtest/gtest.h> | 38 | #include <gtest/gtest.h> |
308 | 37 | #include <gmock/gmock.h> | 39 | #include <gmock/gmock.h> |
309 | 38 | 40 | ||
310 | @@ -84,11 +86,11 @@ | |||
311 | 84 | int num_fd = 2, num_data = 8; | 86 | int num_fd = 2, num_data = 8; |
312 | 85 | for (auto i=0; i<num_fd; i++) | 87 | for (auto i=0; i<num_fd; i++) |
313 | 86 | { | 88 | { |
315 | 87 | server_package.fd[i] = i*3; | 89 | server_package.fd[i] = global_buffer_id * i; |
316 | 88 | } | 90 | } |
317 | 89 | for (auto i=0; i<num_data; i++) | 91 | for (auto i=0; i<num_data; i++) |
318 | 90 | { | 92 | { |
320 | 91 | server_package.data[i] = i*2; | 93 | server_package.data[i] = (global_buffer_id + i) * 2; |
321 | 92 | } | 94 | } |
322 | 93 | server_package.stride = 66; | 95 | server_package.stride = 66; |
323 | 94 | } | 96 | } |
324 | @@ -134,9 +136,14 @@ | |||
325 | 134 | 136 | ||
326 | 135 | struct MockBuffer : public mcl::ClientBuffer | 137 | struct MockBuffer : public mcl::ClientBuffer |
327 | 136 | { | 138 | { |
329 | 137 | MockBuffer() | 139 | explicit MockBuffer(std::shared_ptr<MirBufferPackage> const& contents) |
330 | 138 | { | 140 | { |
331 | 141 | using namespace testing; | ||
332 | 139 | 142 | ||
333 | 143 | auto buffer_package = std::make_shared<MirBufferPackage>(); | ||
334 | 144 | *buffer_package = *contents; | ||
335 | 145 | ON_CALL(*this, get_buffer_package()) | ||
336 | 146 | .WillByDefault(Return(buffer_package)); | ||
337 | 140 | } | 147 | } |
338 | 141 | 148 | ||
339 | 142 | MOCK_METHOD0(secure_for_cpu_write, std::shared_ptr<mcl::MemoryRegion>()); | 149 | MOCK_METHOD0(secure_for_cpu_write, std::shared_ptr<mcl::MemoryRegion>()); |
340 | @@ -156,15 +163,20 @@ | |||
341 | 156 | { | 163 | { |
342 | 157 | using namespace testing; | 164 | using namespace testing; |
343 | 158 | 165 | ||
345 | 159 | emptybuffer=std::make_shared<NiceMock<MockBuffer>>(); | 166 | emptybuffer=std::make_shared<NiceMock<MockBuffer>>(std::make_shared<MirBufferPackage>()); |
346 | 167 | |||
347 | 160 | ON_CALL(*this, create_buffer(_,_,_)) | 168 | ON_CALL(*this, create_buffer(_,_,_)) |
349 | 161 | .WillByDefault(Return(emptybuffer)); | 169 | .WillByDefault(DoAll(SaveArg<0>(¤t_package), |
350 | 170 | InvokeWithoutArgs([this] () {this->current_buffer = std::make_shared<NiceMock<MockBuffer>>(current_package);}), | ||
351 | 171 | ReturnPointee(¤t_buffer))); | ||
352 | 162 | } | 172 | } |
353 | 163 | 173 | ||
354 | 164 | MOCK_METHOD3(create_buffer, | 174 | MOCK_METHOD3(create_buffer, |
356 | 165 | std::shared_ptr<mcl::ClientBuffer>(std::shared_ptr<MirBufferPackage> const &, | 175 | std::shared_ptr<mcl::ClientBuffer>(std::shared_ptr<MirBufferPackage> const&, |
357 | 166 | geom::Size, geom::PixelFormat)); | 176 | geom::Size, geom::PixelFormat)); |
358 | 167 | 177 | ||
359 | 178 | std::shared_ptr<MirBufferPackage> current_package; | ||
360 | 179 | std::shared_ptr<mcl::ClientBuffer> current_buffer; | ||
361 | 168 | std::shared_ptr<mcl::ClientBuffer> emptybuffer; | 180 | std::shared_ptr<mcl::ClientBuffer> emptybuffer; |
362 | 169 | }; | 181 | }; |
363 | 170 | 182 | ||
364 | @@ -219,7 +231,6 @@ | |||
365 | 219 | test_server->comm->start(); | 231 | test_server->comm->start(); |
366 | 220 | 232 | ||
367 | 221 | mock_buffer_factory = std::make_shared<mt::MockClientBufferFactory>(); | 233 | mock_buffer_factory = std::make_shared<mt::MockClientBufferFactory>(); |
368 | 222 | depository = std::make_shared<mcl::ClientBufferDepository>(mock_buffer_factory, 3); | ||
369 | 223 | 234 | ||
370 | 224 | params = MirSurfaceParameters{"test", 33, 45, mir_pixel_format_abgr_8888, | 235 | params = MirSurfaceParameters{"test", 33, 45, mir_pixel_format_abgr_8888, |
371 | 225 | mir_buffer_usage_hardware}; | 236 | mir_buffer_usage_hardware}; |
372 | @@ -250,7 +261,6 @@ | |||
373 | 250 | 261 | ||
374 | 251 | MirSurfaceParameters params; | 262 | MirSurfaceParameters params; |
375 | 252 | std::shared_ptr<mt::MockClientBufferFactory> mock_buffer_factory; | 263 | std::shared_ptr<mt::MockClientBufferFactory> mock_buffer_factory; |
376 | 253 | std::shared_ptr<mcl::ClientBufferDepository> depository; | ||
377 | 254 | 264 | ||
378 | 255 | mir::protobuf::Connection response; | 265 | mir::protobuf::Connection response; |
379 | 256 | mir::protobuf::ConnectParameters connect_parameters; | 266 | mir::protobuf::ConnectParameters connect_parameters; |
380 | @@ -272,7 +282,13 @@ | |||
381 | 272 | EXPECT_CALL(*mock_buffer_factory, create_buffer(_,_,_)) | 282 | EXPECT_CALL(*mock_buffer_factory, create_buffer(_,_,_)) |
382 | 273 | .Times(1); | 283 | .Times(1); |
383 | 274 | 284 | ||
385 | 275 | auto surface = std::make_shared<MirSurface> (connection.get(), *client_comm_channel, logger, depository, params, &empty_callback, (void*) NULL); | 285 | auto surface = std::make_shared<MirSurface> (connection.get(), |
386 | 286 | *client_comm_channel, | ||
387 | 287 | logger, | ||
388 | 288 | mock_buffer_factory, | ||
389 | 289 | params, | ||
390 | 290 | &empty_callback, | ||
391 | 291 | nullptr); | ||
392 | 276 | 292 | ||
393 | 277 | auto wait_handle = surface->get_create_wait_handle(); | 293 | auto wait_handle = surface->get_create_wait_handle(); |
394 | 278 | wait_handle->wait_for_result(); | 294 | wait_handle->wait_for_result(); |
395 | @@ -290,7 +306,13 @@ | |||
396 | 290 | EXPECT_CALL(*mock_buffer_factory, create_buffer(_,_,_)) | 306 | EXPECT_CALL(*mock_buffer_factory, create_buffer(_,_,_)) |
397 | 291 | .Times(1); | 307 | .Times(1); |
398 | 292 | 308 | ||
400 | 293 | auto surface = std::make_shared<MirSurface> (connection.get(), *client_comm_channel, logger, depository, params, &empty_callback, (void*) NULL); | 309 | auto surface = std::make_shared<MirSurface> (connection.get(), |
401 | 310 | *client_comm_channel, | ||
402 | 311 | logger, | ||
403 | 312 | mock_buffer_factory, | ||
404 | 313 | params, | ||
405 | 314 | &empty_callback, | ||
406 | 315 | nullptr); | ||
407 | 294 | 316 | ||
408 | 295 | auto wait_handle = surface->get_create_wait_handle(); | 317 | auto wait_handle = surface->get_create_wait_handle(); |
409 | 296 | wait_handle->wait_for_result(); | 318 | wait_handle->wait_for_result(); |
410 | @@ -301,6 +323,22 @@ | |||
411 | 301 | buffer_wait_handle->wait_for_result(); | 323 | buffer_wait_handle->wait_for_result(); |
412 | 302 | } | 324 | } |
413 | 303 | 325 | ||
414 | 326 | MATCHER_P(BufferPackageMatches, package, "") | ||
415 | 327 | { | ||
416 | 328 | // Can't simply use memcmp() on the whole struct because age is not sent over the wire | ||
417 | 329 | if (package.data_items != arg.data_items) | ||
418 | 330 | return false; | ||
419 | 331 | if (package.fd_items != arg.fd_items) | ||
420 | 332 | return false; | ||
421 | 333 | if (memcmp(package.data, arg.data, sizeof(package.data[0]) * package.data_items)) | ||
422 | 334 | return false; | ||
423 | 335 | if (memcmp(package.fd, arg.fd, sizeof(package.fd[0]) * package.fd_items)) | ||
424 | 336 | return false; | ||
425 | 337 | if (package.stride != arg.stride) | ||
426 | 338 | return false; | ||
427 | 339 | return true; | ||
428 | 340 | } | ||
429 | 341 | |||
430 | 304 | TEST_F(MirClientSurfaceTest, client_buffer_uses_ipc_message_from_server_on_create) | 342 | TEST_F(MirClientSurfaceTest, client_buffer_uses_ipc_message_from_server_on_create) |
431 | 305 | { | 343 | { |
432 | 306 | using namespace testing; | 344 | using namespace testing; |
433 | @@ -311,16 +349,18 @@ | |||
434 | 311 | .WillOnce(DoAll(SaveArg<0>(&submitted_package), | 349 | .WillOnce(DoAll(SaveArg<0>(&submitted_package), |
435 | 312 | Return(mock_buffer_factory->emptybuffer))); | 350 | Return(mock_buffer_factory->emptybuffer))); |
436 | 313 | 351 | ||
438 | 314 | auto surface = std::make_shared<MirSurface> (connection.get(), *client_comm_channel, logger, depository, params, &empty_callback, (void*) NULL); | 352 | auto surface = std::make_shared<MirSurface> (connection.get(), |
439 | 353 | *client_comm_channel, | ||
440 | 354 | logger, | ||
441 | 355 | mock_buffer_factory, | ||
442 | 356 | params, | ||
443 | 357 | &empty_callback, | ||
444 | 358 | nullptr); | ||
445 | 315 | auto wait_handle = surface->get_create_wait_handle(); | 359 | auto wait_handle = surface->get_create_wait_handle(); |
446 | 316 | wait_handle->wait_for_result(); | 360 | wait_handle->wait_for_result(); |
447 | 317 | 361 | ||
448 | 318 | /* check for same contents */ | 362 | /* check for same contents */ |
454 | 319 | ASSERT_EQ(submitted_package->data_items, mock_server_tool->server_package.data_items); | 363 | EXPECT_THAT(*submitted_package, BufferPackageMatches(mock_server_tool->server_package)); |
450 | 320 | ASSERT_EQ(submitted_package->fd_items, mock_server_tool->server_package.fd_items); | ||
451 | 321 | ASSERT_EQ(submitted_package->stride, mock_server_tool->server_package.stride); | ||
452 | 322 | for (auto i=0; i< submitted_package->data_items; i++) | ||
453 | 323 | EXPECT_EQ(submitted_package->data[i], mock_server_tool->server_package.data[i]); | ||
455 | 324 | } | 364 | } |
456 | 325 | 365 | ||
457 | 326 | TEST_F(MirClientSurfaceTest, message_width_used_in_buffer_creation ) | 366 | TEST_F(MirClientSurfaceTest, message_width_used_in_buffer_creation ) |
458 | @@ -335,7 +375,13 @@ | |||
459 | 335 | .WillOnce(DoAll(SaveArg<1>(&sz), | 375 | .WillOnce(DoAll(SaveArg<1>(&sz), |
460 | 336 | Return(mock_buffer_factory->emptybuffer))); | 376 | Return(mock_buffer_factory->emptybuffer))); |
461 | 337 | 377 | ||
463 | 338 | auto surface = std::make_shared<MirSurface> (connection.get(), *client_comm_channel, logger, depository, params, &empty_callback, (void*) NULL); | 378 | auto surface = std::make_shared<MirSurface> (connection.get(), |
464 | 379 | *client_comm_channel, | ||
465 | 380 | logger, | ||
466 | 381 | mock_buffer_factory, | ||
467 | 382 | params, | ||
468 | 383 | &empty_callback, | ||
469 | 384 | nullptr); | ||
470 | 339 | auto wait_handle = surface->get_create_wait_handle(); | 385 | auto wait_handle = surface->get_create_wait_handle(); |
471 | 340 | wait_handle->wait_for_result(); | 386 | wait_handle->wait_for_result(); |
472 | 341 | 387 | ||
473 | @@ -354,7 +400,13 @@ | |||
474 | 354 | .WillOnce(DoAll(SaveArg<1>(&sz), | 400 | .WillOnce(DoAll(SaveArg<1>(&sz), |
475 | 355 | Return(mock_buffer_factory->emptybuffer))); | 401 | Return(mock_buffer_factory->emptybuffer))); |
476 | 356 | 402 | ||
478 | 357 | auto surface = std::make_shared<MirSurface> (connection.get(), *client_comm_channel, logger, depository, params, &empty_callback, (void*) NULL); | 403 | auto surface = std::make_shared<MirSurface> (connection.get(), |
479 | 404 | *client_comm_channel, | ||
480 | 405 | logger, | ||
481 | 406 | mock_buffer_factory, | ||
482 | 407 | params, | ||
483 | 408 | &empty_callback, | ||
484 | 409 | nullptr); | ||
485 | 358 | auto wait_handle = surface->get_create_wait_handle(); | 410 | auto wait_handle = surface->get_create_wait_handle(); |
486 | 359 | wait_handle->wait_for_result(); | 411 | wait_handle->wait_for_result(); |
487 | 360 | 412 | ||
488 | @@ -373,13 +425,47 @@ | |||
489 | 373 | .WillOnce(DoAll(SaveArg<2>(&pf), | 425 | .WillOnce(DoAll(SaveArg<2>(&pf), |
490 | 374 | Return(mock_buffer_factory->emptybuffer))); | 426 | Return(mock_buffer_factory->emptybuffer))); |
491 | 375 | 427 | ||
493 | 376 | auto surface = std::make_shared<MirSurface> (connection.get(), *client_comm_channel, logger, depository, params, &empty_callback, (void*) NULL); | 428 | auto surface = std::make_shared<MirSurface> (connection.get(), |
494 | 429 | *client_comm_channel, | ||
495 | 430 | logger, | ||
496 | 431 | mock_buffer_factory, | ||
497 | 432 | params, | ||
498 | 433 | &empty_callback, | ||
499 | 434 | nullptr); | ||
500 | 435 | |||
501 | 377 | auto wait_handle = surface->get_create_wait_handle(); | 436 | auto wait_handle = surface->get_create_wait_handle(); |
502 | 378 | wait_handle->wait_for_result(); | 437 | wait_handle->wait_for_result(); |
503 | 379 | 438 | ||
504 | 380 | EXPECT_EQ(pf, geom::PixelFormat::abgr_8888); | 439 | EXPECT_EQ(pf, geom::PixelFormat::abgr_8888); |
505 | 381 | } | 440 | } |
506 | 382 | 441 | ||
507 | 442 | TEST_F(MirClientSurfaceTest, get_buffer_returns_last_received_buffer_package) | ||
508 | 443 | { | ||
509 | 444 | using namespace testing; | ||
510 | 445 | |||
511 | 446 | EXPECT_CALL(*mock_buffer_factory, create_buffer(_,_,_)) | ||
512 | 447 | .Times(1); | ||
513 | 448 | |||
514 | 449 | auto surface = std::make_shared<MirSurface> (connection.get(), | ||
515 | 450 | *client_comm_channel, | ||
516 | 451 | logger, | ||
517 | 452 | mock_buffer_factory, | ||
518 | 453 | params, | ||
519 | 454 | &empty_callback, | ||
520 | 455 | nullptr); | ||
521 | 456 | auto wait_handle = surface->get_create_wait_handle(); | ||
522 | 457 | wait_handle->wait_for_result(); | ||
523 | 458 | |||
524 | 459 | EXPECT_THAT(*surface->get_current_buffer_package(), BufferPackageMatches(mock_server_tool->server_package)); | ||
525 | 460 | |||
526 | 461 | EXPECT_CALL(*mock_buffer_factory, create_buffer(_,_,_)) | ||
527 | 462 | .Times(1); | ||
528 | 463 | auto buffer_wait_handle = surface->next_buffer(&empty_surface_callback, nullptr); | ||
529 | 464 | buffer_wait_handle->wait_for_result(); | ||
530 | 465 | |||
531 | 466 | EXPECT_THAT(*surface->get_current_buffer_package(), BufferPackageMatches(mock_server_tool->server_package)); | ||
532 | 467 | } | ||
533 | 468 | |||
534 | 383 | TEST_F(MirClientSurfaceTest, default_surface_type) | 469 | TEST_F(MirClientSurfaceTest, default_surface_type) |
535 | 384 | { | 470 | { |
536 | 385 | using namespace testing; | 471 | using namespace testing; |
537 | @@ -391,10 +477,10 @@ | |||
538 | 391 | auto surface = std::make_shared<MirSurface> (connection.get(), | 477 | auto surface = std::make_shared<MirSurface> (connection.get(), |
539 | 392 | *client_comm_channel, | 478 | *client_comm_channel, |
540 | 393 | logger, | 479 | logger, |
542 | 394 | depository, | 480 | mock_buffer_factory, |
543 | 395 | params, | 481 | params, |
544 | 396 | &empty_callback, | 482 | &empty_callback, |
546 | 397 | (void*) NULL); | 483 | nullptr); |
547 | 398 | surface->get_create_wait_handle()->wait_for_result(); | 484 | surface->get_create_wait_handle()->wait_for_result(); |
548 | 399 | 485 | ||
549 | 400 | EXPECT_EQ(mir_surface_type_normal, | 486 | EXPECT_EQ(mir_surface_type_normal, |
PASSED: Continuous integration, rev:501 jenkins. qa.ubuntu. com/job/ mir-ci/ 189/ jenkins. qa.ubuntu. com/job/ mir-android- raring- i386-build/ 119 jenkins. qa.ubuntu. com/job/ mir-quantal- amd64-ci/ 190 jenkins. qa.ubuntu. com/job/ mir-quantal- amd64-ci/ 190/artifact/ work/output/ *zip*/output. zip
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
Click here to trigger a rebuild: s-jenkins: 8080/job/ mir-ci/ 189/rebuild
http://