Merge lp:~kdub/mir/fix-1661521-0.26.1 into lp:~mir-team/mir/0.26-old
- fix-1661521-0.26.1
- Merge into 0.26-old
Proposed by
Kevin DuBois
Status: | Merged |
---|---|
Merged at revision: | 4011 |
Proposed branch: | lp:~kdub/mir/fix-1661521-0.26.1 |
Merge into: | lp:~mir-team/mir/0.26-old |
Diff against target: |
682 lines (+254/-29) 21 files modified
src/client/buffer_factory.cpp (+52/-8) src/client/buffer_factory.h (+40/-2) src/client/mir_connection.cpp (+1/-1) src/include/client/mir/client_buffer_factory.h (+2/-0) src/platforms/android/client/android_client_buffer_factory.cpp (+9/-0) src/platforms/android/client/android_client_buffer_factory.h (+3/-0) src/platforms/eglstream-kms/client/client_buffer_factory.cpp (+10/-0) src/platforms/eglstream-kms/client/client_buffer_factory.h (+4/-1) src/platforms/mesa/client/client_buffer.cpp (+24/-0) src/platforms/mesa/client/client_buffer.h (+4/-0) src/platforms/mesa/client/client_buffer_factory.cpp (+12/-0) src/platforms/mesa/client/client_buffer_factory.h (+3/-0) tests/include/mir/test/doubles/mock_client_buffer_factory.h (+2/-0) tests/include/mir/test/doubles/stub_client_buffer_factory.h (+7/-0) tests/mir_test_framework/stub_client_platform_factory.cpp (+11/-0) tests/unit-tests/client/test_buffer_vault.cpp (+5/-3) tests/unit-tests/client/test_client_buffer_stream.cpp (+11/-11) tests/unit-tests/client/test_mir_connection.cpp (+8/-2) tests/unit-tests/client/test_protobuf_rpc_channel.cpp (+4/-0) tests/unit-tests/client/test_screencast_stream.cpp (+7/-1) tests/unit-tests/platforms/mesa/client/test_client_buffer.cpp (+35/-0) |
To merge this branch: | bzr merge lp:~kdub/mir/fix-1661521-0.26.1 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Mir development team | Pending | ||
Review via email: mp+316368@code.launchpad.net |
Commit message
Make sure native format is properly communicated all the way from client through nested to host and back again. The native format was getting lost, resulting in a failed EGL buffer mapping, resulting in black nested clients.
fixes: LP: #1661521
Description of the change
Make sure native format is properly communicated all the way from client through nested to host and back again. The native format was getting lost, resulting in a failed EGL buffer mapping, resulting in black nested clients.
fixes: LP: #1661521
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/client/buffer_factory.cpp' | |||
2 | --- src/client/buffer_factory.cpp 2017-01-24 07:37:03 +0000 | |||
3 | +++ src/client/buffer_factory.cpp 2017-02-03 19:56:51 +0000 | |||
4 | @@ -34,8 +34,21 @@ | |||
5 | 34 | native_buffer_factory(native_buffer_factory), | 34 | native_buffer_factory(native_buffer_factory), |
6 | 35 | connection(connection), | 35 | connection(connection), |
7 | 36 | size(size), | 36 | size(size), |
10 | 37 | format(format), | 37 | sw_request(SoftwareRequest{format, usage}), |
11 | 38 | usage(usage), | 38 | cb(cb), |
12 | 39 | cb_context(cb_context) | ||
13 | 40 | { | ||
14 | 41 | } | ||
15 | 42 | |||
16 | 43 | mcl::BufferFactory::AllocationRequest::AllocationRequest( | ||
17 | 44 | std::shared_ptr<mcl::ClientBufferFactory> const& native_buffer_factory, | ||
18 | 45 | MirConnection* connection, | ||
19 | 46 | geom::Size size, uint32_t native_format, uint32_t native_flags, | ||
20 | 47 | MirBufferCallback cb, void* cb_context) : | ||
21 | 48 | native_buffer_factory(native_buffer_factory), | ||
22 | 49 | connection(connection), | ||
23 | 50 | size(size), | ||
24 | 51 | native_request(NativeRequest{native_format, native_flags}), | ||
25 | 39 | cb(cb), | 52 | cb(cb), |
26 | 40 | cb_context(cb_context) | 53 | cb_context(cb_context) |
27 | 41 | { | 54 | { |
28 | @@ -55,6 +68,20 @@ | |||
29 | 55 | std::make_unique<AllocationRequest>(factory, connection, size, format, usage, cb, cb_context)); | 68 | std::make_unique<AllocationRequest>(factory, connection, size, format, usage, cb, cb_context)); |
30 | 56 | } | 69 | } |
31 | 57 | 70 | ||
32 | 71 | void mcl::BufferFactory::expect_buffer( | ||
33 | 72 | std::shared_ptr<mcl::ClientBufferFactory> const& factory, | ||
34 | 73 | MirConnection* connection, | ||
35 | 74 | geometry::Size size, | ||
36 | 75 | uint32_t native_format, | ||
37 | 76 | uint32_t native_flags, | ||
38 | 77 | MirBufferCallback cb, | ||
39 | 78 | void* cb_context) | ||
40 | 79 | { | ||
41 | 80 | std::lock_guard<decltype(mutex)> lk(mutex); | ||
42 | 81 | allocation_requests.emplace_back( | ||
43 | 82 | std::make_unique<AllocationRequest>(factory, connection, size, native_format, native_flags, cb, cb_context)); | ||
44 | 83 | } | ||
45 | 84 | |||
46 | 58 | std::unique_ptr<mcl::MirBuffer> mcl::BufferFactory::generate_buffer(mir::protobuf::Buffer const& buffer) | 85 | std::unique_ptr<mcl::MirBuffer> mcl::BufferFactory::generate_buffer(mir::protobuf::Buffer const& buffer) |
47 | 59 | { | 86 | { |
48 | 60 | std::lock_guard<decltype(mutex)> lk(mutex); | 87 | std::lock_guard<decltype(mutex)> lk(mutex); |
49 | @@ -76,13 +103,30 @@ | |||
50 | 76 | } | 103 | } |
51 | 77 | else | 104 | else |
52 | 78 | { | 105 | { |
53 | 106 | auto factory = (*request_it)->native_buffer_factory; | ||
54 | 107 | std::shared_ptr<mcl::ClientBuffer> client_buffer; | ||
55 | 108 | auto usage = mir_buffer_usage_hardware; | ||
56 | 109 | if ((*request_it)->native_request.is_set()) | ||
57 | 110 | { | ||
58 | 111 | auto& req = (*request_it)->native_request.value(); | ||
59 | 112 | client_buffer = factory->create_buffer( | ||
60 | 113 | mcl::protobuf_to_native_buffer(buffer), req.native_format, req.native_flags); | ||
61 | 114 | } | ||
62 | 115 | else if ((*request_it)->sw_request.is_set()) | ||
63 | 116 | { | ||
64 | 117 | auto& req = (*request_it)->sw_request.value(); | ||
65 | 118 | usage = req.usage; | ||
66 | 119 | client_buffer = factory->create_buffer( | ||
67 | 120 | mcl::protobuf_to_native_buffer(buffer), (*request_it)->size, req.format); | ||
68 | 121 | } | ||
69 | 122 | else | ||
70 | 123 | { | ||
71 | 124 | BOOST_THROW_EXCEPTION(std::logic_error("could not create buffer")); | ||
72 | 125 | } | ||
73 | 126 | |||
74 | 79 | b = std::make_unique<Buffer>( | 127 | b = std::make_unique<Buffer>( |
81 | 80 | (*request_it)->cb, (*request_it)->cb_context, | 128 | (*request_it)->cb, (*request_it)->cb_context, buffer.buffer_id(), |
82 | 81 | buffer.buffer_id(), | 129 | client_buffer, (*request_it)->connection, usage); |
77 | 82 | (*request_it)->native_buffer_factory->create_buffer( | ||
78 | 83 | mcl::protobuf_to_native_buffer(buffer), | ||
79 | 84 | (*request_it)->size, (*request_it)->format), | ||
80 | 85 | (*request_it)->connection, (*request_it)->usage); | ||
83 | 86 | } | 130 | } |
84 | 87 | 131 | ||
85 | 88 | allocation_requests.erase(request_it); | 132 | allocation_requests.erase(request_it); |
86 | 89 | 133 | ||
87 | === modified file 'src/client/buffer_factory.h' | |||
88 | --- src/client/buffer_factory.h 2017-01-24 07:37:03 +0000 | |||
89 | +++ src/client/buffer_factory.h 2017-02-03 19:56:51 +0000 | |||
90 | @@ -20,6 +20,7 @@ | |||
91 | 20 | #define MIR_CLIENT_MIR_BUFFER_FACTORY_H | 20 | #define MIR_CLIENT_MIR_BUFFER_FACTORY_H |
92 | 21 | 21 | ||
93 | 22 | #include "mir/geometry/size.h" | 22 | #include "mir/geometry/size.h" |
94 | 23 | #include "mir/optional_value.h" | ||
95 | 23 | #include "mir_protobuf.pb.h" | 24 | #include "mir_protobuf.pb.h" |
96 | 24 | #include "buffer.h" | 25 | #include "buffer.h" |
97 | 25 | #include <mutex> | 26 | #include <mutex> |
98 | @@ -45,6 +46,14 @@ | |||
99 | 45 | MirBufferUsage usage, | 46 | MirBufferUsage usage, |
100 | 46 | MirBufferCallback cb, | 47 | MirBufferCallback cb, |
101 | 47 | void* cb_context) = 0; | 48 | void* cb_context) = 0; |
102 | 49 | virtual void expect_buffer( | ||
103 | 50 | std::shared_ptr<ClientBufferFactory> const& native_buffer_factory, | ||
104 | 51 | MirConnection* connection, | ||
105 | 52 | geometry::Size size, | ||
106 | 53 | uint32_t native_format, | ||
107 | 54 | uint32_t native_flags, | ||
108 | 55 | MirBufferCallback cb, | ||
109 | 56 | void* cb_context) = 0; | ||
110 | 48 | virtual void cancel_requests_with_context(void*) = 0; | 57 | virtual void cancel_requests_with_context(void*) = 0; |
111 | 49 | 58 | ||
112 | 50 | private: | 59 | private: |
113 | @@ -64,13 +73,34 @@ | |||
114 | 64 | MirBufferUsage usage, | 73 | MirBufferUsage usage, |
115 | 65 | MirBufferCallback cb, | 74 | MirBufferCallback cb, |
116 | 66 | void* cb_context) override; | 75 | void* cb_context) override; |
117 | 76 | void expect_buffer( | ||
118 | 77 | std::shared_ptr<ClientBufferFactory> const& native_buffer_factory, | ||
119 | 78 | MirConnection* connection, | ||
120 | 79 | geometry::Size size, | ||
121 | 80 | uint32_t native_format, | ||
122 | 81 | uint32_t native_flags, | ||
123 | 82 | MirBufferCallback cb, | ||
124 | 83 | void* cb_context) override; | ||
125 | 67 | void cancel_requests_with_context(void*) override; | 84 | void cancel_requests_with_context(void*) override; |
126 | 68 | 85 | ||
127 | 69 | private: | 86 | private: |
128 | 70 | std::mutex mutex; | 87 | std::mutex mutex; |
129 | 71 | int error_id { -1 }; | 88 | int error_id { -1 }; |
130 | 89 | |||
131 | 72 | struct AllocationRequest | 90 | struct AllocationRequest |
132 | 73 | { | 91 | { |
133 | 92 | struct NativeRequest | ||
134 | 93 | { | ||
135 | 94 | uint32_t native_format; | ||
136 | 95 | uint32_t native_flags; | ||
137 | 96 | }; | ||
138 | 97 | |||
139 | 98 | struct SoftwareRequest | ||
140 | 99 | { | ||
141 | 100 | MirPixelFormat format; | ||
142 | 101 | MirBufferUsage usage; | ||
143 | 102 | }; | ||
144 | 103 | |||
145 | 74 | AllocationRequest( | 104 | AllocationRequest( |
146 | 75 | std::shared_ptr<ClientBufferFactory> const& native_buffer_factory, | 105 | std::shared_ptr<ClientBufferFactory> const& native_buffer_factory, |
147 | 76 | MirConnection* connection, | 106 | MirConnection* connection, |
148 | @@ -79,12 +109,20 @@ | |||
149 | 79 | MirBufferUsage usage, | 109 | MirBufferUsage usage, |
150 | 80 | MirBufferCallback cb, | 110 | MirBufferCallback cb, |
151 | 81 | void* cb_context); | 111 | void* cb_context); |
152 | 112 | AllocationRequest( | ||
153 | 113 | std::shared_ptr<ClientBufferFactory> const& native_buffer_factory, | ||
154 | 114 | MirConnection* connection, | ||
155 | 115 | geometry::Size size, | ||
156 | 116 | uint32_t native_format, | ||
157 | 117 | uint32_t native_flags, | ||
158 | 118 | MirBufferCallback cb, | ||
159 | 119 | void* cb_context); | ||
160 | 82 | 120 | ||
161 | 83 | std::shared_ptr<ClientBufferFactory> const native_buffer_factory; | 121 | std::shared_ptr<ClientBufferFactory> const native_buffer_factory; |
162 | 84 | MirConnection* connection; | 122 | MirConnection* connection; |
163 | 85 | geometry::Size size; | 123 | geometry::Size size; |
166 | 86 | MirPixelFormat format; | 124 | optional_value<NativeRequest> native_request; |
167 | 87 | MirBufferUsage usage; | 125 | optional_value<SoftwareRequest> sw_request; |
168 | 88 | MirBufferCallback cb; | 126 | MirBufferCallback cb; |
169 | 89 | void* cb_context; | 127 | void* cb_context; |
170 | 90 | }; | 128 | }; |
171 | 91 | 129 | ||
172 | === modified file 'src/client/mir_connection.cpp' | |||
173 | --- src/client/mir_connection.cpp 2017-02-02 19:38:06 +0000 | |||
174 | +++ src/client/mir_connection.cpp 2017-02-03 19:56:51 +0000 | |||
175 | @@ -1301,7 +1301,7 @@ | |||
176 | 1301 | client_buffer_factory = platform->create_buffer_factory(); | 1301 | client_buffer_factory = platform->create_buffer_factory(); |
177 | 1302 | buffer_factory->expect_buffer( | 1302 | buffer_factory->expect_buffer( |
178 | 1303 | client_buffer_factory, this, | 1303 | client_buffer_factory, this, |
180 | 1304 | size, mir_pixel_format_invalid, mir_buffer_usage_hardware, | 1304 | size, native_format, native_flags, |
181 | 1305 | callback, context); | 1305 | callback, context); |
182 | 1306 | server.allocate_buffers(&request, ignored.get(), gp::NewCallback(ignore)); | 1306 | server.allocate_buffers(&request, ignored.get(), gp::NewCallback(ignore)); |
183 | 1307 | } | 1307 | } |
184 | 1308 | 1308 | ||
185 | === modified file 'src/include/client/mir/client_buffer_factory.h' | |||
186 | --- src/include/client/mir/client_buffer_factory.h 2015-02-22 07:46:25 +0000 | |||
187 | +++ src/include/client/mir/client_buffer_factory.h 2017-02-03 19:56:51 +0000 | |||
188 | @@ -47,6 +47,8 @@ | |||
189 | 47 | */ | 47 | */ |
190 | 48 | virtual std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<MirBufferPackage> const& package, | 48 | virtual std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<MirBufferPackage> const& package, |
191 | 49 | geometry::Size size, MirPixelFormat pf) = 0; | 49 | geometry::Size size, MirPixelFormat pf) = 0; |
192 | 50 | virtual std::shared_ptr<ClientBuffer> create_buffer(std::shared_ptr<MirBufferPackage> const& package, | ||
193 | 51 | unsigned int native_pf, unsigned int native_flags) = 0; | ||
194 | 50 | 52 | ||
195 | 51 | protected: | 53 | protected: |
196 | 52 | ClientBufferFactory() = default; | 54 | ClientBufferFactory() = default; |
197 | 53 | 55 | ||
198 | === modified file 'src/platforms/android/client/android_client_buffer_factory.cpp' | |||
199 | --- src/platforms/android/client/android_client_buffer_factory.cpp 2015-02-22 07:46:25 +0000 | |||
200 | +++ src/platforms/android/client/android_client_buffer_factory.cpp 2017-02-03 19:56:51 +0000 | |||
201 | @@ -18,12 +18,14 @@ | |||
202 | 18 | */ | 18 | */ |
203 | 19 | 19 | ||
204 | 20 | #include "android_client_buffer_factory.h" | 20 | #include "android_client_buffer_factory.h" |
205 | 21 | #include "android_format_conversion-inl.h" | ||
206 | 21 | #include "buffer_registrar.h" | 22 | #include "buffer_registrar.h" |
207 | 22 | #include "buffer.h" | 23 | #include "buffer.h" |
208 | 23 | 24 | ||
209 | 24 | namespace mcl=mir::client; | 25 | namespace mcl=mir::client; |
210 | 25 | namespace mcla=mir::client::android; | 26 | namespace mcla=mir::client::android; |
211 | 26 | namespace geom=mir::geometry; | 27 | namespace geom=mir::geometry; |
212 | 28 | namespace mga=mir::graphics::android; | ||
213 | 27 | 29 | ||
214 | 28 | mcla::AndroidClientBufferFactory::AndroidClientBufferFactory( | 30 | mcla::AndroidClientBufferFactory::AndroidClientBufferFactory( |
215 | 29 | std::shared_ptr<BufferRegistrar> const& buffer_registrar) : | 31 | std::shared_ptr<BufferRegistrar> const& buffer_registrar) : |
216 | @@ -36,3 +38,10 @@ | |||
217 | 36 | (void)size; // TODO: remove this unused parameter | 38 | (void)size; // TODO: remove this unused parameter |
218 | 37 | return std::make_shared<mcla::Buffer>(registrar, *package, pf); | 39 | return std::make_shared<mcla::Buffer>(registrar, *package, pf); |
219 | 38 | } | 40 | } |
220 | 41 | |||
221 | 42 | std::shared_ptr<mcl::ClientBuffer> mcla::AndroidClientBufferFactory::create_buffer( | ||
222 | 43 | std::shared_ptr<MirBufferPackage> const& package, | ||
223 | 44 | unsigned int native_pf, unsigned int) | ||
224 | 45 | { | ||
225 | 46 | return std::make_shared<mcla::Buffer>(registrar, *package, mga::to_mir_format(native_pf)); | ||
226 | 47 | } | ||
227 | 39 | 48 | ||
228 | === modified file 'src/platforms/android/client/android_client_buffer_factory.h' | |||
229 | --- src/platforms/android/client/android_client_buffer_factory.h 2015-02-22 07:46:25 +0000 | |||
230 | +++ src/platforms/android/client/android_client_buffer_factory.h 2017-02-03 19:56:51 +0000 | |||
231 | @@ -45,6 +45,9 @@ | |||
232 | 45 | std::shared_ptr<MirBufferPackage> const& package, | 45 | std::shared_ptr<MirBufferPackage> const& package, |
233 | 46 | geometry::Size size, | 46 | geometry::Size size, |
234 | 47 | MirPixelFormat pf) override; | 47 | MirPixelFormat pf) override; |
235 | 48 | std::shared_ptr<ClientBuffer> create_buffer( | ||
236 | 49 | std::shared_ptr<MirBufferPackage> const& package, | ||
237 | 50 | unsigned int native_pf, unsigned int native_flags) override; | ||
238 | 48 | private: | 51 | private: |
239 | 49 | std::shared_ptr<BufferRegistrar> const registrar; | 52 | std::shared_ptr<BufferRegistrar> const registrar; |
240 | 50 | }; | 53 | }; |
241 | 51 | 54 | ||
242 | === modified file 'src/platforms/eglstream-kms/client/client_buffer_factory.cpp' | |||
243 | --- src/platforms/eglstream-kms/client/client_buffer_factory.cpp 2016-05-31 01:21:42 +0000 | |||
244 | +++ src/platforms/eglstream-kms/client/client_buffer_factory.cpp 2017-02-03 19:56:51 +0000 | |||
245 | @@ -19,6 +19,8 @@ | |||
246 | 19 | 19 | ||
247 | 20 | #include "client_buffer_factory.h" | 20 | #include "client_buffer_factory.h" |
248 | 21 | #include "client_buffer.h" | 21 | #include "client_buffer.h" |
249 | 22 | #include <boost/throw_exception.hpp> | ||
250 | 23 | #include <stdexcept> | ||
251 | 22 | 24 | ||
252 | 23 | namespace mcl=mir::client; | 25 | namespace mcl=mir::client; |
253 | 24 | namespace mcle=mir::client::eglstream; | 26 | namespace mcle=mir::client::eglstream; |
254 | @@ -34,3 +36,11 @@ | |||
255 | 34 | geometry::Size{package->width, package->height}, | 36 | geometry::Size{package->width, package->height}, |
256 | 35 | pf); | 37 | pf); |
257 | 36 | } | 38 | } |
258 | 39 | |||
259 | 40 | std::shared_ptr<mcl::ClientBuffer> | ||
260 | 41 | mcle::ClientBufferFactory::create_buffer( | ||
261 | 42 | std::shared_ptr<MirBufferPackage> const&, | ||
262 | 43 | unsigned int, unsigned int) | ||
263 | 44 | { | ||
264 | 45 | BOOST_THROW_EXCEPTION(std::runtime_error("no native buffers on eglstream platform")); | ||
265 | 46 | } | ||
266 | 37 | 47 | ||
267 | === modified file 'src/platforms/eglstream-kms/client/client_buffer_factory.h' | |||
268 | --- src/platforms/eglstream-kms/client/client_buffer_factory.h 2016-05-31 01:21:42 +0000 | |||
269 | +++ src/platforms/eglstream-kms/client/client_buffer_factory.h 2017-02-03 19:56:51 +0000 | |||
270 | @@ -36,7 +36,10 @@ | |||
271 | 36 | 36 | ||
272 | 37 | std::shared_ptr<client::ClientBuffer> create_buffer( | 37 | std::shared_ptr<client::ClientBuffer> create_buffer( |
273 | 38 | std::shared_ptr<MirBufferPackage> const& package, | 38 | std::shared_ptr<MirBufferPackage> const& package, |
275 | 39 | geometry::Size size, MirPixelFormat pf); | 39 | geometry::Size size, MirPixelFormat pf) override; |
276 | 40 | std::shared_ptr<ClientBuffer> create_buffer( | ||
277 | 41 | std::shared_ptr<MirBufferPackage> const& package, | ||
278 | 42 | unsigned int native_pf, unsigned int native_flags) override; | ||
279 | 40 | }; | 43 | }; |
280 | 41 | 44 | ||
281 | 42 | } | 45 | } |
282 | 43 | 46 | ||
283 | === modified file 'src/platforms/mesa/client/client_buffer.cpp' | |||
284 | --- src/platforms/mesa/client/client_buffer.cpp 2017-01-18 02:29:37 +0000 | |||
285 | +++ src/platforms/mesa/client/client_buffer.cpp 2017-02-03 19:56:51 +0000 | |||
286 | @@ -103,6 +103,9 @@ | |||
287 | 103 | EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<const EGLint>(creation_package->stride), | 103 | EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<const EGLint>(creation_package->stride), |
288 | 104 | EGL_NONE} | 104 | EGL_NONE} |
289 | 105 | { | 105 | { |
290 | 106 | if (pf == mir_pixel_format_invalid) | ||
291 | 107 | BOOST_THROW_EXCEPTION(std::invalid_argument("cannot create buffer with mir_pixel_format_invalid")); | ||
292 | 108 | |||
293 | 106 | if (package->fd_items != 1) | 109 | if (package->fd_items != 1) |
294 | 107 | { | 110 | { |
295 | 108 | BOOST_THROW_EXCEPTION(std::runtime_error( | 111 | BOOST_THROW_EXCEPTION(std::runtime_error( |
296 | @@ -110,6 +113,27 @@ | |||
297 | 110 | } | 113 | } |
298 | 111 | } | 114 | } |
299 | 112 | 115 | ||
300 | 116 | mclm::ClientBuffer::ClientBuffer( | ||
301 | 117 | std::shared_ptr<BufferFileOps> const& buffer_file_ops, | ||
302 | 118 | std::shared_ptr<MirBufferPackage> const& package, | ||
303 | 119 | geometry::Size size, | ||
304 | 120 | unsigned int native_pf, unsigned int /*native_flags*/) : | ||
305 | 121 | buffer_file_ops{buffer_file_ops}, | ||
306 | 122 | creation_package{to_native_buffer(*package)}, | ||
307 | 123 | rect({geom::Point{0, 0}, size}), | ||
308 | 124 | buffer_pf{mir::graphics::mesa::gbm_format_to_mir_format(native_pf)}, | ||
309 | 125 | egl_image_attrs{ | ||
310 | 126 | EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, | ||
311 | 127 | EGL_WIDTH, static_cast<const EGLint>(creation_package->width), | ||
312 | 128 | EGL_HEIGHT, static_cast<const EGLint>(creation_package->height), | ||
313 | 129 | EGL_LINUX_DRM_FOURCC_EXT, static_cast<const EGLint>(native_pf), | ||
314 | 130 | EGL_DMA_BUF_PLANE0_FD_EXT, creation_package->fd[0], | ||
315 | 131 | EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, | ||
316 | 132 | EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<const EGLint>(creation_package->stride), | ||
317 | 133 | EGL_NONE} | ||
318 | 134 | { | ||
319 | 135 | } | ||
320 | 136 | |||
321 | 113 | mclm::ClientBuffer::~ClientBuffer() noexcept | 137 | mclm::ClientBuffer::~ClientBuffer() noexcept |
322 | 114 | { | 138 | { |
323 | 115 | // TODO (@raof): Error reporting? It should not be possible for this to fail; if it does, | 139 | // TODO (@raof): Error reporting? It should not be possible for this to fail; if it does, |
324 | 116 | 140 | ||
325 | === modified file 'src/platforms/mesa/client/client_buffer.h' | |||
326 | --- src/platforms/mesa/client/client_buffer.h 2017-01-18 02:29:37 +0000 | |||
327 | +++ src/platforms/mesa/client/client_buffer.h 2017-02-03 19:56:51 +0000 | |||
328 | @@ -44,6 +44,10 @@ | |||
329 | 44 | std::shared_ptr<MirBufferPackage> const& buffer_package, | 44 | std::shared_ptr<MirBufferPackage> const& buffer_package, |
330 | 45 | geometry::Size size, | 45 | geometry::Size size, |
331 | 46 | MirPixelFormat pf); | 46 | MirPixelFormat pf); |
332 | 47 | ClientBuffer(std::shared_ptr<BufferFileOps> const& buffer_file_ops, | ||
333 | 48 | std::shared_ptr<MirBufferPackage> const& buffer_package, | ||
334 | 49 | geometry::Size size, | ||
335 | 50 | unsigned int native_pf, unsigned int native_flags); | ||
336 | 47 | 51 | ||
337 | 48 | ~ClientBuffer() noexcept; | 52 | ~ClientBuffer() noexcept; |
338 | 49 | 53 | ||
339 | 50 | 54 | ||
340 | === modified file 'src/platforms/mesa/client/client_buffer_factory.cpp' | |||
341 | --- src/platforms/mesa/client/client_buffer_factory.cpp 2014-03-06 06:05:17 +0000 | |||
342 | +++ src/platforms/mesa/client/client_buffer_factory.cpp 2017-02-03 19:56:51 +0000 | |||
343 | @@ -42,3 +42,15 @@ | |||
344 | 42 | geometry::Size{package->width, package->height}, | 42 | geometry::Size{package->width, package->height}, |
345 | 43 | pf); | 43 | pf); |
346 | 44 | } | 44 | } |
347 | 45 | |||
348 | 46 | std::shared_ptr<mcl::ClientBuffer> | ||
349 | 47 | mclm::ClientBufferFactory::create_buffer( | ||
350 | 48 | std::shared_ptr<MirBufferPackage> const& package, | ||
351 | 49 | unsigned int native_pf, unsigned int native_flags) | ||
352 | 50 | { | ||
353 | 51 | return std::make_shared<mclm::ClientBuffer>( | ||
354 | 52 | buffer_file_ops, | ||
355 | 53 | package, | ||
356 | 54 | geometry::Size{package->width, package->height}, | ||
357 | 55 | native_pf, native_flags); | ||
358 | 56 | } | ||
359 | 45 | 57 | ||
360 | === modified file 'src/platforms/mesa/client/client_buffer_factory.h' | |||
361 | --- src/platforms/mesa/client/client_buffer_factory.h 2015-02-22 07:46:25 +0000 | |||
362 | +++ src/platforms/mesa/client/client_buffer_factory.h 2017-02-03 19:56:51 +0000 | |||
363 | @@ -39,6 +39,9 @@ | |||
364 | 39 | std::shared_ptr<client::ClientBuffer> create_buffer( | 39 | std::shared_ptr<client::ClientBuffer> create_buffer( |
365 | 40 | std::shared_ptr<MirBufferPackage> const& package, | 40 | std::shared_ptr<MirBufferPackage> const& package, |
366 | 41 | geometry::Size size, MirPixelFormat pf); | 41 | geometry::Size size, MirPixelFormat pf); |
367 | 42 | std::shared_ptr<client::ClientBuffer> create_buffer( | ||
368 | 43 | std::shared_ptr<MirBufferPackage> const& package, | ||
369 | 44 | unsigned int native_pf, unsigned int native_flags); | ||
370 | 42 | private: | 45 | private: |
371 | 43 | std::shared_ptr<BufferFileOps> const buffer_file_ops; | 46 | std::shared_ptr<BufferFileOps> const buffer_file_ops; |
372 | 44 | }; | 47 | }; |
373 | 45 | 48 | ||
374 | === modified file 'tests/include/mir/test/doubles/mock_client_buffer_factory.h' | |||
375 | --- tests/include/mir/test/doubles/mock_client_buffer_factory.h 2015-06-17 05:20:42 +0000 | |||
376 | +++ tests/include/mir/test/doubles/mock_client_buffer_factory.h 2017-02-03 19:56:51 +0000 | |||
377 | @@ -36,6 +36,8 @@ | |||
378 | 36 | std::shared_ptr<client::ClientBuffer>( | 36 | std::shared_ptr<client::ClientBuffer>( |
379 | 37 | std::shared_ptr<MirBufferPackage> const& /*package*/, | 37 | std::shared_ptr<MirBufferPackage> const& /*package*/, |
380 | 38 | mir::geometry::Size /*size*/, MirPixelFormat /*pf*/)); | 38 | mir::geometry::Size /*size*/, MirPixelFormat /*pf*/)); |
381 | 39 | MOCK_METHOD3(create_buffer, std::shared_ptr<client::ClientBuffer>( | ||
382 | 40 | std::shared_ptr<MirBufferPackage> const&, uint32_t, uint32_t)); | ||
383 | 39 | }; | 41 | }; |
384 | 40 | } | 42 | } |
385 | 41 | } | 43 | } |
386 | 42 | 44 | ||
387 | === modified file 'tests/include/mir/test/doubles/stub_client_buffer_factory.h' | |||
388 | --- tests/include/mir/test/doubles/stub_client_buffer_factory.h 2016-08-09 13:02:44 +0000 | |||
389 | +++ tests/include/mir/test/doubles/stub_client_buffer_factory.h 2017-02-03 19:56:51 +0000 | |||
390 | @@ -37,6 +37,13 @@ | |||
391 | 37 | { | 37 | { |
392 | 38 | return std::make_shared<StubClientBuffer>(package, size, pf, nullptr); | 38 | return std::make_shared<StubClientBuffer>(package, size, pf, nullptr); |
393 | 39 | } | 39 | } |
394 | 40 | |||
395 | 41 | std::shared_ptr<client::ClientBuffer> create_buffer( | ||
396 | 42 | std::shared_ptr<MirBufferPackage> const& package, uint32_t, uint32_t) | ||
397 | 43 | { | ||
398 | 44 | return std::make_shared<StubClientBuffer>( | ||
399 | 45 | package, geometry::Size{package->width, package->height}, mir_pixel_format_abgr_8888, nullptr); | ||
400 | 46 | } | ||
401 | 40 | }; | 47 | }; |
402 | 41 | 48 | ||
403 | 42 | } | 49 | } |
404 | 43 | 50 | ||
405 | === modified file 'tests/mir_test_framework/stub_client_platform_factory.cpp' | |||
406 | --- tests/mir_test_framework/stub_client_platform_factory.cpp 2017-02-02 19:38:06 +0000 | |||
407 | +++ tests/mir_test_framework/stub_client_platform_factory.cpp 2017-02-03 19:56:51 +0000 | |||
408 | @@ -138,6 +138,17 @@ | |||
409 | 138 | return std::make_shared<mtd::StubClientBuffer>(package, size, pf, | 138 | return std::make_shared<mtd::StubClientBuffer>(package, size, pf, |
410 | 139 | std::make_shared<mtf::NativeBuffer>(properties)); | 139 | std::make_shared<mtf::NativeBuffer>(properties)); |
411 | 140 | } | 140 | } |
412 | 141 | |||
413 | 142 | std::shared_ptr<mcl::ClientBuffer> create_buffer( | ||
414 | 143 | std::shared_ptr<MirBufferPackage> const& package, uint32_t, uint32_t) override | ||
415 | 144 | { | ||
416 | 145 | mir::graphics::BufferUsage usage = mir::graphics::BufferUsage::hardware; | ||
417 | 146 | geom::Size size {package->width, package->height}; | ||
418 | 147 | auto pf = mir_pixel_format_abgr_8888; | ||
419 | 148 | mir::graphics::BufferProperties properties { size, pf, usage }; | ||
420 | 149 | return std::make_shared<mtd::StubClientBuffer>(package, size, pf, | ||
421 | 150 | std::make_shared<mtf::NativeBuffer>(properties)); | ||
422 | 151 | } | ||
423 | 141 | }; | 152 | }; |
424 | 142 | return std::make_shared<StubPlatformBufferFactory>(); | 153 | return std::make_shared<StubPlatformBufferFactory>(); |
425 | 143 | } | 154 | } |
426 | 144 | 155 | ||
427 | === modified file 'tests/unit-tests/client/test_buffer_vault.cpp' | |||
428 | --- tests/unit-tests/client/test_buffer_vault.cpp 2017-01-18 02:29:37 +0000 | |||
429 | +++ tests/unit-tests/client/test_buffer_vault.cpp 2017-02-03 19:56:51 +0000 | |||
430 | @@ -49,7 +49,7 @@ | |||
431 | 49 | { | 49 | { |
432 | 50 | MockClientBufferFactory() | 50 | MockClientBufferFactory() |
433 | 51 | { | 51 | { |
435 | 52 | ON_CALL(*this, create_buffer(_,_,_)) | 52 | ON_CALL(*this, create_buffer(_,An<geom::Size>(),_)) |
436 | 53 | .WillByDefault(Invoke([]( | 53 | .WillByDefault(Invoke([]( |
437 | 54 | std::shared_ptr<MirBufferPackage> const&, geom::Size size, MirPixelFormat) | 54 | std::shared_ptr<MirBufferPackage> const&, geom::Size size, MirPixelFormat) |
438 | 55 | { | 55 | { |
439 | @@ -61,6 +61,8 @@ | |||
440 | 61 | } | 61 | } |
441 | 62 | MOCK_METHOD3(create_buffer, std::shared_ptr<mcl::ClientBuffer>( | 62 | MOCK_METHOD3(create_buffer, std::shared_ptr<mcl::ClientBuffer>( |
442 | 63 | std::shared_ptr<MirBufferPackage> const&, geom::Size, MirPixelFormat)); | 63 | std::shared_ptr<MirBufferPackage> const&, geom::Size, MirPixelFormat)); |
443 | 64 | MOCK_METHOD3(create_buffer, std::shared_ptr<mcl::ClientBuffer>( | ||
444 | 65 | std::shared_ptr<MirBufferPackage> const&, uint32_t, uint32_t)); | ||
445 | 64 | }; | 66 | }; |
446 | 65 | 67 | ||
447 | 66 | struct MockServerRequests : mcl::ServerBufferRequests | 68 | struct MockServerRequests : mcl::ServerBufferRequests |
448 | @@ -272,7 +274,7 @@ | |||
449 | 272 | ON_CALL(*mock_buffer, size()) | 274 | ON_CALL(*mock_buffer, size()) |
450 | 273 | .WillByDefault(Return(size)); | 275 | .WillByDefault(Return(size)); |
451 | 274 | EXPECT_CALL(*mock_buffer, increment_age()); | 276 | EXPECT_CALL(*mock_buffer, increment_age()); |
453 | 275 | ON_CALL(mock_platform_factory, create_buffer(_,_,_)) | 277 | ON_CALL(mock_platform_factory, create_buffer(_,An<uint32_t>(),_)) |
454 | 276 | .WillByDefault(Return(mock_buffer)); | 278 | .WillByDefault(Return(mock_buffer)); |
455 | 277 | auto b1 = std::make_shared<mcl::Buffer>( | 279 | auto b1 = std::make_shared<mcl::Buffer>( |
456 | 278 | ignore, nullptr, package.buffer_id(), mock_buffer, nullptr, mir_buffer_usage_software); | 280 | ignore, nullptr, package.buffer_id(), mock_buffer, nullptr, mir_buffer_usage_software); |
457 | @@ -289,7 +291,7 @@ | |||
458 | 289 | ON_CALL(*mock_buffer, size()) | 291 | ON_CALL(*mock_buffer, size()) |
459 | 290 | .WillByDefault(Return(size)); | 292 | .WillByDefault(Return(size)); |
460 | 291 | EXPECT_CALL(*mock_buffer, mark_as_submitted()); | 293 | EXPECT_CALL(*mock_buffer, mark_as_submitted()); |
462 | 292 | ON_CALL(mock_platform_factory, create_buffer(_,_,_)) | 294 | ON_CALL(mock_platform_factory, create_buffer(_,An<uint32_t>(),_)) |
463 | 293 | .WillByDefault(Return(mock_buffer)); | 295 | .WillByDefault(Return(mock_buffer)); |
464 | 294 | auto b1 = std::make_shared<mcl::Buffer>( | 296 | auto b1 = std::make_shared<mcl::Buffer>( |
465 | 295 | ignore, nullptr, package.buffer_id(), mock_buffer, nullptr, mir_buffer_usage_software); | 297 | ignore, nullptr, package.buffer_id(), mock_buffer, nullptr, mir_buffer_usage_software); |
466 | 296 | 298 | ||
467 | === modified file 'tests/unit-tests/client/test_client_buffer_stream.cpp' | |||
468 | --- tests/unit-tests/client/test_client_buffer_stream.cpp 2017-01-25 15:34:05 +0000 | |||
469 | +++ tests/unit-tests/client/test_client_buffer_stream.cpp 2017-02-03 19:56:51 +0000 | |||
470 | @@ -167,7 +167,7 @@ | |||
471 | 167 | { | 167 | { |
472 | 168 | ClientBufferStream() | 168 | ClientBufferStream() |
473 | 169 | { | 169 | { |
475 | 170 | ON_CALL(mock_factory, create_buffer(_,_,_)) | 170 | ON_CALL(mock_factory, create_buffer(_,An<geom::Size>(),_)) |
476 | 171 | .WillByDefault(Return(std::make_shared<mtd::NullClientBuffer>())); | 171 | .WillByDefault(Return(std::make_shared<mtd::NullClientBuffer>())); |
477 | 172 | } | 172 | } |
478 | 173 | 173 | ||
479 | @@ -305,7 +305,7 @@ | |||
480 | 305 | 305 | ||
481 | 306 | TEST_F(ClientBufferStream, uses_buffer_message_from_server) | 306 | TEST_F(ClientBufferStream, uses_buffer_message_from_server) |
482 | 307 | { | 307 | { |
484 | 308 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),_,_)) | 308 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),An<geom::Size>(),_)) |
485 | 309 | .WillOnce(Return(std::make_shared<mtd::NullClientBuffer>())); | 309 | .WillOnce(Return(std::make_shared<mtd::NullClientBuffer>())); |
486 | 310 | mcl::BufferStream bs( | 310 | mcl::BufferStream bs( |
487 | 311 | nullptr, nullptr, wait_handle, mock_protobuf_server, | 311 | nullptr, nullptr, wait_handle, mock_protobuf_server, |
488 | @@ -382,10 +382,10 @@ | |||
489 | 382 | auto protobuf_bs = a_protobuf_buffer_stream(default_pixel_format, default_buffer_usage); | 382 | auto protobuf_bs = a_protobuf_buffer_stream(default_pixel_format, default_buffer_usage); |
490 | 383 | 383 | ||
491 | 384 | Sequence seq; | 384 | Sequence seq; |
493 | 385 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package_1),_,_)) | 385 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package_1),An<geom::Size>(),_)) |
494 | 386 | .InSequence(seq) | 386 | .InSequence(seq) |
495 | 387 | .WillOnce(Return(client_buffer_1)); | 387 | .WillOnce(Return(client_buffer_1)); |
497 | 388 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package_2),_,_)) | 388 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package_2),An<geom::Size>(),_)) |
498 | 389 | .InSequence(seq) | 389 | .InSequence(seq) |
499 | 390 | .WillOnce(Return(client_buffer_2)); | 390 | .WillOnce(Return(client_buffer_2)); |
500 | 391 | 391 | ||
501 | @@ -448,7 +448,7 @@ | |||
502 | 448 | NiceMock<mtd::MockClientBuffer> mock_client_buffer; | 448 | NiceMock<mtd::MockClientBuffer> mock_client_buffer; |
503 | 449 | ON_CALL(mock_client_buffer, size()) | 449 | ON_CALL(mock_client_buffer, size()) |
504 | 450 | .WillByDefault(Return(size)); | 450 | .WillByDefault(Return(size)); |
506 | 451 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),_,_)) | 451 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),An<geom::Size>(),_)) |
507 | 452 | .WillOnce(Return(mt::fake_shared(mock_client_buffer))); | 452 | .WillOnce(Return(mt::fake_shared(mock_client_buffer))); |
508 | 453 | 453 | ||
509 | 454 | mcl::BufferStream bs( | 454 | mcl::BufferStream bs( |
510 | @@ -470,7 +470,7 @@ | |||
511 | 470 | NiceMock<mtd::MockClientBuffer> mock_client_buffer; | 470 | NiceMock<mtd::MockClientBuffer> mock_client_buffer; |
512 | 471 | ON_CALL(mock_client_buffer, size()) | 471 | ON_CALL(mock_client_buffer, size()) |
513 | 472 | .WillByDefault(Return(size)); | 472 | .WillByDefault(Return(size)); |
515 | 473 | ON_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),_,_)) | 473 | ON_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),An<geom::Size>(),_)) |
516 | 474 | .WillByDefault(Return(mt::fake_shared(mock_client_buffer))); | 474 | .WillByDefault(Return(mt::fake_shared(mock_client_buffer))); |
517 | 475 | mcl::BufferStream bs( | 475 | mcl::BufferStream bs( |
518 | 476 | nullptr, nullptr, wait_handle, mock_protobuf_server, | 476 | nullptr, nullptr, wait_handle, mock_protobuf_server, |
519 | @@ -568,7 +568,7 @@ | |||
520 | 568 | NiceMock<mtd::MockClientBuffer> second_mock_client_buffer; | 568 | NiceMock<mtd::MockClientBuffer> second_mock_client_buffer; |
521 | 569 | ON_CALL(second_mock_client_buffer, size()) | 569 | ON_CALL(second_mock_client_buffer, size()) |
522 | 570 | .WillByDefault(Return(size)); | 570 | .WillByDefault(Return(size)); |
524 | 571 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),_,_)) | 571 | EXPECT_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),An<geom::Size>(),_)) |
525 | 572 | .WillOnce(Return(mt::fake_shared(mock_client_buffer))); | 572 | .WillOnce(Return(mt::fake_shared(mock_client_buffer))); |
526 | 573 | 573 | ||
527 | 574 | mcl::BufferStream bs( | 574 | mcl::BufferStream bs( |
528 | @@ -582,7 +582,7 @@ | |||
529 | 582 | another_buffer_package.set_buffer_id(id); | 582 | another_buffer_package.set_buffer_id(id); |
530 | 583 | another_buffer_package.set_width(size.width.as_int()); | 583 | another_buffer_package.set_width(size.width.as_int()); |
531 | 584 | another_buffer_package.set_height(size.height.as_int()); | 584 | another_buffer_package.set_height(size.height.as_int()); |
533 | 585 | EXPECT_CALL(mock_factory, create_buffer(_,_,_)) | 585 | EXPECT_CALL(mock_factory, create_buffer(_,An<geom::Size>(),_)) |
534 | 586 | .WillOnce(Return(mt::fake_shared(second_mock_client_buffer))); | 586 | .WillOnce(Return(mt::fake_shared(second_mock_client_buffer))); |
535 | 587 | EXPECT_CALL(mock_protobuf_server, submit_buffer(_,_,_)) | 587 | EXPECT_CALL(mock_protobuf_server, submit_buffer(_,_,_)) |
536 | 588 | .WillOnce(mtd::RunProtobufClosure()); | 588 | .WillOnce(mtd::RunProtobufClosure()); |
537 | @@ -599,7 +599,7 @@ | |||
538 | 599 | NiceMock<mtd::MockClientBuffer> mock_client_buffer; | 599 | NiceMock<mtd::MockClientBuffer> mock_client_buffer; |
539 | 600 | ON_CALL(mock_client_buffer, size()) | 600 | ON_CALL(mock_client_buffer, size()) |
540 | 601 | .WillByDefault(Return(size)); | 601 | .WillByDefault(Return(size)); |
542 | 602 | ON_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),_,_)) | 602 | ON_CALL(mock_factory, create_buffer(BufferPackageMatches(buffer_package),An<geom::Size>(),_)) |
543 | 603 | .WillByDefault(Return(mt::fake_shared(mock_client_buffer))); | 603 | .WillByDefault(Return(mt::fake_shared(mock_client_buffer))); |
544 | 604 | ON_CALL(mock_protobuf_server, submit_buffer(_,_,_)) | 604 | ON_CALL(mock_protobuf_server, submit_buffer(_,_,_)) |
545 | 605 | .WillByDefault(mtd::RunProtobufClosure()); | 605 | .WillByDefault(mtd::RunProtobufClosure()); |
546 | @@ -741,7 +741,7 @@ | |||
547 | 741 | { | 741 | { |
548 | 742 | auto format = mir_pixel_format_bgr_888; | 742 | auto format = mir_pixel_format_bgr_888; |
549 | 743 | response.set_pixel_format(format); | 743 | response.set_pixel_format(format); |
551 | 744 | EXPECT_CALL(mock_factory, create_buffer(_,_,format)) | 744 | EXPECT_CALL(mock_factory, create_buffer(_,_,TypedEq<MirPixelFormat>(format))) |
552 | 745 | .WillRepeatedly(Return(std::make_shared<mtd::NullClientBuffer>())); | 745 | .WillRepeatedly(Return(std::make_shared<mtd::NullClientBuffer>())); |
553 | 746 | mcl::BufferStream bs( | 746 | mcl::BufferStream bs( |
554 | 747 | nullptr, nullptr, wait_handle, mock_protobuf_server, | 747 | nullptr, nullptr, wait_handle, mock_protobuf_server, |
555 | @@ -755,7 +755,7 @@ | |||
556 | 755 | 755 | ||
557 | 756 | TEST_F(ClientBufferStream, keeps_accurate_buffer_id) | 756 | TEST_F(ClientBufferStream, keeps_accurate_buffer_id) |
558 | 757 | { | 757 | { |
560 | 758 | ON_CALL(mock_factory, create_buffer(_,_,_)) | 758 | ON_CALL(mock_factory, create_buffer(_,An<geom::Size>(),_)) |
561 | 759 | .WillByDefault(Return(std::make_shared<mtd::NullClientBuffer>(size))); | 759 | .WillByDefault(Return(std::make_shared<mtd::NullClientBuffer>(size))); |
562 | 760 | mcl::BufferStream stream( | 760 | mcl::BufferStream stream( |
563 | 761 | nullptr, nullptr, wait_handle, mock_protobuf_server, | 761 | nullptr, nullptr, wait_handle, mock_protobuf_server, |
564 | 762 | 762 | ||
565 | === modified file 'tests/unit-tests/client/test_mir_connection.cpp' | |||
566 | --- tests/unit-tests/client/test_mir_connection.cpp 2017-02-02 19:38:06 +0000 | |||
567 | +++ tests/unit-tests/client/test_mir_connection.cpp 2017-02-03 19:56:51 +0000 | |||
568 | @@ -93,6 +93,12 @@ | |||
569 | 93 | MirBufferUsage usage, | 93 | MirBufferUsage usage, |
570 | 94 | MirBufferCallback cb, | 94 | MirBufferCallback cb, |
571 | 95 | void* cb_context)); | 95 | void* cb_context)); |
572 | 96 | MOCK_METHOD7(expect_buffer, void( | ||
573 | 97 | std::shared_ptr<mcl::ClientBufferFactory> const& native_buffer_factory, | ||
574 | 98 | MirConnection* connection, | ||
575 | 99 | geom::Size size, uint32_t, uint32_t, | ||
576 | 100 | MirBufferCallback cb, | ||
577 | 101 | void* cb_context)); | ||
578 | 96 | }; | 102 | }; |
579 | 97 | 103 | ||
580 | 98 | struct MockRpcChannel : public mir::client::rpc::MirBasicRpcChannel, | 104 | struct MockRpcChannel : public mir::client::rpc::MirBasicRpcChannel, |
581 | @@ -849,7 +855,7 @@ | |||
582 | 849 | params->set_buffer_usage(usage); | 855 | params->set_buffer_usage(usage); |
583 | 850 | params->set_pixel_format(format); | 856 | params->set_pixel_format(format); |
584 | 851 | EXPECT_CALL(*mock_channel, allocate_buffers(BufferAllocationMatches(mp_alloc))); | 857 | EXPECT_CALL(*mock_channel, allocate_buffers(BufferAllocationMatches(mp_alloc))); |
586 | 852 | EXPECT_CALL(*mock_buffer_allocator, expect_buffer(_, connection.get(), size, format, usage, nullptr, nullptr)); | 858 | EXPECT_CALL(*mock_buffer_allocator, expect_buffer(_, connection.get(), size, TypedEq<MirPixelFormat>(format), usage, nullptr, nullptr)); |
587 | 853 | 859 | ||
588 | 854 | connection->allocate_buffer(size, format, nullptr, nullptr); | 860 | connection->allocate_buffer(size, format, nullptr, nullptr); |
589 | 855 | } | 861 | } |
590 | @@ -869,7 +875,7 @@ | |||
591 | 869 | params->set_native_format(native_format); | 875 | params->set_native_format(native_format); |
592 | 870 | params->set_flags(native_flags); | 876 | params->set_flags(native_flags); |
593 | 871 | EXPECT_CALL(*mock_channel, allocate_buffers(BufferAllocationMatches(mp_alloc))); | 877 | EXPECT_CALL(*mock_channel, allocate_buffers(BufferAllocationMatches(mp_alloc))); |
595 | 872 | EXPECT_CALL(*mock_buffer_allocator, expect_buffer(_, connection.get(), size, _, mir_buffer_usage_hardware, nullptr, nullptr)); | 878 | EXPECT_CALL(*mock_buffer_allocator, expect_buffer(_, connection.get(), size, TypedEq<uint32_t>(native_format), TypedEq<uint32_t>(native_flags), nullptr, nullptr)); |
596 | 873 | 879 | ||
597 | 874 | connection->allocate_buffer(size, native_format, native_flags, nullptr, nullptr); | 880 | connection->allocate_buffer(size, native_format, native_flags, nullptr, nullptr); |
598 | 875 | } | 881 | } |
599 | 876 | 882 | ||
600 | === modified file 'tests/unit-tests/client/test_protobuf_rpc_channel.cpp' | |||
601 | --- tests/unit-tests/client/test_protobuf_rpc_channel.cpp 2017-01-24 07:55:14 +0000 | |||
602 | +++ tests/unit-tests/client/test_protobuf_rpc_channel.cpp 2017-02-03 19:56:51 +0000 | |||
603 | @@ -688,6 +688,10 @@ | |||
604 | 688 | MirConnection*, | 688 | MirConnection*, |
605 | 689 | mir::geometry::Size, MirPixelFormat, MirBufferUsage, | 689 | mir::geometry::Size, MirPixelFormat, MirBufferUsage, |
606 | 690 | MirBufferCallback, void*)); | 690 | MirBufferCallback, void*)); |
607 | 691 | MOCK_METHOD7(expect_buffer, void( | ||
608 | 692 | std::shared_ptr<mcl::ClientBufferFactory> const&, | ||
609 | 693 | MirConnection*, mir::geometry::Size, uint32_t, uint32_t, | ||
610 | 694 | MirBufferCallback, void*)); | ||
611 | 691 | }; | 695 | }; |
612 | 692 | 696 | ||
613 | 693 | namespace | 697 | namespace |
614 | 694 | 698 | ||
615 | === modified file 'tests/unit-tests/client/test_screencast_stream.cpp' | |||
616 | --- tests/unit-tests/client/test_screencast_stream.cpp 2017-01-18 02:29:37 +0000 | |||
617 | +++ tests/unit-tests/client/test_screencast_stream.cpp 2017-02-03 19:56:51 +0000 | |||
618 | @@ -75,7 +75,7 @@ | |||
619 | 75 | { | 75 | { |
620 | 76 | ScreencastStream() | 76 | ScreencastStream() |
621 | 77 | { | 77 | { |
623 | 78 | ON_CALL(mock_factory, create_buffer(_,_,_)) | 78 | ON_CALL(mock_factory, create_buffer(_,An<geom::Size>(),_)) |
624 | 79 | .WillByDefault(Return(std::make_shared<mtd::NullClientBuffer>())); | 79 | .WillByDefault(Return(std::make_shared<mtd::NullClientBuffer>())); |
625 | 80 | } | 80 | } |
626 | 81 | 81 | ||
627 | @@ -170,6 +170,12 @@ | |||
628 | 170 | return nullptr; | 170 | return nullptr; |
629 | 171 | } | 171 | } |
630 | 172 | 172 | ||
631 | 173 | std::shared_ptr<mcl::ClientBuffer> create_buffer( | ||
632 | 174 | std::shared_ptr<MirBufferPackage> const&, uint32_t, uint32_t) | ||
633 | 175 | { | ||
634 | 176 | return create_buffer(nullptr, geom::Size{0,0}, mir_pixel_format_invalid); | ||
635 | 177 | } | ||
636 | 178 | |||
637 | 173 | void start_failing() | 179 | void start_failing() |
638 | 174 | { | 180 | { |
639 | 175 | fail = true; | 181 | fail = true; |
640 | 176 | 182 | ||
641 | === modified file 'tests/unit-tests/platforms/mesa/client/test_client_buffer.cpp' | |||
642 | --- tests/unit-tests/platforms/mesa/client/test_client_buffer.cpp 2017-01-18 02:29:37 +0000 | |||
643 | +++ tests/unit-tests/platforms/mesa/client/test_client_buffer.cpp 2017-02-03 19:56:51 +0000 | |||
644 | @@ -217,3 +217,38 @@ | |||
645 | 217 | EXPECT_THAT(egl_buffer, Eq(nullptr)); | 217 | EXPECT_THAT(egl_buffer, Eq(nullptr)); |
646 | 218 | EXPECT_THAT(attrs, mir::test::doubles::AttrMatches(expected_image_attrs)); | 218 | EXPECT_THAT(attrs, mir::test::doubles::AttrMatches(expected_image_attrs)); |
647 | 219 | } | 219 | } |
648 | 220 | |||
649 | 221 | //LP: #1661521 | ||
650 | 222 | TEST_F(MesaClientBufferTest, suggests_dma_import_with_native_format) | ||
651 | 223 | { | ||
652 | 224 | auto format = GBM_FORMAT_ABGR8888; | ||
653 | 225 | static EGLint expected_image_attrs[] = | ||
654 | 226 | { | ||
655 | 227 | EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, | ||
656 | 228 | EGL_WIDTH, static_cast<const EGLint>(package->width), | ||
657 | 229 | EGL_HEIGHT, static_cast<const EGLint>(package->height), | ||
658 | 230 | EGL_LINUX_DRM_FOURCC_EXT, static_cast<const EGLint>(format), | ||
659 | 231 | EGL_DMA_BUF_PLANE0_FD_EXT, package->fd[0], | ||
660 | 232 | EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, | ||
661 | 233 | EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<const EGLint>(package->stride), | ||
662 | 234 | EGL_NONE | ||
663 | 235 | }; | ||
664 | 236 | |||
665 | 237 | EGLenum type; | ||
666 | 238 | EGLClientBuffer egl_buffer; | ||
667 | 239 | EGLint* attrs; | ||
668 | 240 | |||
669 | 241 | mclg::ClientBuffer buffer(buffer_file_ops, package, size, format, 0); | ||
670 | 242 | buffer.egl_image_creation_parameters(&type, &egl_buffer, &attrs); | ||
671 | 243 | |||
672 | 244 | EXPECT_THAT(type, Eq(static_cast<EGLenum>(EGL_LINUX_DMA_BUF_EXT))); | ||
673 | 245 | EXPECT_THAT(egl_buffer, Eq(nullptr)); | ||
674 | 246 | EXPECT_THAT(attrs, mir::test::doubles::AttrMatches(expected_image_attrs)); | ||
675 | 247 | } | ||
676 | 248 | |||
677 | 249 | TEST_F(MesaClientBufferTest, invalid_pixel_format_throws) | ||
678 | 250 | { | ||
679 | 251 | EXPECT_THROW({ | ||
680 | 252 | mclg::ClientBuffer buffer(buffer_file_ops, package, size, mir_pixel_format_invalid); | ||
681 | 253 | }, std::invalid_argument); | ||
682 | 254 | } |