Mir

Merge lp:~alan-griffiths/mir/fix-1583536-for-0.23.1 into lp:mir

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
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
=== modified file 'debian/changelog'
--- debian/changelog 2016-05-03 04:36:33 +0000
+++ debian/changelog 2016-05-20 09:11:49 +0000
@@ -1,25 +1,51 @@
1mir (0.23.0) UNRELEASED; urgency=medium1mir (0.23.0ubuntu1) UNRELEASED; urgency=medium
22
3 [ Kevin DuBois ]
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)
4 - ABI summary:5 - ABI summary:
5 . mirclient ABI unchanged at 96 . mirclient ABI unchanged at 9
6 . mirserver ABI unchanged at 397 . mirserver ABI bumped to 40
7 . mircommon ABI unchanged at 58 . mircommon ABI bumped at 6
8 . mirplatform ABI unchanged at 119 . mirplatform ABI unchanged at 11
9 . mirprotobuf ABI unchanged at 310 . mirprotobuf ABI unchanged at 3
10 . mirplatformgraphics ABI unchanged at 911 . mirplatformgraphics ABI unchanged at 9
11 . mirclientplatform ABI unchanged at 512 . mirclientplatform ABI unchanged at 5
12 . mirinputplatform ABI unchanged at 513 . mirinputplatform ABI unchanged at 5
13 - Enhancements:14 - Enhancements:
15 . Enable internal usage of more flexible graphics buffer submission,
16 precursing client API additions.
14 - Bug fixes:17 - Bug fixes:
18 . Potential NBS performance loss after resize (LP: #1579076)
19 . Performance loss with NBS and overlays on (LP: #1578159)
15 . Mir crashes with useless backtrace when mg::Platform methods throw20 . Mir crashes with useless backtrace when mg::Platform methods throw
16 (LP: #1553549)21 (LP: #1553549)
17 . Virtual output is not removed when screencast client disappears22 . Virtual output is not removed when screencast client disappears
18 (LP: #1573572)23 (LP: #1573572)
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)
20 . Resizing can crash mir_demo_server (LP: #1575211)25 . mir_demo_server(_minimal): Window movement/resizing stops responding
2126 when the cursor leaves the surface, and can lead to windows 1px wide
22 -- Alberto Aguirre <alberto.aguirre@canonical.com> Thu, 28 Apr 2016 09:24:21 -050027 and unrecoverable. (LP: #1447886)
28 . Virtual display output configuration is set to LVDS (LP: #1573782)
29 . Mir-on-X11 doesn't pass Alt+primary button drag to Mir (LP: #1575765)
30 . Mir-on-X11 breaks mir_proving_server resize logic (LP: #1575192)
31 . Resizing can crash mir_demo_server (LP: #1575211)
32 . [regression] Cursor stops at phantom edge on M10 and N7 (LP: 1580774)
33
34 -- Kevin DuBois <kevin.dubois@canonical.com> Mon, 09 May 2016 11:59:42 -0400
35
36mir (0.22.1+16.04.20160516.2-0ubuntu1) xenial; urgency=medium
37
38 [ Andreas Pokorny ]
39 * New upstream release 0.22.1 (https://launchpad.net/mir/+milestone/0.22.1)
40 - ABI summary:
41 . No ABI changes in any libraries. Bugfix release only.
42 - Bugs fixed:
43 . [regression] Cursor stops at phantom edge on M10 and N7 (LP: 1580774)
44
45 [ CI Train Bot ]
46 * No-change rebuild.
47
48 -- MichaƂ Sawicz <michal.sawicz@canonical.com> Mon, 16 May 2016 15:36:50 +0000
2349
24mir (0.22.0+16.04.20160422.2-0ubuntu1) xenial; urgency=medium50mir (0.22.0+16.04.20160422.2-0ubuntu1) xenial; urgency=medium
2551
2652
=== modified file 'debian/control'
--- debian/control 2016-05-20 07:19:12 +0000
+++ debian/control 2016-05-20 09:11:49 +0000
@@ -68,7 +68,7 @@
6868
69#TODO: Packaging infrastructure for better dependency generation,69#TODO: Packaging infrastructure for better dependency generation,
70# ala pkg-xorg's xviddriver:Provides and ABI detection.70# ala pkg-xorg's xviddriver:Provides and ABI detection.
71Package: libmirserver3971Package: libmirserver40
72Section: libs72Section: libs
73Architecture: linux-any73Architecture: linux-any
74Multi-Arch: same74Multi-Arch: same
@@ -100,7 +100,7 @@
100Architecture: linux-any100Architecture: linux-any
101Multi-Arch: same101Multi-Arch: same
102Pre-Depends: ${misc:Pre-Depends}102Pre-Depends: ${misc:Pre-Depends}
103Depends: libmircommon5 (= ${binary:Version}), 103Depends: libmircommon6 (= ${binary:Version}),
104 libprotobuf-dev (>= 2.4.1),104 libprotobuf-dev (>= 2.4.1),
105 libxkbcommon-dev,105 libxkbcommon-dev,
106 ${misc:Depends},106 ${misc:Depends},
@@ -134,7 +134,7 @@
134Architecture: linux-any134Architecture: linux-any
135Multi-Arch: same135Multi-Arch: same
136Pre-Depends: ${misc:Pre-Depends}136Pre-Depends: ${misc:Pre-Depends}
137Depends: libmirserver39 (= ${binary:Version}),137Depends: libmirserver40 (= ${binary:Version}),
138 libmirplatform-dev (= ${binary:Version}),138 libmirplatform-dev (= ${binary:Version}),
139 libmircommon-dev (= ${binary:Version}),139 libmircommon-dev (= ${binary:Version}),
140 libglm-dev,140 libglm-dev,
@@ -288,7 +288,7 @@
288 .288 .
289 Contains a tool for checking the graphics components of android devices.289 Contains a tool for checking the graphics components of android devices.
290290
291Package: libmircommon5291Package: libmircommon6
292Section: libs292Section: libs
293Architecture: linux-any293Architecture: linux-any
294Multi-Arch: same294Multi-Arch: same
295295
=== renamed file 'debian/libmircommon5.install' => 'debian/libmircommon6.install'
--- debian/libmircommon5.install 2015-06-17 05:20:42 +0000
+++ debian/libmircommon6.install 2016-05-20 09:11:49 +0000
@@ -1,1 +1,1 @@
1usr/lib/*/libmircommon.so.51usr/lib/*/libmircommon.so.6
22
=== renamed file 'debian/libmirserver39.install' => 'debian/libmirserver40.install'
--- debian/libmirserver39.install 2016-03-29 07:30:50 +0000
+++ debian/libmirserver40.install 2016-05-20 09:11:49 +0000
@@ -1,1 +1,1 @@
1usr/lib/*/libmirserver.so.391usr/lib/*/libmirserver.so.40
22
=== modified file 'src/client/buffer_vault.cpp'
--- src/client/buffer_vault.cpp 2016-05-09 14:27:58 +0000
+++ src/client/buffer_vault.cpp 2016-05-20 09:11:49 +0000
@@ -122,7 +122,7 @@
122122
123mcl::NoTLSFuture<std::shared_ptr<mcl::Buffer>> mcl::BufferVault::withdraw()123mcl::NoTLSFuture<std::shared_ptr<mcl::Buffer>> mcl::BufferVault::withdraw()
124{124{
125 std::lock_guard<std::mutex> lk(mutex);125 std::unique_lock<std::mutex> lk(mutex);
126 if (disconnected_)126 if (disconnected_)
127 BOOST_THROW_EXCEPTION(std::logic_error("server_disconnected"));127 BOOST_THROW_EXCEPTION(std::logic_error("server_disconnected"));
128 mcl::NoTLSPromise<std::shared_ptr<mcl::Buffer>> promise;128 mcl::NoTLSPromise<std::shared_ptr<mcl::Buffer>> promise;
@@ -146,6 +146,15 @@
146 else146 else
147 {147 {
148 promises.emplace_back(std::move(promise));148 promises.emplace_back(std::move(promise));
149
150 auto s = size;
151 bool allocate_buffer = (current_buffer_count < needed_buffer_count);
152 if (allocate_buffer)
153 current_buffer_count++;
154 lk.unlock();
155
156 if (allocate_buffer)
157 alloc_buffer(s, format, usage);
149 }158 }
150 return future;159 return future;
151}160}
@@ -198,12 +207,12 @@
198 {207 {
199 auto id = it->first;208 auto id = it->first;
200 buffers.erase(it);209 buffers.erase(it);
201 lk.unlock();
202
203 free_buffer(id);
204 if (should_decrease_count)210 if (should_decrease_count)
205 current_buffer_count--;211 current_buffer_count--;
206 else212 lk.unlock();
213
214 free_buffer(id);
215 if (!should_decrease_count)
207 alloc_buffer(size, format, usage);216 alloc_buffer(size, format, usage);
208 return;217 return;
209 }218 }
@@ -221,15 +230,6 @@
221 }230 }
222}231}
223232
224//TODO: the server will currently spam us with a lot of resize messages at once,
225// and we want to delay the IPC transactions for resize. If we could rate-limit
226// the incoming messages, we should should consolidate the scale and size functions
227void mcl::BufferVault::set_size(geom::Size sz)
228{
229 std::lock_guard<std::mutex> lk(mutex);
230 size = sz;
231}
232
233void mcl::BufferVault::disconnected()233void mcl::BufferVault::disconnected()
234{234{
235 std::lock_guard<std::mutex> lk(mutex);235 std::lock_guard<std::mutex> lk(mutex);
@@ -239,17 +239,28 @@
239239
240void mcl::BufferVault::set_scale(float scale)240void mcl::BufferVault::set_scale(float scale)
241{241{
242 std::unique_lock<std::mutex> lk(mutex);
243 set_size(lk, size * scale);
244}
245
246void mcl::BufferVault::set_size(geom::Size new_size)
247{
248 std::unique_lock<std::mutex> lk(mutex);
249 set_size(lk, new_size);
250}
251
252void mcl::BufferVault::set_size(std::unique_lock<std::mutex>& lk, geometry::Size new_size)
253{
254 if (new_size == size)
255 return;
242 std::vector<int> free_ids;256 std::vector<int> free_ids;
243 std::unique_lock<std::mutex> lk(mutex);
244 auto new_size = size * scale;
245 if (new_size == size)
246 return;
247 size = new_size;257 size = new_size;
248 for (auto it = buffers.begin(); it != buffers.end();)258 for (auto it = buffers.begin(); it != buffers.end();)
249 {259 {
250 auto buffer = checked_buffer_from_map(it->first);260 auto buffer = checked_buffer_from_map(it->first);
251 if ((it->second == Owner::Self) && (buffer->size() != size)) 261 if ((it->second == Owner::Self) && (buffer->size() != size))
252 {262 {
263 current_buffer_count--;
253 free_ids.push_back(it->first);264 free_ids.push_back(it->first);
254 it = buffers.erase(it);265 it = buffers.erase(it);
255 }266 }
@@ -261,7 +272,7 @@
261 lk.unlock();272 lk.unlock();
262273
263 for(auto& id : free_ids)274 for(auto& id : free_ids)
264 realloc_buffer(id, new_size, format, usage);275 free_buffer(id);
265}276}
266277
267void mcl::BufferVault::increase_buffer_count()278void mcl::BufferVault::increase_buffer_count()
268279
=== modified file 'src/client/buffer_vault.h'
--- src/client/buffer_vault.h 2016-05-09 14:27:58 +0000
+++ src/client/buffer_vault.h 2016-05-20 09:11:49 +0000
@@ -78,6 +78,8 @@
78 void alloc_buffer(geometry::Size size, MirPixelFormat format, int usage);78 void alloc_buffer(geometry::Size size, MirPixelFormat format, int usage);
79 void free_buffer(int free_id);79 void free_buffer(int free_id);
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);
81 void set_size(std::unique_lock<std::mutex>& lk, geometry::Size new_size);
82
81 std::shared_ptr<Buffer> checked_buffer_from_map(int id);83 std::shared_ptr<Buffer> checked_buffer_from_map(int id);
8284
83 std::shared_ptr<ClientBufferFactory> const platform_factory;85 std::shared_ptr<ClientBufferFactory> const platform_factory;
8486
=== modified file 'src/common/CMakeLists.txt'
--- src/common/CMakeLists.txt 2016-03-30 08:59:35 +0000
+++ src/common/CMakeLists.txt 2016-05-20 09:11:49 +0000
@@ -36,7 +36,7 @@
36 PARENT_SCOPE)36 PARENT_SCOPE)
3737
38# TODO we need a place to manage ABI and related versioning but use this as placeholder38# TODO we need a place to manage ABI and related versioning but use this as placeholder
39set(MIRCOMMON_ABI 5)39set(MIRCOMMON_ABI 6)
40set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map)40set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map)
4141
42mir_add_library_with_symbols(mircommon SHARED42mir_add_library_with_symbols(mircommon SHARED
4343
=== modified file 'src/server/CMakeLists.txt'
--- src/server/CMakeLists.txt 2016-05-12 07:35:07 +0000
+++ src/server/CMakeLists.txt 2016-05-20 09:11:49 +0000
@@ -125,7 +125,7 @@
125 ${CMAKE_SOURCE_DIR}/include/server/mir DESTINATION "include/mirserver"125 ${CMAKE_SOURCE_DIR}/include/server/mir DESTINATION "include/mirserver"
126)126)
127127
128set(MIRSERVER_ABI 39) # Be sure to increment MIR_VERSION_MINOR at the same time128set(MIRSERVER_ABI 40) # Be sure to increment MIR_VERSION_MINOR at the same time
129set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map)129set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map)
130130
131set_target_properties(131set_target_properties(
132132
=== modified file 'src/server/symbols.map'
--- src/server/symbols.map 2016-05-03 04:36:33 +0000
+++ src/server/symbols.map 2016-05-20 09:11:49 +0000
@@ -1,4 +1,4 @@
1MIR_SERVER_0.22 {1MIR_SERVER_0.23 {
2 global:2 global:
3 extern "C++" {3 extern "C++" {
4# Symbols not yet picked up by script4# Symbols not yet picked up by script
55
=== modified file 'tests/acceptance-tests/test_prompt_session_client_api.cpp'
--- tests/acceptance-tests/test_prompt_session_client_api.cpp 2016-03-29 07:30:50 +0000
+++ tests/acceptance-tests/test_prompt_session_client_api.cpp 2016-05-20 09:11:49 +0000
@@ -383,7 +383,7 @@
383 mir_prompt_session_release_sync(prompt_session);383 mir_prompt_session_release_sync(prompt_session);
384}384}
385385
386TEST_F(PromptSessionClientAPI, client_pid_is_associated_with_session)386TEST_F(PromptSessionClientAPI, DISABLED_client_pid_is_associated_with_session)
387{387{
388 connection = mir_connect_sync(new_connection().c_str(), __PRETTY_FUNCTION__);388 connection = mir_connect_sync(new_connection().c_str(), __PRETTY_FUNCTION__);
389389
@@ -624,7 +624,7 @@
624#ifndef TEST624#ifndef TEST
625int main()625int main()
626#else626#else
627TEST(LP, 1540731)627TEST(LP, DISABLED_1540731)
628#endif628#endif
629{629{
630 enum { server, client, size };630 enum { server, client, size };
631631
=== modified file 'tests/integration-tests/test_buffer_scheduling.cpp'
=== modified file 'tests/mir_test/CMakeLists.txt'
--- tests/mir_test/CMakeLists.txt 2015-06-23 16:08:35 +0000
+++ tests/mir_test/CMakeLists.txt 2016-05-20 09:11:49 +0000
@@ -1,3 +1,7 @@
1# We don't want LTO objects in a published archive (libmir-test-assist.a)
2string (REPLACE " -flto " " " CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
3string (REPLACE " -flto " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
4
1add_library(mir-public-test OBJECT5add_library(mir-public-test OBJECT
2 cross_process_action.cpp6 cross_process_action.cpp
3 cross_process_sync.cpp7 cross_process_sync.cpp
48
=== modified file 'tests/mir_test_doubles/CMakeLists.txt'
--- tests/mir_test_doubles/CMakeLists.txt 2016-05-04 09:06:26 +0000
+++ tests/mir_test_doubles/CMakeLists.txt 2016-05-20 09:11:49 +0000
@@ -16,7 +16,6 @@
16 mock_input_device.cpp16 mock_input_device.cpp
17 mock_frame_dropping_policy_factory.cpp17 mock_frame_dropping_policy_factory.cpp
18 mock_timer.cpp18 mock_timer.cpp
19 stub_buffer.cpp
20 test_protobuf_client.cpp19 test_protobuf_client.cpp
21 test_protobuf_socket_server.cpp20 test_protobuf_socket_server.cpp
22 triggered_main_loop.cpp21 triggered_main_loop.cpp
@@ -71,11 +70,16 @@
71 )70 )
72endif()71endif()
7372
73# We don't want LTO objects in a published archive (libmir-test-assist.a)
74string (REPLACE " -flto " " " CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
75string (REPLACE " -flto " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
76
74add_library(mir-public-test-doubles OBJECT77add_library(mir-public-test-doubles OBJECT
75 nested_mock_egl.cpp78 nested_mock_egl.cpp
76 null_logger.cpp79 null_logger.cpp
77 stub_display_configuration.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/stub_display_configuration.h80 stub_display_configuration.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/stub_display_configuration.h
78 fake_display.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/fake_display.h81 fake_display.cpp ${CMAKE_SOURCE_DIR}/include/test/mir/test/doubles/fake_display.h
82 stub_buffer.cpp
79)83)
8084
81add_library(mir-test-doubles-static STATIC85add_library(mir-test-doubles-static STATIC
8286
=== modified file 'tests/mir_test_framework/CMakeLists.txt'
--- tests/mir_test_framework/CMakeLists.txt 2016-03-29 07:30:50 +0000
+++ tests/mir_test_framework/CMakeLists.txt 2016-05-20 09:11:49 +0000
@@ -21,6 +21,10 @@
21 -DMIR_BUILD_PREFIX="${CMAKE_BINARY_DIR}"21 -DMIR_BUILD_PREFIX="${CMAKE_BINARY_DIR}"
22 )22 )
2323
24# We don't want LTO objects in a published archive (libmir-test-assist.a)
25string (REPLACE " -flto " " " CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
26string (REPLACE " -flto " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
27
24add_library(mir-public-test-framework OBJECT28add_library(mir-public-test-framework OBJECT
25 any_surface.cpp29 any_surface.cpp
26 async_server_runner.cpp30 async_server_runner.cpp
2731
=== modified file 'tests/mirtest.pc.in'
--- tests/mirtest.pc.in 2015-06-25 16:47:02 +0000
+++ tests/mirtest.pc.in 2016-05-20 09:11:49 +0000
@@ -6,5 +6,5 @@
6Description: Mir test assist library6Description: Mir test assist library
7Version: @MIR_VERSION@7Version: @MIR_VERSION@
8Requires: mirserver mirplatform mirclient8Requires: mirserver mirplatform mirclient
9Libs: -L@LIBDIR@ -lmir-test-assist9Libs: -L@LIBDIR@ -lmir-test-assist -ldl
10Cflags: -I@INCLUDEDIR@10Cflags: -I@INCLUDEDIR@
1111
=== modified file 'tests/unit-tests/client/test_buffer_vault.cpp'
--- tests/unit-tests/client/test_buffer_vault.cpp 2016-05-09 14:27:58 +0000
+++ tests/unit-tests/client/test_buffer_vault.cpp 2016-05-20 09:11:49 +0000
@@ -326,6 +326,8 @@
326326
327TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_immediate_response)327TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_immediate_response)
328{328{
329 vault.set_size(new_size);
330
329 EXPECT_CALL(mock_requests, free_buffer(package.buffer_id()));331 EXPECT_CALL(mock_requests, free_buffer(package.buffer_id()));
330 EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_))332 EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_))
331 .WillOnce(Invoke(333 .WillOnce(Invoke(
@@ -334,17 +336,17 @@
334 vault.wire_transfer_inbound(package4.buffer_id());336 vault.wire_transfer_inbound(package4.buffer_id());
335 }));337 }));
336338
337 vault.set_size(new_size);
338 vault.wire_transfer_inbound(package.buffer_id());339 vault.wire_transfer_inbound(package.buffer_id());
339 Mock::VerifyAndClearExpectations(&mock_requests);340 Mock::VerifyAndClearExpectations(&mock_requests);
340}341}
341342
342TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_delayed_response)343TEST_F(StartedBufferVault, reallocates_incoming_buffers_of_incorrect_size_with_delayed_response)
343{344{
345 vault.set_size(new_size);
346
344 EXPECT_CALL(mock_requests, free_buffer(package.buffer_id()));347 EXPECT_CALL(mock_requests, free_buffer(package.buffer_id()));
345 EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_));348 EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_));
346349
347 vault.set_size(new_size);
348 vault.wire_transfer_inbound(package.buffer_id());350 vault.wire_transfer_inbound(package.buffer_id());
349 vault.wire_transfer_inbound(package4.buffer_id());351 vault.wire_transfer_inbound(package4.buffer_id());
350 EXPECT_THAT(vault.withdraw().get()->size(), Eq(new_size));352 EXPECT_THAT(vault.withdraw().get()->size(), Eq(new_size));
@@ -361,9 +363,9 @@
361 Mock::VerifyAndClearExpectations(&mock_requests);363 Mock::VerifyAndClearExpectations(&mock_requests);
362}364}
363365
364TEST_F(StartedBufferVault, simply_setting_size_triggers_no_server_interations)366TEST_F(StartedBufferVault, setting_size_frees_unneeded_buffers_right_away)
365{367{
366 EXPECT_CALL(mock_requests, free_buffer(_)).Times(0);368 EXPECT_CALL(mock_requests, free_buffer(_)).Times(3);
367 EXPECT_CALL(mock_requests, allocate_buffer(_,_,_)).Times(0);369 EXPECT_CALL(mock_requests, allocate_buffer(_,_,_)).Times(0);
368 auto const cycles = 30u;370 auto const cycles = 30u;
369 geom::Size new_size(80, 100);371 geom::Size new_size(80, 100);
@@ -450,21 +452,14 @@
450 EXPECT_CALL(mock_requests, free_buffer(_))452 EXPECT_CALL(mock_requests, free_buffer(_))
451 .Times(initial_nbuffers);453 .Times(initial_nbuffers);
452454
453 auto buffer = vault.withdraw().get();
454 vault.set_scale(scale);455 vault.set_scale(scale);
455 vault.deposit(buffer);
456 vault.wire_transfer_outbound(buffer);
457 vault.wire_transfer_inbound(package.buffer_id());
458456
459 for(auto i = 0; i < 100; i++)457 for(auto i = 0u; i < initial_nbuffers; i++)
460 {458 {
461 auto b = vault.withdraw().get();459 auto b = vault.withdraw().get();
462 EXPECT_THAT(b->size(), Eq(new_size));
463 vault.deposit(b);460 vault.deposit(b);
464 b->received();
465 vault.wire_transfer_outbound(b);
466 vault.wire_transfer_inbound(buffers[(i+1)%3].buffer_id());
467 }461 }
462
468 Mock::VerifyAndClearExpectations(&mock_requests);463 Mock::VerifyAndClearExpectations(&mock_requests);
469}464}
470465
@@ -554,24 +549,137 @@
554 vault.wire_transfer_inbound(package2.buffer_id());549 vault.wire_transfer_inbound(package2.buffer_id());
555 Mock::VerifyAndClearExpectations(&mock_requests);550 Mock::VerifyAndClearExpectations(&mock_requests);
556}551}
557552<<<<<<< TREE
558//LP: #1578159553
559TEST_F(StartedBufferVault, prefers_buffers_returned_further_in_the_past)554//LP: #1578159
560{555TEST_F(StartedBufferVault, prefers_buffers_returned_further_in_the_past)
561 auto buffer = vault.withdraw().get();556{
562 vault.deposit(buffer);557 auto buffer = vault.withdraw().get();
563 vault.wire_transfer_outbound(buffer);558 vault.deposit(buffer);
564 auto first_id = buffer->rpc_id();559 vault.wire_transfer_outbound(buffer);
565560 auto first_id = buffer->rpc_id();
566 buffer = vault.withdraw().get();561
567 vault.deposit(buffer);562 buffer = vault.withdraw().get();
568 vault.wire_transfer_outbound(buffer);563 vault.deposit(buffer);
569 auto second_id = buffer->rpc_id();564 vault.wire_transfer_outbound(buffer);
570565 auto second_id = buffer->rpc_id();
571 vault.wire_transfer_inbound(second_id);566
572 vault.wire_transfer_inbound(first_id);567 vault.wire_transfer_inbound(second_id);
573568 vault.wire_transfer_inbound(first_id);
574 EXPECT_THAT(vault.withdraw().get()->rpc_id(), Ne(first_id));569
575570 EXPECT_THAT(vault.withdraw().get()->rpc_id(), Ne(first_id));
576571
577}572
573}
574=======
575
576//LP: #1578159
577TEST_F(StartedBufferVault, prefers_buffers_returned_further_in_the_past)
578{
579 auto buffer = vault.withdraw().get();
580 vault.deposit(buffer);
581 vault.wire_transfer_outbound(buffer);
582 auto first_id = buffer->rpc_id();
583
584 buffer = vault.withdraw().get();
585 vault.deposit(buffer);
586 vault.wire_transfer_outbound(buffer);
587 auto second_id = buffer->rpc_id();
588
589 vault.wire_transfer_inbound(second_id);
590 vault.wire_transfer_inbound(first_id);
591
592 EXPECT_THAT(vault.withdraw().get()->rpc_id(), Ne(first_id));
593}
594
595//LP: #1579076
596TEST_F(StartedBufferVault, doesnt_let_buffers_stagnate_after_resize)
597{
598 EXPECT_CALL(mock_requests, free_buffer(_))
599 .Times(3);
600 vault.set_size(new_size);
601
602 EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_))
603 .Times(1);
604 auto buffer_future = vault.withdraw();
605 vault.wire_transfer_inbound(package4.buffer_id());
606 EXPECT_THAT(buffer_future.get()->size(), Eq(new_size));
607 Mock::VerifyAndClearExpectations(&mock_requests);
608}
609
610TEST_F(StartedBufferVault, doesnt_free_buffers_in_the_driver_after_resize)
611{
612 EXPECT_CALL(mock_requests, free_buffer(_))
613 .Times(2);
614 auto buffer = vault.withdraw().get();
615 vault.set_size(new_size);
616 Mock::VerifyAndClearExpectations(&mock_requests);
617
618 vault.deposit(buffer);
619 vault.wire_transfer_outbound(buffer);
620
621 EXPECT_CALL(mock_requests, free_buffer(_))
622 .Times(1);
623 vault.wire_transfer_inbound(buffer->rpc_id());
624 Mock::VerifyAndClearExpectations(&mock_requests);
625}
626
627TEST_F(StartedBufferVault, doesnt_free_buffers_with_content_after_resize)
628{
629 EXPECT_CALL(mock_requests, free_buffer(_))
630 .Times(2);
631 auto buffer = vault.withdraw().get();
632 vault.deposit(buffer);
633 vault.set_size(new_size);
634 Mock::VerifyAndClearExpectations(&mock_requests);
635
636 vault.wire_transfer_outbound(buffer);
637 EXPECT_CALL(mock_requests, free_buffer(_))
638 .Times(1);
639 vault.wire_transfer_inbound(buffer->rpc_id());
640 Mock::VerifyAndClearExpectations(&mock_requests);
641}
642
643TEST_F(StartedBufferVault, doesnt_free_buffers_if_size_is_the_same)
644{
645 EXPECT_CALL(mock_requests, free_buffer(_))
646 .Times(0);
647 vault.set_size(size);
648 Mock::VerifyAndClearExpectations(&mock_requests);
649}
650
651TEST_F(StartedBufferVault, delays_allocation_if_not_needed)
652{
653 vault.set_size(new_size);
654
655 EXPECT_CALL(mock_requests, allocate_buffer(new_size,_,_))
656 .Times(1)
657 .WillOnce(Invoke(
658 [&, this](geom::Size, MirPixelFormat, int)
659 {
660 vault.wire_transfer_inbound(package4.buffer_id());
661 }));
662
663 for(auto i = 0u; i < 10u; i++)
664 {
665 auto buffer = vault.withdraw().get();
666 vault.deposit(buffer);
667 buffer->received();
668 vault.wire_transfer_outbound(buffer);
669 vault.wire_transfer_inbound(buffer->rpc_id());
670 }
671}
672
673TEST_F(StartedBufferVault, can_increase_count_after_resize)
674{
675 auto num_allocations = 4u;
676 EXPECT_CALL(mock_requests, allocate_buffer(_,_,_))
677 .Times(num_allocations);
678
679 vault.increase_buffer_count();
680 vault.set_size(new_size);
681
682 for(auto i = 0u; i < num_allocations + 1; i++)
683 vault.withdraw();
684}
685>>>>>>> MERGE-SOURCE

Subscribers

People subscribed via source and target branches