Mir

Merge lp:~alan-griffiths/mir/BufferStreamArrangement.can_be_specified_when_creating_surface into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Alan Griffiths
Approved revision: no longer in the source branch.
Merged at revision: 3508
Proposed branch: lp:~alan-griffiths/mir/BufferStreamArrangement.can_be_specified_when_creating_surface
Merge into: lp:mir
Diff against target: 130 lines (+41/-21)
3 files modified
src/client/mir_connection.cpp (+10/-5)
src/server/frontend/session_mediator.cpp (+4/-5)
tests/acceptance-tests/test_buffer_stream_arrangement.cpp (+27/-11)
To merge this branch: bzr merge lp:~alan-griffiths/mir/BufferStreamArrangement.can_be_specified_when_creating_surface
Reviewer Review Type Date Requested Status
Mir CI Bot continuous-integration Approve
Kevin DuBois (community) Approve
Review via email: mp+294407@code.launchpad.net

Commit message

Add BufferStreamArrangement.can_be_specified_when_creating_surface test and fix implementation to pass.

Description of the change

In looking to fix lp:1580555 I found the code I wanted to change ins SessionMediator::create_surface() wasn't under test. Here is the missing test.

To post a comment you must log in.
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

FAILED: Continuous integration, rev:3507
https://mir-jenkins.ubuntu.com/job/mir-ci/976/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/1057/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/1104
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/1095
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/1095
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/1067
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/1067/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/1067
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/1067/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/1067
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/1067/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/1067
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/1067/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/1067/console

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/976/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Cemil Azizoglu (cemil-azizoglu) wrote :

Difficult to review right now as mir_connection.cpp changes are conflicting with those in https://code.launchpad.net/~kdub/mir/fix-1577967/+merge/294283.

Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> Difficult to review right now as mir_connection.cpp changes are conflicting
> with those in https://code.launchpad.net/~kdub/mir/fix-1577967/+merge/294283.

The mir_connection.cpp changes here are not needed with that branch. So you can try:

$ bzr resolve --take-this src/client/mir_connection.cpp

Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3507
https://mir-jenkins.ubuntu.com/job/mir-ci/979/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/1061
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/1108
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/1099
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/1099
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/1071
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/1071/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/1071
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/1071/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/1071
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/1071/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/1071
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/1071/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/1071
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/1071/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/979/rebuild

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

lgtm, more-or-less a subset of what is needed by fix-1577967 (which tacks on some further clarifications)

review: Approve
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3509
https://mir-jenkins.ubuntu.com/job/mir-ci/986/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/1068
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/1115
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/1106
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/1106
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/1078
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/1078/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/1078
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/1078/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/1078
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/1078/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/1078
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/1078/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/1078
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/1078/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/986/rebuild

review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/client/mir_connection.cpp'
--- src/client/mir_connection.cpp 2016-05-09 14:27:58 +0000
+++ src/client/mir_connection.cpp 2016-05-13 08:57:27 +0000
@@ -381,10 +381,13 @@
381 std::string name{spec.surface_name.is_set() ?381 std::string name{spec.surface_name.is_set() ?
382 spec.surface_name.value() : ""};382 spec.surface_name.value() : ""};
383383
384 stream = std::make_shared<mcl::BufferStream>(384 if (surface_proto->has_buffer_stream())
385 this, request->wh, server, platform, surface_map, buffer_factory,385 {
386 surface_proto->buffer_stream(), make_perf_report(logger), name,386 stream = std::make_shared<mcl::BufferStream>(
387 mir::geometry::Size{surface_proto->width(), surface_proto->height()}, nbuffers);387 this, request->wh, server, platform, surface_map, buffer_factory,
388 surface_proto->buffer_stream(), make_perf_report(logger), name,
389 mir::geometry::Size{surface_proto->width(), surface_proto->height()}, nbuffers);
390 }
388 }391 }
389 catch (std::exception const& error)392 catch (std::exception const& error)
390 {393 {
@@ -417,7 +420,9 @@
417 this, server, &debug, stream, input_platform, spec, *surface_proto, request->wh);420 this, server, &debug, stream, input_platform, spec, *surface_proto, request->wh);
418421
419 surface_map->insert(mf::SurfaceId{surface_proto->id().value()}, surf);422 surface_map->insert(mf::SurfaceId{surface_proto->id().value()}, surf);
420 surface_map->insert(mf::BufferStreamId{surface_proto->buffer_stream().id().value()}, stream);423
424 if (stream)
425 surface_map->insert(mf::BufferStreamId{surface_proto->buffer_stream().id().value()}, stream);
421 }426 }
422427
423 callback(surf.get(), context);428 callback(surf.get(), context);
424429
=== modified file 'src/server/frontend/session_mediator.cpp'
--- src/server/frontend/session_mediator.cpp 2016-05-10 10:48:28 +0000
+++ src/server/frontend/session_mediator.cpp 2016-05-13 08:57:27 +0000
@@ -335,19 +335,15 @@
335 auto const surf_id = shell->create_surface(session, params, sink);335 auto const surf_id = shell->create_surface(session, params, sink);
336336
337 auto surface = session->get_surface(surf_id);337 auto surface = session->get_surface(surf_id);
338 auto stream = session->get_buffer_stream(buffer_stream_id);
339 auto const& client_size = surface->client_size();338 auto const& client_size = surface->client_size();
340 response->mutable_id()->set_value(surf_id.as_value());339 response->mutable_id()->set_value(surf_id.as_value());
341 response->set_width(client_size.width.as_uint32_t());340 response->set_width(client_size.width.as_uint32_t());
342 response->set_height(client_size.height.as_uint32_t());341 response->set_height(client_size.height.as_uint32_t());
343342
344 // TODO: Deprecate343 // TODO: Deprecate
345 response->set_pixel_format(stream->pixel_format());344 response->set_pixel_format(request->pixel_format());
346 response->set_buffer_usage(request->buffer_usage());345 response->set_buffer_usage(request->buffer_usage());
347346
348 response->mutable_buffer_stream()->set_pixel_format(stream->pixel_format());
349 response->mutable_buffer_stream()->set_buffer_usage(request->buffer_usage());
350
351 if (surface->supports_input())347 if (surface->supports_input())
352 response->add_fd(surface->client_input_fd());348 response->add_fd(surface->client_input_fd());
353 349
@@ -364,6 +360,9 @@
364 {360 {
365 buffer_stream_tracker.set_default_stream(surf_id, buffer_stream_id);361 buffer_stream_tracker.set_default_stream(surf_id, buffer_stream_id);
366 response->mutable_buffer_stream()->mutable_id()->set_value(buffer_stream_id.as_value());362 response->mutable_buffer_stream()->mutable_id()->set_value(buffer_stream_id.as_value());
363 response->mutable_buffer_stream()->set_pixel_format(legacy_stream->pixel_format());
364 response->mutable_buffer_stream()->set_buffer_usage(request->buffer_usage());
365
367 advance_buffer(buffer_stream_id, *legacy_stream, buffer_stream_tracker.last_buffer(buffer_stream_id),366 advance_buffer(buffer_stream_id, *legacy_stream, buffer_stream_tracker.last_buffer(buffer_stream_id),
368 [this, buffering_sender, response, done, session]367 [this, buffering_sender, response, done, session]
369 (graphics::Buffer* client_buffer, graphics::BufferIpcMsgType msg_type)368 (graphics::Buffer* client_buffer, graphics::BufferIpcMsgType msg_type)
370369
=== modified file 'tests/acceptance-tests/test_buffer_stream_arrangement.cpp'
--- tests/acceptance-tests/test_buffer_stream_arrangement.cpp 2016-01-29 08:18:22 +0000
+++ tests/acceptance-tests/test_buffer_stream_arrangement.cpp 2016-05-13 08:57:27 +0000
@@ -66,15 +66,6 @@
6666
67struct Stream67struct Stream
68{68{
69 Stream(MirBufferStream* stream, geom::Point pt, geom::Size sz) :
70 stream(stream),
71 pos{pt},
72 stream_size{sz},
73 needs_release{false}
74 {
75 mir_buffer_stream_swap_buffers_sync(stream);
76 }
77
78 Stream(MirConnection* connection, geom::Rectangle rect) :69 Stream(MirConnection* connection, geom::Rectangle rect) :
79 stream(mir_connection_create_buffer_stream_sync(70 stream(mir_connection_create_buffer_stream_sync(
80 connection,71 connection,
@@ -212,8 +203,7 @@
212 ConnectedClientWithASurface::SetUp();203 ConnectedClientWithASurface::SetUp();
213 server.the_cursor()->hide();204 server.the_cursor()->hide();
214205
215 streams.emplace_back(206 streams.emplace_back(std::make_unique<Stream>(connection, geom::Rectangle{geom::Point{0,0}, surface_size}));
216 std::make_unique<Stream>(mir_surface_get_buffer_stream(surface), geom::Point{0,0}, surface_size));
217 int const additional_streams{3};207 int const additional_streams{3};
218 for (auto i = 0; i < additional_streams; i++)208 for (auto i = 0; i < additional_streams; i++)
219 {209 {
@@ -235,6 +225,32 @@
235};225};
236}226}
237227
228TEST_F(BufferStreamArrangement, can_be_specified_when_creating_surface)
229{
230 using namespace testing;
231 std::vector<MirBufferStreamInfo> infos(streams.size());
232 auto i = 0u;
233 for (auto const& stream : streams)
234 {
235 infos[i++] = MirBufferStreamInfo{
236 stream->handle(),
237 stream->position().x.as_int(),
238 stream->position().y.as_int()};
239 }
240
241 mir_surface_release_sync(surface);
242
243 auto const spec = mir_connection_create_spec_for_normal_surface(
244 connection, surface_size.width.as_int(), surface_size.height.as_int(), mir_pixel_format_abgr_8888);
245 mir_surface_spec_set_name(spec, "BufferStreamArrangement.can_be_specified_when_creating_surface");
246 mir_surface_spec_set_buffer_usage(spec, mir_buffer_usage_hardware);
247 mir_surface_spec_set_streams(spec, infos.data(), infos.size());
248
249 surface = mir_surface_create_sync(spec);
250 mir_surface_spec_release(spec);
251 EXPECT_TRUE(mir_surface_is_valid(surface)) << mir_surface_get_error_message(surface);
252}
253
238TEST_F(BufferStreamArrangement, arrangements_are_applied)254TEST_F(BufferStreamArrangement, arrangements_are_applied)
239{255{
240 using namespace testing;256 using namespace testing;

Subscribers

People subscribed via source and target branches