Merge lp:~raof/mir/remove-never-used-code into lp:mir
- remove-never-used-code
- Merge into development-branch
Status: | Merged |
---|---|
Approved by: | Alan Griffiths |
Approved revision: | no longer in the source branch. |
Merged at revision: | 4175 |
Proposed branch: | lp:~raof/mir/remove-never-used-code |
Merge into: | lp:mir |
Prerequisite: | lp:~raof/mir/the-compiler-warning-treadmill |
Diff against target: |
219 lines (+11/-45) 7 files modified
src/server/compositor/buffer_acquisition.h (+0/-7) src/server/compositor/multi_monitor_arbiter.cpp (+2/-11) src/server/compositor/multi_monitor_arbiter.h (+0/-3) src/server/compositor/stream.cpp (+1/-2) tests/integration-tests/test_buffer_scheduling.cpp (+0/-2) tests/unit-tests/compositor/test_multi_monitor_arbiter.cpp (+8/-19) tests/unit-tests/compositor/test_temporary_buffers.cpp (+0/-1) |
To merge this branch: | bzr merge lp:~raof/mir/remove-never-used-code |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Mir CI Bot | continuous-integration | Approve | |
Alan Griffiths | Approve | ||
Review via email: mp+324594@code.launchpad.net |
Commit message
mc::BufferAcqui
We've got code for both versions, but single_monitor_fast has never been used, and is
not exposed to external users.
Description of the change
Mir CI Bot (mir-ci-bot) wrote : | # |
Mir CI Bot (mir-ci-bot) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
https:/
Executed test runs:
FAILURE: https:/
None: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Mir CI Bot (mir-ci-bot) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
https:/
Executed test runs:
FAILURE: https:/
None: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
Mir CI Bot (mir-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:4181
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
Mir CI Bot (mir-ci-bot) : | # |
Preview Diff
1 | === modified file 'src/server/compositor/buffer_acquisition.h' | |||
2 | --- src/server/compositor/buffer_acquisition.h 2017-05-08 03:04:26 +0000 | |||
3 | +++ src/server/compositor/buffer_acquisition.h 2017-05-25 05:52:50 +0000 | |||
4 | @@ -30,12 +30,6 @@ | |||
5 | 30 | namespace compositor | 30 | namespace compositor |
6 | 31 | { | 31 | { |
7 | 32 | 32 | ||
8 | 33 | enum class MultiMonitorMode | ||
9 | 34 | { | ||
10 | 35 | multi_monitor_sync, // lower latency+framerate, and supports multi-monitor | ||
11 | 36 | single_monitor_fast // higher latency+framerate, no multi-monitor | ||
12 | 37 | }; | ||
13 | 38 | |||
14 | 39 | class BufferAcquisition | 33 | class BufferAcquisition |
15 | 40 | { | 34 | { |
16 | 41 | public: | 35 | public: |
17 | @@ -55,7 +49,6 @@ | |||
18 | 55 | virtual void compositor_release(std::shared_ptr<graphics::Buffer> const&) = 0; | 49 | virtual void compositor_release(std::shared_ptr<graphics::Buffer> const&) = 0; |
19 | 56 | virtual std::shared_ptr<graphics::Buffer> snapshot_acquire() = 0; | 50 | virtual std::shared_ptr<graphics::Buffer> snapshot_acquire() = 0; |
20 | 57 | virtual void snapshot_release(std::shared_ptr<graphics::Buffer> const&) = 0; | 51 | virtual void snapshot_release(std::shared_ptr<graphics::Buffer> const&) = 0; |
21 | 58 | virtual void set_mode(MultiMonitorMode mode) = 0; | ||
22 | 59 | virtual ~BufferAcquisition() = default; | 52 | virtual ~BufferAcquisition() = default; |
23 | 60 | 53 | ||
24 | 61 | protected: | 54 | protected: |
25 | 62 | 55 | ||
26 | === modified file 'src/server/compositor/multi_monitor_arbiter.cpp' | |||
27 | --- src/server/compositor/multi_monitor_arbiter.cpp 2017-05-08 03:04:26 +0000 | |||
28 | +++ src/server/compositor/multi_monitor_arbiter.cpp 2017-05-25 05:52:50 +0000 | |||
29 | @@ -30,10 +30,8 @@ | |||
30 | 30 | namespace mf = mir::frontend; | 30 | namespace mf = mir::frontend; |
31 | 31 | 31 | ||
32 | 32 | mc::MultiMonitorArbiter::MultiMonitorArbiter( | 32 | mc::MultiMonitorArbiter::MultiMonitorArbiter( |
33 | 33 | MultiMonitorMode mode, | ||
34 | 34 | std::shared_ptr<frontend::ClientBuffers> const& map, | 33 | std::shared_ptr<frontend::ClientBuffers> const& map, |
35 | 35 | std::shared_ptr<Schedule> const& schedule) : | 34 | std::shared_ptr<Schedule> const& schedule) : |
36 | 36 | mode(mode), | ||
37 | 37 | map(map), | 35 | map(map), |
38 | 38 | schedule(schedule) | 36 | schedule(schedule) |
39 | 39 | { | 37 | { |
40 | @@ -68,8 +66,7 @@ | |||
41 | 68 | auto& last_entry = onscreen_buffers.front(); | 66 | auto& last_entry = onscreen_buffers.front(); |
42 | 69 | last_entry.use_count++; | 67 | last_entry.use_count++; |
43 | 70 | auto last_entry_buffer = last_entry.buffer; | 68 | auto last_entry_buffer = last_entry.buffer; |
46 | 71 | if (mode == mc::MultiMonitorMode::multi_monitor_sync) | 69 | clean_onscreen_buffers(lk); |
45 | 72 | clean_onscreen_buffers(lk); | ||
47 | 73 | return last_entry_buffer; | 70 | return last_entry_buffer; |
48 | 74 | } | 71 | } |
49 | 75 | 72 | ||
50 | @@ -79,7 +76,7 @@ | |||
51 | 79 | 76 | ||
52 | 80 | decrease_refcount_for(buffer->id(), lk); | 77 | decrease_refcount_for(buffer->id(), lk); |
53 | 81 | 78 | ||
55 | 82 | if ((mode == mc::MultiMonitorMode::single_monitor_fast) || (onscreen_buffers.begin()->buffer != buffer)) | 79 | if (onscreen_buffers.begin()->buffer != buffer) |
56 | 83 | clean_onscreen_buffers(lk); | 80 | clean_onscreen_buffers(lk); |
57 | 84 | } | 81 | } |
58 | 85 | 82 | ||
59 | @@ -140,12 +137,6 @@ | |||
60 | 140 | schedule = new_schedule; | 137 | schedule = new_schedule; |
61 | 141 | } | 138 | } |
62 | 142 | 139 | ||
63 | 143 | void mc::MultiMonitorArbiter::set_mode(MultiMonitorMode new_mode) | ||
64 | 144 | { | ||
65 | 145 | std::lock_guard<decltype(mutex)> lk(mutex); | ||
66 | 146 | mode = new_mode; | ||
67 | 147 | } | ||
68 | 148 | |||
69 | 149 | bool mc::MultiMonitorArbiter::buffer_ready_for(mc::CompositorID id) | 140 | bool mc::MultiMonitorArbiter::buffer_ready_for(mc::CompositorID id) |
70 | 150 | { | 141 | { |
71 | 151 | std::lock_guard<decltype(mutex)> lk(mutex); | 142 | std::lock_guard<decltype(mutex)> lk(mutex); |
72 | 152 | 143 | ||
73 | === modified file 'src/server/compositor/multi_monitor_arbiter.h' | |||
74 | --- src/server/compositor/multi_monitor_arbiter.h 2017-05-08 03:04:26 +0000 | |||
75 | +++ src/server/compositor/multi_monitor_arbiter.h 2017-05-25 05:52:50 +0000 | |||
76 | @@ -38,7 +38,6 @@ | |||
77 | 38 | { | 38 | { |
78 | 39 | public: | 39 | public: |
79 | 40 | MultiMonitorArbiter( | 40 | MultiMonitorArbiter( |
80 | 41 | MultiMonitorMode mode, | ||
81 | 42 | std::shared_ptr<frontend::ClientBuffers> const& map, | 41 | std::shared_ptr<frontend::ClientBuffers> const& map, |
82 | 43 | std::shared_ptr<Schedule> const& schedule); | 42 | std::shared_ptr<Schedule> const& schedule); |
83 | 44 | ~MultiMonitorArbiter(); | 43 | ~MultiMonitorArbiter(); |
84 | @@ -48,7 +47,6 @@ | |||
85 | 48 | std::shared_ptr<graphics::Buffer> snapshot_acquire() override; | 47 | std::shared_ptr<graphics::Buffer> snapshot_acquire() override; |
86 | 49 | void snapshot_release(std::shared_ptr<graphics::Buffer> const&) override; | 48 | void snapshot_release(std::shared_ptr<graphics::Buffer> const&) override; |
87 | 50 | void set_schedule(std::shared_ptr<Schedule> const& schedule); | 49 | void set_schedule(std::shared_ptr<Schedule> const& schedule); |
88 | 51 | void set_mode(MultiMonitorMode mode) override; | ||
89 | 52 | bool buffer_ready_for(compositor::CompositorID id); | 50 | bool buffer_ready_for(compositor::CompositorID id); |
90 | 53 | bool has_buffer(); | 51 | bool has_buffer(); |
91 | 54 | void advance_schedule(); | 52 | void advance_schedule(); |
92 | @@ -58,7 +56,6 @@ | |||
93 | 58 | void clean_onscreen_buffers(std::lock_guard<std::mutex> const&); | 56 | void clean_onscreen_buffers(std::lock_guard<std::mutex> const&); |
94 | 59 | 57 | ||
95 | 60 | std::mutex mutable mutex; | 58 | std::mutex mutable mutex; |
96 | 61 | MultiMonitorMode mode; | ||
97 | 62 | std::shared_ptr<frontend::ClientBuffers> const map; | 59 | std::shared_ptr<frontend::ClientBuffers> const map; |
98 | 63 | struct ScheduleEntry | 60 | struct ScheduleEntry |
99 | 64 | { | 61 | { |
100 | 65 | 62 | ||
101 | === modified file 'src/server/compositor/stream.cpp' | |||
102 | --- src/server/compositor/stream.cpp 2017-05-22 16:48:15 +0000 | |||
103 | +++ src/server/compositor/stream.cpp 2017-05-25 05:52:50 +0000 | |||
104 | @@ -41,8 +41,7 @@ | |||
105 | 41 | schedule_mode(ScheduleMode::Queueing), | 41 | schedule_mode(ScheduleMode::Queueing), |
106 | 42 | schedule(std::make_shared<mc::QueueingSchedule>()), | 42 | schedule(std::make_shared<mc::QueueingSchedule>()), |
107 | 43 | buffers(map), | 43 | buffers(map), |
110 | 44 | arbiter(std::make_shared<mc::MultiMonitorArbiter>( | 44 | arbiter(std::make_shared<mc::MultiMonitorArbiter>(buffers, schedule)), |
109 | 45 | mc::MultiMonitorMode::multi_monitor_sync, buffers, schedule)), | ||
111 | 46 | size(size), | 45 | size(size), |
112 | 47 | pf(pf), | 46 | pf(pf), |
113 | 48 | first_frame_posted(false) | 47 | first_frame_posted(false) |
114 | 49 | 48 | ||
115 | === modified file 'tests/integration-tests/test_buffer_scheduling.cpp' | |||
116 | --- tests/integration-tests/test_buffer_scheduling.cpp 2017-05-08 03:04:26 +0000 | |||
117 | +++ tests/integration-tests/test_buffer_scheduling.cpp 2017-05-25 05:52:50 +0000 | |||
118 | @@ -822,8 +822,6 @@ | |||
119 | 822 | ASSERT_FALSE(producer->can_produce()); | 822 | ASSERT_FALSE(producer->can_produce()); |
120 | 823 | 823 | ||
121 | 824 | onscreen.reset(); | 824 | onscreen.reset(); |
122 | 825 | // single_monitor_fast -> can produce here | ||
123 | 826 | // multi_monitor_sync -> can't produce here | ||
124 | 827 | ASSERT_FALSE(producer->can_produce()); | 825 | ASSERT_FALSE(producer->can_produce()); |
125 | 828 | } | 826 | } |
126 | 829 | 827 | ||
127 | 830 | 828 | ||
128 | === modified file 'tests/unit-tests/compositor/test_multi_monitor_arbiter.cpp' | |||
129 | --- tests/unit-tests/compositor/test_multi_monitor_arbiter.cpp 2017-05-08 03:04:26 +0000 | |||
130 | +++ tests/unit-tests/compositor/test_multi_monitor_arbiter.cpp 2017-05-25 05:52:50 +0000 | |||
131 | @@ -75,9 +75,9 @@ | |||
132 | 75 | std::vector<std::shared_ptr<mg::Buffer>> sched; | 75 | std::vector<std::shared_ptr<mg::Buffer>> sched; |
133 | 76 | }; | 76 | }; |
134 | 77 | 77 | ||
136 | 78 | struct MultiMonitorArbiterBase : Test | 78 | struct MultiMonitorArbiter : Test |
137 | 79 | { | 79 | { |
139 | 80 | MultiMonitorArbiterBase() | 80 | MultiMonitorArbiter() |
140 | 81 | { | 81 | { |
141 | 82 | for(auto i = 0u; i < num_buffers; i++) | 82 | for(auto i = 0u; i < num_buffers; i++) |
142 | 83 | buffers.emplace_back(std::make_shared<mtd::StubBuffer>()); | 83 | buffers.emplace_back(std::make_shared<mtd::StubBuffer>()); |
143 | @@ -86,18 +86,7 @@ | |||
144 | 86 | std::vector<std::shared_ptr<mg::Buffer>> buffers; | 86 | std::vector<std::shared_ptr<mg::Buffer>> buffers; |
145 | 87 | NiceMock<MockBufferMap> mock_map; | 87 | NiceMock<MockBufferMap> mock_map; |
146 | 88 | FixedSchedule schedule; | 88 | FixedSchedule schedule; |
159 | 89 | }; | 89 | mc::MultiMonitorArbiter arbiter{mt::fake_shared(mock_map), mt::fake_shared(schedule)}; |
148 | 90 | |||
149 | 91 | struct MultiMonitorArbiter : MultiMonitorArbiterBase | ||
150 | 92 | { | ||
151 | 93 | mc::MultiMonitorMode guarantee{mc::MultiMonitorMode::multi_monitor_sync}; | ||
152 | 94 | mc::MultiMonitorArbiter arbiter{guarantee, mt::fake_shared(mock_map), mt::fake_shared(schedule)}; | ||
153 | 95 | }; | ||
154 | 96 | |||
155 | 97 | struct MultiMonitorArbiterWithAnyFrameGuarantee : MultiMonitorArbiterBase | ||
156 | 98 | { | ||
157 | 99 | mc::MultiMonitorMode guarantee{mc::MultiMonitorMode::single_monitor_fast}; | ||
158 | 100 | mc::MultiMonitorArbiter arbiter{guarantee, mt::fake_shared(mock_map), mt::fake_shared(schedule)}; | ||
160 | 101 | }; | 90 | }; |
161 | 102 | } | 91 | } |
162 | 103 | 92 | ||
163 | @@ -121,7 +110,7 @@ | |||
164 | 121 | EXPECT_THAT(cbuffer, Eq(buffers[0])); | 110 | EXPECT_THAT(cbuffer, Eq(buffers[0])); |
165 | 122 | } | 111 | } |
166 | 123 | 112 | ||
168 | 124 | TEST_F(MultiMonitorArbiterWithAnyFrameGuarantee, compositor_release_sends_buffer_back_with_any_monitor_guarantee) | 113 | TEST_F(MultiMonitorArbiter, compositor_release_sends_buffer_back) |
169 | 125 | { | 114 | { |
170 | 126 | EXPECT_CALL(mock_map, send_buffer(buffers[0]->id())); | 115 | EXPECT_CALL(mock_map, send_buffer(buffers[0]->id())); |
171 | 127 | 116 | ||
172 | @@ -132,7 +121,7 @@ | |||
173 | 132 | arbiter.compositor_release(cbuffer); | 121 | arbiter.compositor_release(cbuffer); |
174 | 133 | } | 122 | } |
175 | 134 | 123 | ||
177 | 135 | TEST_F(MultiMonitorArbiterWithAnyFrameGuarantee, compositor_can_acquire_different_buffers) | 124 | TEST_F(MultiMonitorArbiter, compositor_can_acquire_different_buffers) |
178 | 136 | { | 125 | { |
179 | 137 | EXPECT_CALL(mock_map, send_buffer(buffers[0]->id())); | 126 | EXPECT_CALL(mock_map, send_buffer(buffers[0]->id())); |
180 | 138 | 127 | ||
181 | @@ -146,7 +135,7 @@ | |||
182 | 146 | Mock::VerifyAndClearExpectations(&mock_map); | 135 | Mock::VerifyAndClearExpectations(&mock_map); |
183 | 147 | } | 136 | } |
184 | 148 | 137 | ||
186 | 149 | TEST_F(MultiMonitorArbiterWithAnyFrameGuarantee, compositor_buffer_syncs_to_fastest_compositor) | 138 | TEST_F(MultiMonitorArbiter, compositor_buffer_syncs_to_fastest_compositor) |
187 | 150 | { | 139 | { |
188 | 151 | int comp_id1{0}; | 140 | int comp_id1{0}; |
189 | 152 | int comp_id2{0}; | 141 | int comp_id2{0}; |
190 | @@ -333,7 +322,7 @@ | |||
191 | 333 | arbiter.snapshot_release(sbuffer1); | 322 | arbiter.snapshot_release(sbuffer1); |
192 | 334 | } | 323 | } |
193 | 335 | 324 | ||
195 | 336 | TEST_F(MultiMonitorArbiterWithAnyFrameGuarantee, compositor_can_acquire_a_few_times_and_only_sends_on_the_last_release) | 325 | TEST_F(MultiMonitorArbiter, compositor_can_acquire_a_few_times_and_only_sends_on_the_last_release) |
196 | 337 | { | 326 | { |
197 | 338 | int comp_id1{0}; | 327 | int comp_id1{0}; |
198 | 339 | int comp_id2{0}; | 328 | int comp_id2{0}; |
199 | @@ -558,7 +547,7 @@ | |||
200 | 558 | 547 | ||
201 | 559 | TEST_F(MultiMonitorArbiter, releases_buffer_on_destruction) | 548 | TEST_F(MultiMonitorArbiter, releases_buffer_on_destruction) |
202 | 560 | { | 549 | { |
204 | 561 | mc::MultiMonitorArbiter arbiter{guarantee, mt::fake_shared(mock_map), mt::fake_shared(schedule)}; | 550 | mc::MultiMonitorArbiter arbiter{mt::fake_shared(mock_map), mt::fake_shared(schedule)}; |
205 | 562 | EXPECT_CALL(mock_map, send_buffer(buffers[0]->id())); | 551 | EXPECT_CALL(mock_map, send_buffer(buffers[0]->id())); |
206 | 563 | schedule.set_schedule({buffers[0]}); | 552 | schedule.set_schedule({buffers[0]}); |
207 | 564 | arbiter.advance_schedule(); | 553 | arbiter.advance_schedule(); |
208 | 565 | 554 | ||
209 | === modified file 'tests/unit-tests/compositor/test_temporary_buffers.cpp' | |||
210 | --- tests/unit-tests/compositor/test_temporary_buffers.cpp 2017-05-08 03:04:26 +0000 | |||
211 | +++ tests/unit-tests/compositor/test_temporary_buffers.cpp 2017-05-25 05:52:50 +0000 | |||
212 | @@ -45,7 +45,6 @@ | |||
213 | 45 | MOCK_METHOD1(compositor_release, void(std::shared_ptr<mg::Buffer> const&)); | 45 | MOCK_METHOD1(compositor_release, void(std::shared_ptr<mg::Buffer> const&)); |
214 | 46 | MOCK_METHOD0(snapshot_acquire, std::shared_ptr<mg::Buffer>()); | 46 | MOCK_METHOD0(snapshot_acquire, std::shared_ptr<mg::Buffer>()); |
215 | 47 | MOCK_METHOD1(snapshot_release, void(std::shared_ptr<mg::Buffer> const&)); | 47 | MOCK_METHOD1(snapshot_release, void(std::shared_ptr<mg::Buffer> const&)); |
216 | 48 | MOCK_METHOD1(set_mode, void(mc::MultiMonitorMode)); | ||
217 | 49 | }; | 48 | }; |
218 | 50 | 49 | ||
219 | 51 | class TemporaryBuffersTest : public ::testing::Test | 50 | class TemporaryBuffersTest : public ::testing::Test |
PASSED: Continuous integration, rev:4181 /mir-jenkins. ubuntu. com/job/ mir-ci/ 3410/ /mir-jenkins. ubuntu. com/job/ build-mir/ 4638 /mir-jenkins. ubuntu. com/job/ build-0- fetch/4770 /mir-jenkins. ubuntu. com/job/ build-1- sourcepkg/ release= xenial+ overlay/ 4759 /mir-jenkins. ubuntu. com/job/ build-1- sourcepkg/ release= zesty/4759 /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= amd64,compiler= clang,platform= mesa,release= zesty/4670 /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= amd64,compiler= clang,platform= mesa,release= zesty/4670/ artifact/ output/ *zip*/output. zip /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= amd64,compiler= gcc,platform= mesa,release= xenial+ overlay/ 4670 /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= amd64,compiler= gcc,platform= mesa,release= xenial+ overlay/ 4670/artifact/ output/ *zip*/output. zip /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= amd64,compiler= gcc,platform= mesa,release= zesty/4670 /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= amd64,compiler= gcc,platform= mesa,release= zesty/4670/ artifact/ output/ *zip*/output. zip /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= cross-armhf, compiler= gcc,platform= mesa,release= zesty/4670 /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= cross-armhf, compiler= gcc,platform= mesa,release= zesty/4670/ artifact/ output/ *zip*/output. zip /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= i386,compiler= gcc,platform= mesa,release= xenial+ overlay/ 4670 /mir-jenkins. ubuntu. com/job/ build-2- binpkg- mir/arch= i386,compiler= gcc,platform= mesa,release= xenial+ overlay/ 4670/artifact/ output/ *zip*/output. zip
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild: /mir-jenkins. ubuntu. com/job/ mir-ci/ 3410/rebuild
https:/