Merge lp:~alan-griffiths/mir/fix-1583536-for-0.23.1 into lp:mir
- fix-1583536-for-0.23.1
- Merge into development-branch
Proposed by
Alan Griffiths
Status: | Superseded |
---|---|
Proposed branch: | lp:~alan-griffiths/mir/fix-1583536-for-0.23.1 |
Merge into: | lp:mir |
Diff against target: |
587 lines (+232/-73) (has conflicts) 15 files modified
debian/changelog (+33/-7) debian/control (+4/-4) debian/libmircommon6.install (+1/-1) debian/libmirserver40.install (+1/-1) src/client/buffer_vault.cpp (+30/-19) src/client/buffer_vault.h (+2/-0) src/common/CMakeLists.txt (+1/-1) src/server/CMakeLists.txt (+1/-1) src/server/symbols.map (+1/-1) tests/acceptance-tests/test_prompt_session_client_api.cpp (+2/-2) tests/mir_test/CMakeLists.txt (+4/-0) tests/mir_test_doubles/CMakeLists.txt (+5/-1) tests/mir_test_framework/CMakeLists.txt (+4/-0) tests/mirtest.pc.in (+1/-1) tests/unit-tests/client/test_buffer_vault.cpp (+142/-34) Text conflict in tests/unit-tests/client/test_buffer_vault.cpp |
To merge this branch: | bzr merge lp:~alan-griffiths/mir/fix-1583536-for-0.23.1 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Mir development team | Pending | ||
Review via email: mp+295290@code.launchpad.net |
Commit message
Make the mirtest-dev package useful for downstream projects
Description of the change
Backport fix to mirtest-dev
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 'debian/changelog' | |||
2 | --- debian/changelog 2016-05-03 04:36:33 +0000 | |||
3 | +++ debian/changelog 2016-05-20 09:11:49 +0000 | |||
4 | @@ -1,25 +1,51 @@ | |||
6 | 1 | mir (0.23.0) UNRELEASED; urgency=medium | 1 | mir (0.23.0ubuntu1) UNRELEASED; urgency=medium |
7 | 2 | 2 | ||
8 | 3 | [ Kevin DuBois ] | ||
9 | 3 | * New upstream release 0.23.0 (https://launchpad.net/mir/+milestone/0.23.0) | 4 | * New upstream release 0.23.0 (https://launchpad.net/mir/+milestone/0.23.0) |
10 | 4 | - ABI summary: | 5 | - ABI summary: |
11 | 5 | . mirclient ABI unchanged at 9 | 6 | . mirclient ABI unchanged at 9 |
14 | 6 | . mirserver ABI unchanged at 39 | 7 | . mirserver ABI bumped to 40 |
15 | 7 | . mircommon ABI unchanged at 5 | 8 | . mircommon ABI bumped at 6 |
16 | 8 | . mirplatform ABI unchanged at 11 | 9 | . mirplatform ABI unchanged at 11 |
17 | 9 | . mirprotobuf ABI unchanged at 3 | 10 | . mirprotobuf ABI unchanged at 3 |
18 | 10 | . mirplatformgraphics ABI unchanged at 9 | 11 | . mirplatformgraphics ABI unchanged at 9 |
19 | 11 | . mirclientplatform ABI unchanged at 5 | 12 | . mirclientplatform ABI unchanged at 5 |
20 | 12 | . mirinputplatform ABI unchanged at 5 | 13 | . mirinputplatform ABI unchanged at 5 |
21 | 13 | - Enhancements: | 14 | - Enhancements: |
22 | 15 | . Enable internal usage of more flexible graphics buffer submission, | ||
23 | 16 | precursing client API additions. | ||
24 | 14 | - Bug fixes: | 17 | - Bug fixes: |
25 | 18 | . Potential NBS performance loss after resize (LP: #1579076) | ||
26 | 19 | . Performance loss with NBS and overlays on (LP: #1578159) | ||
27 | 15 | . Mir crashes with useless backtrace when mg::Platform methods throw | 20 | . Mir crashes with useless backtrace when mg::Platform methods throw |
28 | 16 | (LP: #1553549) | 21 | (LP: #1553549) |
29 | 17 | . Virtual output is not removed when screencast client disappears | 22 | . Virtual output is not removed when screencast client disappears |
30 | 18 | (LP: #1573572) | 23 | (LP: #1573572) |
35 | 19 | . Virtual display output configuration is set to LVDS Edit (LP: #1573782) | 24 | . Can't VT switch from mir_demo_server (any more) (LP: #1576260) |
36 | 20 | . Resizing can crash mir_demo_server (LP: #1575211) | 25 | . mir_demo_server(_minimal): Window movement/resizing stops responding |
37 | 21 | 26 | when the cursor leaves the surface, and can lead to windows 1px wide | |
38 | 22 | -- Alberto Aguirre <alberto.aguirre@canonical.com> Thu, 28 Apr 2016 09:24:21 -0500 | 27 | and unrecoverable. (LP: #1447886) |
39 | 28 | . Virtual display output configuration is set to LVDS (LP: #1573782) | ||
40 | 29 | . Mir-on-X11 doesn't pass Alt+primary button drag to Mir (LP: #1575765) | ||
41 | 30 | . Mir-on-X11 breaks mir_proving_server resize logic (LP: #1575192) | ||
42 | 31 | . Resizing can crash mir_demo_server (LP: #1575211) | ||
43 | 32 | . [regression] Cursor stops at phantom edge on M10 and N7 (LP: 1580774) | ||
44 | 33 | |||
45 | 34 | -- Kevin DuBois <kevin.dubois@canonical.com> Mon, 09 May 2016 11:59:42 -0400 | ||
46 | 35 | |||
47 | 36 | mir (0.22.1+16.04.20160516.2-0ubuntu1) xenial; urgency=medium | ||
48 | 37 | |||
49 | 38 | [ Andreas Pokorny ] | ||
50 | 39 | * New upstream release 0.22.1 (https://launchpad.net/mir/+milestone/0.22.1) | ||
51 | 40 | - ABI summary: | ||
52 | 41 | . No ABI changes in any libraries. Bugfix release only. | ||
53 | 42 | - Bugs fixed: | ||
54 | 43 | . [regression] Cursor stops at phantom edge on M10 and N7 (LP: 1580774) | ||
55 | 44 | |||
56 | 45 | [ CI Train Bot ] | ||
57 | 46 | * No-change rebuild. | ||
58 | 47 | |||
59 | 48 | -- MichaĆ Sawicz <michal.sawicz@canonical.com> Mon, 16 May 2016 15:36:50 +0000 | ||
60 | 23 | 49 | ||
61 | 24 | mir (0.22.0+16.04.20160422.2-0ubuntu1) xenial; urgency=medium | 50 | mir (0.22.0+16.04.20160422.2-0ubuntu1) xenial; urgency=medium |
62 | 25 | 51 | ||
63 | 26 | 52 | ||
64 | === modified file 'debian/control' | |||
65 | --- debian/control 2016-05-20 07:19:12 +0000 | |||
66 | +++ debian/control 2016-05-20 09:11:49 +0000 | |||
67 | @@ -68,7 +68,7 @@ | |||
68 | 68 | 68 | ||
69 | 69 | #TODO: Packaging infrastructure for better dependency generation, | 69 | #TODO: Packaging infrastructure for better dependency generation, |
70 | 70 | # ala pkg-xorg's xviddriver:Provides and ABI detection. | 70 | # ala pkg-xorg's xviddriver:Provides and ABI detection. |
72 | 71 | Package: libmirserver39 | 71 | Package: libmirserver40 |
73 | 72 | Section: libs | 72 | Section: libs |
74 | 73 | Architecture: linux-any | 73 | Architecture: linux-any |
75 | 74 | Multi-Arch: same | 74 | Multi-Arch: same |
76 | @@ -100,7 +100,7 @@ | |||
77 | 100 | Architecture: linux-any | 100 | Architecture: linux-any |
78 | 101 | Multi-Arch: same | 101 | Multi-Arch: same |
79 | 102 | Pre-Depends: ${misc:Pre-Depends} | 102 | Pre-Depends: ${misc:Pre-Depends} |
81 | 103 | Depends: libmircommon5 (= ${binary:Version}), | 103 | Depends: libmircommon6 (= ${binary:Version}), |
82 | 104 | libprotobuf-dev (>= 2.4.1), | 104 | libprotobuf-dev (>= 2.4.1), |
83 | 105 | libxkbcommon-dev, | 105 | libxkbcommon-dev, |
84 | 106 | ${misc:Depends}, | 106 | ${misc:Depends}, |
85 | @@ -134,7 +134,7 @@ | |||
86 | 134 | Architecture: linux-any | 134 | Architecture: linux-any |
87 | 135 | Multi-Arch: same | 135 | Multi-Arch: same |
88 | 136 | Pre-Depends: ${misc:Pre-Depends} | 136 | Pre-Depends: ${misc:Pre-Depends} |
90 | 137 | Depends: libmirserver39 (= ${binary:Version}), | 137 | Depends: libmirserver40 (= ${binary:Version}), |
91 | 138 | libmirplatform-dev (= ${binary:Version}), | 138 | libmirplatform-dev (= ${binary:Version}), |
92 | 139 | libmircommon-dev (= ${binary:Version}), | 139 | libmircommon-dev (= ${binary:Version}), |
93 | 140 | libglm-dev, | 140 | libglm-dev, |
94 | @@ -288,7 +288,7 @@ | |||
95 | 288 | . | 288 | . |
96 | 289 | Contains a tool for checking the graphics components of android devices. | 289 | Contains a tool for checking the graphics components of android devices. |
97 | 290 | 290 | ||
99 | 291 | Package: libmircommon5 | 291 | Package: libmircommon6 |
100 | 292 | Section: libs | 292 | Section: libs |
101 | 293 | Architecture: linux-any | 293 | Architecture: linux-any |
102 | 294 | Multi-Arch: same | 294 | Multi-Arch: same |
103 | 295 | 295 | ||
104 | === renamed file 'debian/libmircommon5.install' => 'debian/libmircommon6.install' | |||
105 | --- debian/libmircommon5.install 2015-06-17 05:20:42 +0000 | |||
106 | +++ debian/libmircommon6.install 2016-05-20 09:11:49 +0000 | |||
107 | @@ -1,1 +1,1 @@ | |||
109 | 1 | usr/lib/*/libmircommon.so.5 | 1 | usr/lib/*/libmircommon.so.6 |
110 | 2 | 2 | ||
111 | === renamed file 'debian/libmirserver39.install' => 'debian/libmirserver40.install' | |||
112 | --- debian/libmirserver39.install 2016-03-29 07:30:50 +0000 | |||
113 | +++ debian/libmirserver40.install 2016-05-20 09:11:49 +0000 | |||
114 | @@ -1,1 +1,1 @@ | |||
116 | 1 | usr/lib/*/libmirserver.so.39 | 1 | usr/lib/*/libmirserver.so.40 |
117 | 2 | 2 | ||
118 | === modified file 'src/client/buffer_vault.cpp' | |||
119 | --- src/client/buffer_vault.cpp 2016-05-09 14:27:58 +0000 | |||
120 | +++ src/client/buffer_vault.cpp 2016-05-20 09:11:49 +0000 | |||
121 | @@ -122,7 +122,7 @@ | |||
122 | 122 | 122 | ||
123 | 123 | mcl::NoTLSFuture<std::shared_ptr<mcl::Buffer>> mcl::BufferVault::withdraw() | 123 | mcl::NoTLSFuture<std::shared_ptr<mcl::Buffer>> mcl::BufferVault::withdraw() |
124 | 124 | { | 124 | { |
126 | 125 | std::lock_guard<std::mutex> lk(mutex); | 125 | std::unique_lock<std::mutex> lk(mutex); |
127 | 126 | if (disconnected_) | 126 | if (disconnected_) |
128 | 127 | BOOST_THROW_EXCEPTION(std::logic_error("server_disconnected")); | 127 | BOOST_THROW_EXCEPTION(std::logic_error("server_disconnected")); |
129 | 128 | mcl::NoTLSPromise<std::shared_ptr<mcl::Buffer>> promise; | 128 | mcl::NoTLSPromise<std::shared_ptr<mcl::Buffer>> promise; |
130 | @@ -146,6 +146,15 @@ | |||
131 | 146 | else | 146 | else |
132 | 147 | { | 147 | { |
133 | 148 | promises.emplace_back(std::move(promise)); | 148 | promises.emplace_back(std::move(promise)); |
134 | 149 | |||
135 | 150 | auto s = size; | ||
136 | 151 | bool allocate_buffer = (current_buffer_count < needed_buffer_count); | ||
137 | 152 | if (allocate_buffer) | ||
138 | 153 | current_buffer_count++; | ||
139 | 154 | lk.unlock(); | ||
140 | 155 | |||
141 | 156 | if (allocate_buffer) | ||
142 | 157 | alloc_buffer(s, format, usage); | ||
143 | 149 | } | 158 | } |
144 | 150 | return future; | 159 | return future; |
145 | 151 | } | 160 | } |
146 | @@ -198,12 +207,12 @@ | |||
147 | 198 | { | 207 | { |
148 | 199 | auto id = it->first; | 208 | auto id = it->first; |
149 | 200 | buffers.erase(it); | 209 | buffers.erase(it); |
150 | 201 | lk.unlock(); | ||
151 | 202 | |||
152 | 203 | free_buffer(id); | ||
153 | 204 | if (should_decrease_count) | 210 | if (should_decrease_count) |
154 | 205 | current_buffer_count--; | 211 | current_buffer_count--; |
156 | 206 | else | 212 | lk.unlock(); |
157 | 213 | |||
158 | 214 | free_buffer(id); | ||
159 | 215 | if (!should_decrease_count) | ||
160 | 207 | alloc_buffer(size, format, usage); | 216 | alloc_buffer(size, format, usage); |
161 | 208 | return; | 217 | return; |
162 | 209 | } | 218 | } |
163 | @@ -221,15 +230,6 @@ | |||
164 | 221 | } | 230 | } |
165 | 222 | } | 231 | } |
166 | 223 | 232 | ||
167 | 224 | //TODO: the server will currently spam us with a lot of resize messages at once, | ||
168 | 225 | // and we want to delay the IPC transactions for resize. If we could rate-limit | ||
169 | 226 | // the incoming messages, we should should consolidate the scale and size functions | ||
170 | 227 | void mcl::BufferVault::set_size(geom::Size sz) | ||
171 | 228 | { | ||
172 | 229 | std::lock_guard<std::mutex> lk(mutex); | ||
173 | 230 | size = sz; | ||
174 | 231 | } | ||
175 | 232 | |||
176 | 233 | void mcl::BufferVault::disconnected() | 233 | void mcl::BufferVault::disconnected() |
177 | 234 | { | 234 | { |
178 | 235 | std::lock_guard<std::mutex> lk(mutex); | 235 | std::lock_guard<std::mutex> lk(mutex); |
179 | @@ -239,17 +239,28 @@ | |||
180 | 239 | 239 | ||
181 | 240 | void mcl::BufferVault::set_scale(float scale) | 240 | void mcl::BufferVault::set_scale(float scale) |
182 | 241 | { | 241 | { |
183 | 242 | std::unique_lock<std::mutex> lk(mutex); | ||
184 | 243 | set_size(lk, size * scale); | ||
185 | 244 | } | ||
186 | 245 | |||
187 | 246 | void mcl::BufferVault::set_size(geom::Size new_size) | ||
188 | 247 | { | ||
189 | 248 | std::unique_lock<std::mutex> lk(mutex); | ||
190 | 249 | set_size(lk, new_size); | ||
191 | 250 | } | ||
192 | 251 | |||
193 | 252 | void mcl::BufferVault::set_size(std::unique_lock<std::mutex>& lk, geometry::Size new_size) | ||
194 | 253 | { | ||
195 | 254 | if (new_size == size) | ||
196 | 255 | return; | ||
197 | 242 | std::vector<int> free_ids; | 256 | std::vector<int> free_ids; |
198 | 243 | std::unique_lock<std::mutex> lk(mutex); | ||
199 | 244 | auto new_size = size * scale; | ||
200 | 245 | if (new_size == size) | ||
201 | 246 | return; | ||
202 | 247 | size = new_size; | 257 | size = new_size; |
203 | 248 | for (auto it = buffers.begin(); it != buffers.end();) | 258 | for (auto it = buffers.begin(); it != buffers.end();) |
204 | 249 | { | 259 | { |
205 | 250 | auto buffer = checked_buffer_from_map(it->first); | 260 | auto buffer = checked_buffer_from_map(it->first); |
206 | 251 | if ((it->second == Owner::Self) && (buffer->size() != size)) | 261 | if ((it->second == Owner::Self) && (buffer->size() != size)) |
207 | 252 | { | 262 | { |
208 | 263 | current_buffer_count--; | ||
209 | 253 | free_ids.push_back(it->first); | 264 | free_ids.push_back(it->first); |
210 | 254 | it = buffers.erase(it); | 265 | it = buffers.erase(it); |
211 | 255 | } | 266 | } |
212 | @@ -261,7 +272,7 @@ | |||
213 | 261 | lk.unlock(); | 272 | lk.unlock(); |
214 | 262 | 273 | ||
215 | 263 | for(auto& id : free_ids) | 274 | for(auto& id : free_ids) |
217 | 264 | realloc_buffer(id, new_size, format, usage); | 275 | free_buffer(id); |
218 | 265 | } | 276 | } |
219 | 266 | 277 | ||
220 | 267 | void mcl::BufferVault::increase_buffer_count() | 278 | void mcl::BufferVault::increase_buffer_count() |
221 | 268 | 279 | ||
222 | === modified file 'src/client/buffer_vault.h' | |||
223 | --- src/client/buffer_vault.h 2016-05-09 14:27:58 +0000 | |||
224 | +++ src/client/buffer_vault.h 2016-05-20 09:11:49 +0000 | |||
225 | @@ -78,6 +78,8 @@ | |||
226 | 78 | void alloc_buffer(geometry::Size size, MirPixelFormat format, int usage); | 78 | void alloc_buffer(geometry::Size size, MirPixelFormat format, int usage); |
227 | 79 | void free_buffer(int free_id); | 79 | void free_buffer(int free_id); |
228 | 80 | void realloc_buffer(int free_id, geometry::Size size, MirPixelFormat format, int usage); | 80 | void realloc_buffer(int free_id, geometry::Size size, MirPixelFormat format, int usage); |
229 | 81 | void set_size(std::unique_lock<std::mutex>& lk, geometry::Size new_size); | ||
230 | 82 | |||
231 | 81 | std::shared_ptr<Buffer> checked_buffer_from_map(int id); | 83 | std::shared_ptr<Buffer> checked_buffer_from_map(int id); |
232 | 82 | 84 | ||
233 | 83 | std::shared_ptr<ClientBufferFactory> const platform_factory; | 85 | std::shared_ptr<ClientBufferFactory> const platform_factory; |
234 | 84 | 86 | ||
235 | === modified file 'src/common/CMakeLists.txt' | |||
236 | --- src/common/CMakeLists.txt 2016-03-30 08:59:35 +0000 | |||
237 | +++ src/common/CMakeLists.txt 2016-05-20 09:11:49 +0000 | |||
238 | @@ -36,7 +36,7 @@ | |||
239 | 36 | PARENT_SCOPE) | 36 | PARENT_SCOPE) |
240 | 37 | 37 | ||
241 | 38 | # TODO we need a place to manage ABI and related versioning but use this as placeholder | 38 | # TODO we need a place to manage ABI and related versioning but use this as placeholder |
243 | 39 | set(MIRCOMMON_ABI 5) | 39 | set(MIRCOMMON_ABI 6) |
244 | 40 | set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map) | 40 | set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map) |
245 | 41 | 41 | ||
246 | 42 | mir_add_library_with_symbols(mircommon SHARED | 42 | mir_add_library_with_symbols(mircommon SHARED |
247 | 43 | 43 | ||
248 | === modified file 'src/server/CMakeLists.txt' | |||
249 | --- src/server/CMakeLists.txt 2016-05-12 07:35:07 +0000 | |||
250 | +++ src/server/CMakeLists.txt 2016-05-20 09:11:49 +0000 | |||
251 | @@ -125,7 +125,7 @@ | |||
252 | 125 | ${CMAKE_SOURCE_DIR}/include/server/mir DESTINATION "include/mirserver" | 125 | ${CMAKE_SOURCE_DIR}/include/server/mir DESTINATION "include/mirserver" |
253 | 126 | ) | 126 | ) |
254 | 127 | 127 | ||
256 | 128 | set(MIRSERVER_ABI 39) # Be sure to increment MIR_VERSION_MINOR at the same time | 128 | set(MIRSERVER_ABI 40) # Be sure to increment MIR_VERSION_MINOR at the same time |
257 | 129 | set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map) | 129 | set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map) |
258 | 130 | 130 | ||
259 | 131 | set_target_properties( | 131 | set_target_properties( |
260 | 132 | 132 | ||
261 | === modified file 'src/server/symbols.map' | |||
262 | --- src/server/symbols.map 2016-05-03 04:36:33 +0000 | |||
263 | +++ src/server/symbols.map 2016-05-20 09:11:49 +0000 | |||
264 | @@ -1,4 +1,4 @@ | |||
266 | 1 | MIR_SERVER_0.22 { | 1 | MIR_SERVER_0.23 { |
267 | 2 | global: | 2 | global: |
268 | 3 | extern "C++" { | 3 | extern "C++" { |
269 | 4 | # Symbols not yet picked up by script | 4 | # Symbols not yet picked up by script |
270 | 5 | 5 | ||
271 | === modified file 'tests/acceptance-tests/test_prompt_session_client_api.cpp' | |||
272 | --- tests/acceptance-tests/test_prompt_session_client_api.cpp 2016-03-29 07:30:50 +0000 | |||
273 | +++ tests/acceptance-tests/test_prompt_session_client_api.cpp 2016-05-20 09:11:49 +0000 | |||
274 | @@ -383,7 +383,7 @@ | |||
275 | 383 | mir_prompt_session_release_sync(prompt_session); | 383 | mir_prompt_session_release_sync(prompt_session); |
276 | 384 | } | 384 | } |
277 | 385 | 385 | ||
279 | 386 | TEST_F(PromptSessionClientAPI, client_pid_is_associated_with_session) | 386 | TEST_F(PromptSessionClientAPI, DISABLED_client_pid_is_associated_with_session) |
280 | 387 | { | 387 | { |
281 | 388 | connection = mir_connect_sync(new_connection().c_str(), __PRETTY_FUNCTION__); | 388 | connection = mir_connect_sync(new_connection().c_str(), __PRETTY_FUNCTION__); |
282 | 389 | 389 | ||
283 | @@ -624,7 +624,7 @@ | |||
284 | 624 | #ifndef TEST | 624 | #ifndef TEST |
285 | 625 | int main() | 625 | int main() |
286 | 626 | #else | 626 | #else |
288 | 627 | TEST(LP, 1540731) | 627 | TEST(LP, DISABLED_1540731) |
289 | 628 | #endif | 628 | #endif |
290 | 629 | { | 629 | { |
291 | 630 | enum { server, client, size }; | 630 | enum { server, client, size }; |
292 | 631 | 631 | ||
293 | === modified file 'tests/integration-tests/test_buffer_scheduling.cpp' | |||
294 | === modified file 'tests/mir_test/CMakeLists.txt' | |||
295 | --- tests/mir_test/CMakeLists.txt 2015-06-23 16:08:35 +0000 | |||
296 | +++ tests/mir_test/CMakeLists.txt 2016-05-20 09:11:49 +0000 | |||
297 | @@ -1,3 +1,7 @@ | |||
298 | 1 | # We don't want LTO objects in a published archive (libmir-test-assist.a) | ||
299 | 2 | string (REPLACE " -flto " " " CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) | ||
300 | 3 | string (REPLACE " -flto " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) | ||
301 | 4 | |||
302 | 1 | add_library(mir-public-test OBJECT | 5 | add_library(mir-public-test OBJECT |
303 | 2 | cross_process_action.cpp | 6 | cross_process_action.cpp |
304 | 3 | cross_process_sync.cpp | 7 | cross_process_sync.cpp |
305 | 4 | 8 | ||
306 | === modified file 'tests/mir_test_doubles/CMakeLists.txt' | |||
307 | --- tests/mir_test_doubles/CMakeLists.txt 2016-05-04 09:06:26 +0000 | |||
308 | +++ tests/mir_test_doubles/CMakeLists.txt 2016-05-20 09:11:49 +0000 | |||
309 | @@ -16,7 +16,6 @@ | |||
310 | 16 | mock_input_device.cpp | 16 | mock_input_device.cpp |
311 | 17 | mock_frame_dropping_policy_factory.cpp | 17 | mock_frame_dropping_policy_factory.cpp |
312 | 18 | mock_timer.cpp | 18 | mock_timer.cpp |
313 | 19 | stub_buffer.cpp | ||
314 | 20 | test_protobuf_client.cpp | 19 | test_protobuf_client.cpp |
315 | 21 | test_protobuf_socket_server.cpp | 20 | test_protobuf_socket_server.cpp |
316 | 22 | triggered_main_loop.cpp | 21 | triggered_main_loop.cpp |
317 | @@ -71,11 +70,16 @@ | |||
318 | 71 | ) | 70 | ) |
319 | 72 | endif() | 71 | endif() |
320 | 73 | 72 | ||
321 | 73 | # We don't want LTO objects in a published archive (libmir-test-assist.a) | ||
322 | 74 | string (REPLACE " -flto " " " CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) | ||
323 | 75 | string (REPLACE " -flto " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) | ||
324 | 76 | |||
325 | 74 | add_library(mir-public-test-doubles OBJECT | 77 | add_library(mir-public-test-doubles OBJECT |
326 | 75 | nested_mock_egl.cpp | 78 | nested_mock_egl.cpp |
327 | 76 | null_logger.cpp | 79 | null_logger.cpp |
328 | 77 | stub_display_configuration.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/stub_display_configuration.h | 80 | stub_display_configuration.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/stub_display_configuration.h |
329 | 78 | fake_display.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/fake_display.h | 81 | fake_display.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/fake_display.h |
330 | 82 | stub_buffer.cpp | ||
331 | 79 | ) | 83 | ) |
332 | 80 | 84 | ||
333 | 81 | add_library(mir-test-doubles-static STATIC | 85 | add_library(mir-test-doubles-static STATIC |
334 | 82 | 86 | ||
335 | === modified file 'tests/mir_test_framework/CMakeLists.txt' | |||
336 | --- tests/mir_test_framework/CMakeLists.txt 2016-03-29 07:30:50 +0000 | |||
337 | +++ tests/mir_test_framework/CMakeLists.txt 2016-05-20 09:11:49 +0000 | |||
338 | @@ -21,6 +21,10 @@ | |||
339 | 21 | -DMIR_BUILD_PREFIX="${CMAKE_BINARY_DIR}" | 21 | -DMIR_BUILD_PREFIX="${CMAKE_BINARY_DIR}" |
340 | 22 | ) | 22 | ) |
341 | 23 | 23 | ||
342 | 24 | # We don't want LTO objects in a published archive (libmir-test-assist.a) | ||
343 | 25 | string (REPLACE " -flto " " " CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) | ||
344 | 26 | string (REPLACE " -flto " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) | ||
345 | 27 | |||
346 | 24 | add_library(mir-public-test-framework OBJECT | 28 | add_library(mir-public-test-framework OBJECT |
347 | 25 | any_surface.cpp | 29 | any_surface.cpp |
348 | 26 | async_server_runner.cpp | 30 | async_server_runner.cpp |
349 | 27 | 31 | ||
350 | === modified file 'tests/mirtest.pc.in' | |||
351 | --- tests/mirtest.pc.in 2015-06-25 16:47:02 +0000 | |||
352 | +++ tests/mirtest.pc.in 2016-05-20 09:11:49 +0000 | |||
353 | @@ -6,5 +6,5 @@ | |||
354 | 6 | Description: Mir test assist library | 6 | Description: Mir test assist library |
355 | 7 | Version: @MIR_VERSION@ | 7 | Version: @MIR_VERSION@ |
356 | 8 | Requires: mirserver mirplatform mirclient | 8 | Requires: mirserver mirplatform mirclient |
358 | 9 | Libs: -L@LIBDIR@ -lmir-test-assist | 9 | Libs: -L@LIBDIR@ -lmir-test-assist -ldl |
359 | 10 | Cflags: -I@INCLUDEDIR@ | 10 | Cflags: -I@INCLUDEDIR@ |
360 | 11 | 11 | ||
361 | === modified file 'tests/unit-tests/client/test_buffer_vault.cpp' | |||
362 | --- tests/unit-tests/client/test_buffer_vault.cpp 2016-05-09 14:27:58 +0000 | |||
363 | +++ tests/unit-tests/client/test_buffer_vault.cpp 2016-05-20 09:11:49 +0000 | |||
364 | @@ -326,6 +326,8 @@ | |||
365 | 326 | 326 | ||
366 | 327 | TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_immediate_response) | 327 | TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_immediate_response) |
367 | 328 | { | 328 | { |
368 | 329 | vault.set_size(new_size); | ||
369 | 330 | |||
370 | 329 | EXPECT_CALL(mock_requests, free_buffer(package.buffer_id())); | 331 | EXPECT_CALL(mock_requests, free_buffer(package.buffer_id())); |
371 | 330 | EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_)) | 332 | EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_)) |
372 | 331 | .WillOnce(Invoke( | 333 | .WillOnce(Invoke( |
373 | @@ -334,17 +336,17 @@ | |||
374 | 334 | vault.wire_transfer_inbound(package4.buffer_id()); | 336 | vault.wire_transfer_inbound(package4.buffer_id()); |
375 | 335 | })); | 337 | })); |
376 | 336 | 338 | ||
377 | 337 | vault.set_size(new_size); | ||
378 | 338 | vault.wire_transfer_inbound(package.buffer_id()); | 339 | vault.wire_transfer_inbound(package.buffer_id()); |
379 | 339 | Mock::VerifyAndClearExpectations(&mock_requests); | 340 | Mock::VerifyAndClearExpectations(&mock_requests); |
380 | 340 | } | 341 | } |
381 | 341 | 342 | ||
382 | 342 | TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_delayed_response) | 343 | TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_delayed_response) |
383 | 343 | { | 344 | { |
384 | 345 | vault.set_size(new_size); | ||
385 | 346 | |||
386 | 344 | EXPECT_CALL(mock_requests, free_buffer(package.buffer_id())); | 347 | EXPECT_CALL(mock_requests, free_buffer(package.buffer_id())); |
387 | 345 | EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_)); | 348 | EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_)); |
388 | 346 | 349 | ||
389 | 347 | vault.set_size(new_size); | ||
390 | 348 | vault.wire_transfer_inbound(package.buffer_id()); | 350 | vault.wire_transfer_inbound(package.buffer_id()); |
391 | 349 | vault.wire_transfer_inbound(package4.buffer_id()); | 351 | vault.wire_transfer_inbound(package4.buffer_id()); |
392 | 350 | EXPECT_THAT(vault.withdraw().get()->size(), Eq(new_size)); | 352 | EXPECT_THAT(vault.withdraw().get()->size(), Eq(new_size)); |
393 | @@ -361,9 +363,9 @@ | |||
394 | 361 | Mock::VerifyAndClearExpectations(&mock_requests); | 363 | Mock::VerifyAndClearExpectations(&mock_requests); |
395 | 362 | } | 364 | } |
396 | 363 | 365 | ||
398 | 364 | TEST_F(StartedBufferVault, simply_setting_size_triggers_no_server_interations) | 366 | TEST_F(StartedBufferVault, setting_size_frees_unneeded_buffers_right_away) |
399 | 365 | { | 367 | { |
401 | 366 | EXPECT_CALL(mock_requests, free_buffer(_)).Times(0); | 368 | EXPECT_CALL(mock_requests, free_buffer(_)).Times(3); |
402 | 367 | EXPECT_CALL(mock_requests, allocate_buffer(_,_,_)).Times(0); | 369 | EXPECT_CALL(mock_requests, allocate_buffer(_,_,_)).Times(0); |
403 | 368 | auto const cycles = 30u; | 370 | auto const cycles = 30u; |
404 | 369 | geom::Size new_size(80, 100); | 371 | geom::Size new_size(80, 100); |
405 | @@ -450,21 +452,14 @@ | |||
406 | 450 | EXPECT_CALL(mock_requests, free_buffer(_)) | 452 | EXPECT_CALL(mock_requests, free_buffer(_)) |
407 | 451 | .Times(initial_nbuffers); | 453 | .Times(initial_nbuffers); |
408 | 452 | 454 | ||
409 | 453 | auto buffer = vault.withdraw().get(); | ||
410 | 454 | vault.set_scale(scale); | 455 | vault.set_scale(scale); |
411 | 455 | vault.deposit(buffer); | ||
412 | 456 | vault.wire_transfer_outbound(buffer); | ||
413 | 457 | vault.wire_transfer_inbound(package.buffer_id()); | ||
414 | 458 | 456 | ||
416 | 459 | for(auto i = 0; i < 100; i++) | 457 | for(auto i = 0u; i < initial_nbuffers; i++) |
417 | 460 | { | 458 | { |
418 | 461 | auto b = vault.withdraw().get(); | 459 | auto b = vault.withdraw().get(); |
419 | 462 | EXPECT_THAT(b->size(), Eq(new_size)); | ||
420 | 463 | vault.deposit(b); | 460 | vault.deposit(b); |
421 | 464 | b->received(); | ||
422 | 465 | vault.wire_transfer_outbound(b); | ||
423 | 466 | vault.wire_transfer_inbound(buffers[(i+1)%3].buffer_id()); | ||
424 | 467 | } | 461 | } |
425 | 462 | |||
426 | 468 | Mock::VerifyAndClearExpectations(&mock_requests); | 463 | Mock::VerifyAndClearExpectations(&mock_requests); |
427 | 469 | } | 464 | } |
428 | 470 | 465 | ||
429 | @@ -554,24 +549,137 @@ | |||
430 | 554 | vault.wire_transfer_inbound(package2.buffer_id()); | 549 | vault.wire_transfer_inbound(package2.buffer_id()); |
431 | 555 | Mock::VerifyAndClearExpectations(&mock_requests); | 550 | Mock::VerifyAndClearExpectations(&mock_requests); |
432 | 556 | } | 551 | } |
454 | 557 | 552 | <<<<<<< TREE | |
455 | 558 | //LP: #1578159 | 553 | |
456 | 559 | TEST_F(StartedBufferVault, prefers_buffers_returned_further_in_the_past) | 554 | //LP: #1578159 |
457 | 560 | { | 555 | TEST_F(StartedBufferVault, prefers_buffers_returned_further_in_the_past) |
458 | 561 | auto buffer = vault.withdraw().get(); | 556 | { |
459 | 562 | vault.deposit(buffer); | 557 | auto buffer = vault.withdraw().get(); |
460 | 563 | vault.wire_transfer_outbound(buffer); | 558 | vault.deposit(buffer); |
461 | 564 | auto first_id = buffer->rpc_id(); | 559 | vault.wire_transfer_outbound(buffer); |
462 | 565 | 560 | auto first_id = buffer->rpc_id(); | |
463 | 566 | buffer = vault.withdraw().get(); | 561 | |
464 | 567 | vault.deposit(buffer); | 562 | buffer = vault.withdraw().get(); |
465 | 568 | vault.wire_transfer_outbound(buffer); | 563 | vault.deposit(buffer); |
466 | 569 | auto second_id = buffer->rpc_id(); | 564 | vault.wire_transfer_outbound(buffer); |
467 | 570 | 565 | auto second_id = buffer->rpc_id(); | |
468 | 571 | vault.wire_transfer_inbound(second_id); | 566 | |
469 | 572 | vault.wire_transfer_inbound(first_id); | 567 | vault.wire_transfer_inbound(second_id); |
470 | 573 | 568 | vault.wire_transfer_inbound(first_id); | |
471 | 574 | EXPECT_THAT(vault.withdraw().get()->rpc_id(), Ne(first_id)); | 569 | |
472 | 575 | 570 | EXPECT_THAT(vault.withdraw().get()->rpc_id(), Ne(first_id)); | |
473 | 576 | 571 | ||
474 | 577 | } | 572 | |
475 | 573 | } | ||
476 | 574 | ======= | ||
477 | 575 | |||
478 | 576 | //LP: #1578159 | ||
479 | 577 | TEST_F(StartedBufferVault, prefers_buffers_returned_further_in_the_past) | ||
480 | 578 | { | ||
481 | 579 | auto buffer = vault.withdraw().get(); | ||
482 | 580 | vault.deposit(buffer); | ||
483 | 581 | vault.wire_transfer_outbound(buffer); | ||
484 | 582 | auto first_id = buffer->rpc_id(); | ||
485 | 583 | |||
486 | 584 | buffer = vault.withdraw().get(); | ||
487 | 585 | vault.deposit(buffer); | ||
488 | 586 | vault.wire_transfer_outbound(buffer); | ||
489 | 587 | auto second_id = buffer->rpc_id(); | ||
490 | 588 | |||
491 | 589 | vault.wire_transfer_inbound(second_id); | ||
492 | 590 | vault.wire_transfer_inbound(first_id); | ||
493 | 591 | |||
494 | 592 | EXPECT_THAT(vault.withdraw().get()->rpc_id(), Ne(first_id)); | ||
495 | 593 | } | ||
496 | 594 | |||
497 | 595 | //LP: #1579076 | ||
498 | 596 | TEST_F(StartedBufferVault, doesnt_let_buffers_stagnate_after_resize) | ||
499 | 597 | { | ||
500 | 598 | EXPECT_CALL(mock_requests, free_buffer(_)) | ||
501 | 599 | .Times(3); | ||
502 | 600 | vault.set_size(new_size); | ||
503 | 601 | |||
504 | 602 | EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_)) | ||
505 | 603 | .Times(1); | ||
506 | 604 | auto buffer_future = vault.withdraw(); | ||
507 | 605 | vault.wire_transfer_inbound(package4.buffer_id()); | ||
508 | 606 | EXPECT_THAT(buffer_future.get()->size(), Eq(new_size)); | ||
509 | 607 | Mock::VerifyAndClearExpectations(&mock_requests); | ||
510 | 608 | } | ||
511 | 609 | |||
512 | 610 | TEST_F(StartedBufferVault, doesnt_free_buffers_in_the_driver_after_resize) | ||
513 | 611 | { | ||
514 | 612 | EXPECT_CALL(mock_requests, free_buffer(_)) | ||
515 | 613 | .Times(2); | ||
516 | 614 | auto buffer = vault.withdraw().get(); | ||
517 | 615 | vault.set_size(new_size); | ||
518 | 616 | Mock::VerifyAndClearExpectations(&mock_requests); | ||
519 | 617 | |||
520 | 618 | vault.deposit(buffer); | ||
521 | 619 | vault.wire_transfer_outbound(buffer); | ||
522 | 620 | |||
523 | 621 | EXPECT_CALL(mock_requests, free_buffer(_)) | ||
524 | 622 | .Times(1); | ||
525 | 623 | vault.wire_transfer_inbound(buffer->rpc_id()); | ||
526 | 624 | Mock::VerifyAndClearExpectations(&mock_requests); | ||
527 | 625 | } | ||
528 | 626 | |||
529 | 627 | TEST_F(StartedBufferVault, doesnt_free_buffers_with_content_after_resize) | ||
530 | 628 | { | ||
531 | 629 | EXPECT_CALL(mock_requests, free_buffer(_)) | ||
532 | 630 | .Times(2); | ||
533 | 631 | auto buffer = vault.withdraw().get(); | ||
534 | 632 | vault.deposit(buffer); | ||
535 | 633 | vault.set_size(new_size); | ||
536 | 634 | Mock::VerifyAndClearExpectations(&mock_requests); | ||
537 | 635 | |||
538 | 636 | vault.wire_transfer_outbound(buffer); | ||
539 | 637 | EXPECT_CALL(mock_requests, free_buffer(_)) | ||
540 | 638 | .Times(1); | ||
541 | 639 | vault.wire_transfer_inbound(buffer->rpc_id()); | ||
542 | 640 | Mock::VerifyAndClearExpectations(&mock_requests); | ||
543 | 641 | } | ||
544 | 642 | |||
545 | 643 | TEST_F(StartedBufferVault, doesnt_free_buffers_if_size_is_the_same) | ||
546 | 644 | { | ||
547 | 645 | EXPECT_CALL(mock_requests, free_buffer(_)) | ||
548 | 646 | .Times(0); | ||
549 | 647 | vault.set_size(size); | ||
550 | 648 | Mock::VerifyAndClearExpectations(&mock_requests); | ||
551 | 649 | } | ||
552 | 650 | |||
553 | 651 | TEST_F(StartedBufferVault, delays_allocation_if_not_needed) | ||
554 | 652 | { | ||
555 | 653 | vault.set_size(new_size); | ||
556 | 654 | |||
557 | 655 | EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_)) | ||
558 | 656 | .Times(1) | ||
559 | 657 | .WillOnce(Invoke( | ||
560 | 658 | [&, this](geom::Size, MirPixelFormat, int) | ||
561 | 659 | { | ||
562 | 660 | vault.wire_transfer_inbound(package4.buffer_id()); | ||
563 | 661 | })); | ||
564 | 662 | |||
565 | 663 | for(auto i = 0u; i < 10u; i++) | ||
566 | 664 | { | ||
567 | 665 | auto buffer = vault.withdraw().get(); | ||
568 | 666 | vault.deposit(buffer); | ||
569 | 667 | buffer->received(); | ||
570 | 668 | vault.wire_transfer_outbound(buffer); | ||
571 | 669 | vault.wire_transfer_inbound(buffer->rpc_id()); | ||
572 | 670 | } | ||
573 | 671 | } | ||
574 | 672 | |||
575 | 673 | TEST_F(StartedBufferVault, can_increase_count_after_resize) | ||
576 | 674 | { | ||
577 | 675 | auto num_allocations = 4u; | ||
578 | 676 | EXPECT_CALL(mock_requests, allocate_buffer(_,_,_)) | ||
579 | 677 | .Times(num_allocations); | ||
580 | 678 | |||
581 | 679 | vault.increase_buffer_count(); | ||
582 | 680 | vault.set_size(new_size); | ||
583 | 681 | |||
584 | 682 | for(auto i = 0u; i < num_allocations + 1; i++) | ||
585 | 683 | vault.withdraw(); | ||
586 | 684 | } | ||
587 | 685 | >>>>>>> MERGE-SOURCE |