Mir

Merge lp:~brandontschaefer/mir/new-display-blob into lp:mir

Proposed by Brandon Schaefer
Status: Merged
Approved by: Alan Griffiths
Approved revision: no longer in the source branch.
Merged at revision: 3892
Proposed branch: lp:~brandontschaefer/mir/new-display-blob
Merge into: lp:mir
Diff against target: 141 lines (+80/-1)
4 files modified
include/client/mir_toolkit/mir_blob.h (+18/-0)
src/client/mir_blob.cpp (+32/-0)
src/client/symbols.map (+2/-0)
tests/acceptance-tests/test_mirblob.cpp (+28/-1)
To merge this branch: bzr merge lp:~brandontschaefer/mir/new-display-blob
Reviewer Review Type Date Requested Status
Mir CI Bot continuous-integration Approve
Alan Griffiths Approve
Review via email: mp+313410@code.launchpad.net

Commit message

Add new blob functions for the new display API.

Description of the change

Add new blob functions for the new display API.

Since it really is just an mir::protobuf::DisplayConfiguration

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

FAILED: Continuous integration, rev:3883
https://mir-jenkins.ubuntu.com/job/mir-ci/2413/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/3142/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/3209
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/3201
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/3201
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=yakkety/3201
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/3171
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/3171/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3171
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3171/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/3171
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/3171/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/3171
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3171/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/3171
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3171/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3171/console

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

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

FAILED: Continuous integration, rev:3883
https://mir-jenkins.ubuntu.com/job/mir-ci/2422/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/3153/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/3220
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/3212
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/3212
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=yakkety/3212
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/3182/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3182
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3182/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/3182
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/3182/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/3182
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3182/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/3182
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3182/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3182
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3182/artifact/output/*zip*/output.zip

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

review: Needs Fixing (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

OK, although the commit comment "Add new blob functions for the new display API" doesn't really reflect the complexity of name changes needed before the "new API" is available.

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

PASSED: Continuous integration, rev:3883
https://mir-jenkins.ubuntu.com/job/mir-ci/2446/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/3189
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/3256
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/3248
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/3248
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=yakkety/3248
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/3218
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/3218/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3218
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3218/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/3218
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/3218/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/3218
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3218/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/3218
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3218/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3218
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3218/artifact/output/*zip*/output.zip

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

review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'include/client/mir_toolkit/mir_blob.h'
2--- include/client/mir_toolkit/mir_blob.h 2015-09-03 09:08:29 +0000
3+++ include/client/mir_toolkit/mir_blob.h 2016-12-16 02:16:24 +0000
4@@ -37,6 +37,14 @@
5 MirBlob* mir_blob_from_display_configuration(MirDisplayConfiguration* configuration);
6
7 /**
8+ * Create a blob from a display config
9+ *
10+ * \param [in] config The display config
11+ * \return A blob
12+ */
13+MirBlob* mir_blob_from_display_config(MirDisplayConfig* config);
14+
15+/**
16 * Create a blob from a buffer.
17 * \note this does not copy the data, the buffer is assumed to be available
18 * until the blob is released.
19@@ -58,6 +66,16 @@
20 MirDisplayConfiguration* mir_blob_to_display_configuration(MirBlob* blob);
21
22 /**
23+ * Create a blob from a display config
24+ *
25+ * \warning will abort() if the blob doesn't represent a meaningful display config
26+ *
27+ * \param [in] blob The blob
28+ * \return A display config
29+ */
30+MirDisplayConfig* mir_blob_to_display_config(MirBlob* blob);
31+
32+/**
33 * Get the size of a blob
34 * \param [in] blob The blob
35 * \return the size
36
37=== modified file 'src/client/mir_blob.cpp'
38--- src/client/mir_blob.cpp 2015-09-16 16:30:28 +0000
39+++ src/client/mir_blob.cpp 2016-12-16 02:16:24 +0000
40@@ -16,6 +16,8 @@
41 * Authored by: Alan Griffiths <alan@octopull.co.uk>
42 */
43
44+#include "display_configuration.h"
45+
46 #include "mir_toolkit/mir_blob.h"
47 #include "mir_protobuf.pb.h"
48
49@@ -126,6 +128,21 @@
50 return nullptr;
51 }
52
53+MirBlob* mir_blob_from_display_config(MirDisplayConfig* configuration)
54+try
55+{
56+ auto blob = std::make_unique<MirManagedBlob>(static_cast<size_t>(configuration->ByteSize()));
57+
58+ configuration->SerializeWithCachedSizesToArray(blob->data());
59+
60+ return blob.release();
61+}
62+catch (std::exception const& x)
63+{
64+ MIR_LOG_UNCAUGHT_EXCEPTION(x);
65+ return nullptr;
66+}
67+
68 MirBlob* mir_blob_onto_buffer(void const* buffer, size_t buffer_size)
69 try
70 {
71@@ -213,6 +230,21 @@
72 abort();
73 }
74
75+MirDisplayConfig* mir_blob_to_display_config(MirBlob* blob)
76+try
77+{
78+ auto config = new mir::protobuf::DisplayConfiguration;
79+
80+ config->ParseFromArray(mir_blob_data(blob), mir_blob_size(blob));
81+
82+ return static_cast<MirDisplayConfig*>(config);
83+}
84+catch (std::exception const& x)
85+{
86+ MIR_LOG_UNCAUGHT_EXCEPTION(x);
87+ abort();
88+}
89+
90 size_t mir_blob_size(MirBlob* blob)
91 {
92 return blob->size();
93
94=== modified file 'src/client/symbols.map'
95--- src/client/symbols.map 2016-12-14 06:27:05 +0000
96+++ src/client/symbols.map 2016-12-16 02:16:24 +0000
97@@ -500,4 +500,6 @@
98 mir_touchpad_configuration_set_scroll_modes;
99 mir_touchpad_configuration_set_tap_to_click;
100 mir_output_get_model;
101+ mir_blob_from_display_config;
102+ mir_blob_to_display_config;
103 } MIR_CLIENT_0.25;
104
105=== modified file 'tests/acceptance-tests/test_mirblob.cpp'
106--- tests/acceptance-tests/test_mirblob.cpp 2015-09-03 11:54:34 +0000
107+++ tests/acceptance-tests/test_mirblob.cpp 2016-12-16 02:16:24 +0000
108@@ -55,4 +55,31 @@
109
110 mir_display_config_destroy(restore_display_config);
111 mir_display_config_destroy(save_display_config);
112-}
113\ No newline at end of file
114+}
115+
116+TEST_F(MirBlobAPI, can_serialize_display_config)
117+{
118+ std::vector<uint8_t> buffer;
119+
120+ auto const save_display_config = mir_connection_create_display_configuration(connection);
121+
122+ {
123+ auto const save_blob = mir_blob_from_display_config(save_display_config);
124+
125+ buffer.resize(mir_blob_size(save_blob));
126+ memcpy(buffer.data(), mir_blob_data(save_blob), buffer.size());
127+ mir_blob_release(save_blob);
128+ }
129+
130+ MirDisplayConfig* restore_display_config;
131+ {
132+ auto const restore_blob = mir_blob_onto_buffer(buffer.data(), buffer.size());
133+ restore_display_config = mir_blob_to_display_config(restore_blob);
134+ mir_blob_release(restore_blob);
135+ }
136+
137+ EXPECT_THAT(save_display_config, DisplayConfigMatches(restore_display_config));
138+
139+ mir_display_config_release(restore_display_config);
140+ mir_display_config_release(save_display_config);
141+}

Subscribers

People subscribed via source and target branches