Mir

Merge lp:~morphis/mir/support-for-dropped-fb-support into lp:mir/ubuntu

Proposed by Simon Fels
Status: Rejected
Rejected by: Kevin DuBois
Proposed branch: lp:~morphis/mir/support-for-dropped-fb-support
Merge into: lp:mir/ubuntu
Diff against target: 348 lines (+111/-61)
13 files modified
debian/changelog (+13/-0)
debian/rules (+5/-1)
src/platforms/android/server/android_alloc_adaptor.cpp (+11/-1)
src/platforms/android/server/gl_context.cpp (+1/-1)
src/platforms/android/server/platform.cpp (+5/-0)
src/platforms/android/server/server_render_window.cpp (+14/-1)
src/platforms/mesa/server/kms/platform_symbols.cpp (+19/-1)
src/renderers/gl/program_family.cpp (+0/-5)
src/renderers/gl/renderer.cpp (+4/-1)
tests/unit-tests/graphics/mesa/kms/test_platform.cpp (+20/-0)
tests/unit-tests/renderers/gl/CMakeLists.txt (+0/-1)
tests/unit-tests/renderers/gl/test_gl_program_family.cpp (+0/-49)
tests/unit-tests/renderers/gl/test_gl_renderer.cpp (+19/-0)
To merge this branch: bzr merge lp:~morphis/mir/support-for-dropped-fb-support
Reviewer Review Type Date Requested Status
Simon Fels Disapprove
Daniel van Vugt Needs Resubmitting
PS Jenkins bot (community) continuous-integration Needs Fixing
Review via email: mp+283442@code.launchpad.net
To post a comment you must log in.
3195. By Simon Fels

Merge with lp:mir/ubuntu

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:3195
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https://code.launchpad.net/~morphis/mir/support-for-dropped-fb-support/+merge/283442/+edit-commit-message

http://jenkins.qa.ubuntu.com/job/mir-ubuntu-ci/118/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5632
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4539
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5588
    FAILURE: http://jenkins.qa.ubuntu.com/job/mir-ubuntu-xenial-amd64-ci/6/console
        deb: http://jenkins.qa.ubuntu.com/job/mir-ubuntu-xenial-amd64-ci/6/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/mir-ubuntu-xenial-i386-ci/6/console
        deb: http://jenkins.qa.ubuntu.com/job/mir-ubuntu-xenial-i386-ci/6/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5585
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5585/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/8028
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26882

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/mir-ubuntu-ci/118/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Please rebase and re-propose for lp:mir instead.

review: Needs Resubmitting
Revision history for this message
Simon Fels (morphis) wrote :

This is just for the time being until mir 0.19 is released with those changes included. Simply ignore it. We only need it to get a silo with those changes.

review: Disapprove
Revision history for this message
Kevin DuBois (kdub) wrote :

mir 0.19 will contain this device quirk (silo 10). moving off mir's active review list.

Unmerged revisions

3195. By Simon Fels

Merge with lp:mir/ubuntu

3194. By Simon Fels

Merge lp:~thomas-voss/mir/test-support-for-dropped-fb-support

3193. By Daniel van Vugt

No change. Just waking Jenkins up.

3192. By Daniel van Vugt

Correct the package version string

3191. By Daniel van Vugt

Update the changelog

3190. By Cemil Azizoglu

Fix buffer leak causing server crashes after repeated screencasts.

The workaround for LP: #1454201 caused LP: #1523900. This fixes the former
properly, and hence avoids the latter.

3189. By Daniel van Vugt

Avoid choosing graphics-dummy (or no driver at all) over mesa-kms on a
desktop with DRM/Intel graphics. (LP: #1528082)

The right choice is obviously mesa-kms even if it fails to initialize
DRM/VT things. If however mesa-x11 or another driver can be used instead,
it will be.

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-01-15 11:45:05 +0000
3+++ debian/changelog 2016-01-21 13:45:56 +0000
4@@ -12,6 +12,19 @@
5
6 -- kevin gunn <kevin.gunn@canonical.com> Fri, 15 Jan 2016 11:45:05 +0000
7
8+mir (0.18.1-0ubuntu1) UNRELEASED; urgency=medium
9+
10+ * New upstream release 0.18.1 (https://launchpad.net/mir/+milestone/0.18.1)
11+ - No ABI changes. Bug fix release only.
12+ - Bugs fixed:
13+ . [regression] pinch to zoom not working reliably (LP: #1531517)
14+ . Buffer leak during repeated mirscreencasts causes server to be killed
15+ (LP: #1523900)
16+ . [regression] Mir servers choose graphics-dummy (or no driver at all)
17+ over mesa-kms on a desktop (LP: #1528082)
18+
19+ -- Andreas Pokorny <andreas.pokorny@canonical.com> Fri, 15 Jan 2016 12:18:35 +0100
20+
21 mir (0.18.0+16.04.20151216.1-0ubuntu1) xenial; urgency=medium
22
23 [ Kevin DuBois ]
24
25=== modified file 'debian/rules'
26--- debian/rules 2015-09-17 20:32:32 +0000
27+++ debian/rules 2016-01-21 13:45:56 +0000
28@@ -14,7 +14,7 @@
29 export MIR_SERVER_LOGGING = on
30 override_dh_auto_test:
31 ifeq ($(DEB_HOST_ARCH_ENDIAN),little)
32- GTEST_OUTPUT=xml:./ dh_auto_test --max-parallel=1 -- ARGS="-V"
33+ echo "Disabled running of test suite during package builds."
34 else
35 echo "Testsuite disabled on $(DEB_HOST_ARCH) due to lack of big-endian support."
36 endif
37@@ -28,6 +28,10 @@
38 $(COMMON_CONFIGURE_OPTIONS) \
39 -DMIR_RUN_ACCEPTANCE_TESTS=OFF \
40 -DMIR_RUN_INTEGRATION_TESTS=OFF \
41+ -D_FILE_OFFSET_BITS=64 \
42+ -D_GNU_SOURCE=1 \
43+ -D_LARGEFILE64_SOURCE=1 \
44+ -D_LARGEFILE_SOURCE=1 \
45 -DMIR_PLATFORM=android\;mesa-kms\;mesa-x11
46 else
47 ifneq ($(filter amd64 i386,$(DEB_HOST_ARCH)),)
48
49=== modified file 'src/platforms/android/server/android_alloc_adaptor.cpp'
50--- src/platforms/android/server/android_alloc_adaptor.cpp 2015-12-11 12:22:15 +0000
51+++ src/platforms/android/server/android_alloc_adaptor.cpp 2016-01-21 13:45:56 +0000
52@@ -33,6 +33,16 @@
53
54 namespace
55 {
56+int framebuffer_gles_gralloc_flags()
57+{
58+ static const int flags =
59+ ::getenv("MIR_PLATFORM_GRAPHICS_ANDROID_FB_SUPPORT") == nullptr ?
60+ GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_TEXTURE :
61+ GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_FB;
62+
63+ return flags;
64+}
65+
66 struct AndroidBufferHandleDeleter
67 {
68 AndroidBufferHandleDeleter(std::shared_ptr<alloc_device_t> const& alloc_dev)
69@@ -104,7 +114,7 @@
70 case mga::BufferUsage::use_hardware:
71 return (GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_RENDER);
72 case mga::BufferUsage::use_framebuffer_gles:
73- return (GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_FB);
74+ return framebuffer_gles_gralloc_flags();
75 case mga::BufferUsage::use_software:
76 return (GRALLOC_USAGE_SW_WRITE_OFTEN | GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_TEXTURE);
77 default:
78
79=== modified file 'src/platforms/android/server/gl_context.cpp'
80--- src/platforms/android/server/gl_context.cpp 2015-07-21 04:30:03 +0000
81+++ src/platforms/android/server/gl_context.cpp 2016-01-21 13:45:56 +0000
82@@ -71,7 +71,7 @@
83 {
84 EGLint const required_egl_config_attr [] =
85 {
86- EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
87+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT,
88 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
89 EGL_DEPTH_SIZE, gl_config.depth_buffer_bits(),
90 EGL_STENCIL_SIZE, gl_config.stencil_buffer_bits(),
91
92=== modified file 'src/platforms/android/server/platform.cpp'
93--- src/platforms/android/server/platform.cpp 2015-12-11 12:22:15 +0000
94+++ src/platforms/android/server/platform.cpp 2016-01-21 13:45:56 +0000
95@@ -153,6 +153,11 @@
96 auto overlay_option = should_use_overlay_optimization(*options);
97 hwc_report->report_overlay_optimization(overlay_option);
98 auto display_resource_factory = std::make_shared<mga::ResourceFactory>();
99+
100+ //try loading the fb module
101+ static auto fb_module = display_resource_factory->create_fb_native_device();
102+ printf("loaded fb_module: %p\n", static_cast<void*>(fb_module.get()));
103+
104 auto buffer_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
105 auto component_factory = std::make_shared<mga::HalComponentFactory>(
106 buffer_allocator, display_resource_factory, hwc_report, quirks);
107
108=== modified file 'src/platforms/android/server/server_render_window.cpp'
109--- src/platforms/android/server/server_render_window.cpp 2015-11-24 14:18:33 +0000
110+++ src/platforms/android/server/server_render_window.cpp 2016-01-21 13:45:56 +0000
111@@ -34,6 +34,19 @@
112 namespace mga=mir::graphics::android;
113 namespace geom=mir::geometry;
114
115+namespace
116+{
117+int framebuffer_gles_gralloc_flags()
118+{
119+ static const int flags =
120+ ::getenv("MIR_PLATFORM_GRAPHICS_ANDROID_FB_SUPPORT") == nullptr ?
121+ GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_TEXTURE :
122+ GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_FB;
123+
124+ return flags;
125+}
126+}
127+
128 mga::ServerRenderWindow::ServerRenderWindow(
129 std::shared_ptr<mga::FramebufferBundle> const& fb_bundle,
130 MirPixelFormat format,
131@@ -93,7 +106,7 @@
132 case NATIVE_WINDOW_CONCRETE_TYPE:
133 return NATIVE_WINDOW_FRAMEBUFFER;
134 case NATIVE_WINDOW_CONSUMER_USAGE_BITS:
135- return GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_FB;
136+ return framebuffer_gles_gralloc_flags();
137 default:
138 {
139 std::stringstream sstream;
140
141=== modified file 'src/platforms/mesa/server/kms/platform_symbols.cpp'
142--- src/platforms/mesa/server/kms/platform_symbols.cpp 2015-12-16 13:05:17 +0000
143+++ src/platforms/mesa/server/kms/platform_symbols.cpp 2016-01-21 13:45:56 +0000
144@@ -190,7 +190,25 @@
145 if (platform_option_used)
146 return mg::PlatformPriority::best;
147
148- return mg::PlatformPriority::unsupported;
149+ /* We failed to set mastership. However, still on most systems mesa-kms
150+ * is the right driver to choose. Landing here just means the user did
151+ * not specify --vt or is running from ssh. Still in most cases mesa-kms
152+ * is the correct option so give it a go. Better to fail trying to switch
153+ * VTs (and tell the user that) than to refuse to load the correct
154+ * driver at all. (LP: #1528082)
155+ *
156+ * Just make sure we are below PlatformPriority::supported in case
157+ * mesa-x11 or android can be used instead.
158+ *
159+ * TODO: Revisit the priority terminology. having a range of values between
160+ * "supported" and "unsupported" is potentially confusing.
161+ * TODO: Revisit the return code of this function. We document that
162+ * integer values outside the enum are allowed but C++ disallows it
163+ * without a cast. So we should return an int or typedef to int
164+ * instead.
165+ */
166+ return static_cast<mg::PlatformPriority>(
167+ mg::PlatformPriority::supported - 1);
168 }
169
170 mir::ModuleProperties const description = {
171
172=== modified file 'src/renderers/gl/program_family.cpp'
173--- src/renderers/gl/program_family.cpp 2015-09-11 12:29:40 +0000
174+++ src/renderers/gl/program_family.cpp 2016-01-21 13:45:56 +0000
175@@ -19,7 +19,6 @@
176 #include "program_family.h"
177
178 #include <mutex>
179-#include <EGL/egl.h>
180
181 namespace mir
182 {
183@@ -59,10 +58,6 @@
184 // need any reference counting or to worry about how many copy constructions
185 // might have been followed by destructor calls during container resizes.
186
187- // Workaround for lp:1454201. Release any current GL context to avoid crashes
188- // in the glDelete* functions that follow.
189- eglMakeCurrent(eglGetCurrentDisplay(), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
190-
191 for (auto& p : program)
192 {
193 if (p.second.id)
194
195=== modified file 'src/renderers/gl/renderer.cpp'
196--- src/renderers/gl/renderer.cpp 2015-10-26 13:23:05 +0000
197+++ src/renderers/gl/renderer.cpp 2016-01-21 13:45:56 +0000
198@@ -180,7 +180,10 @@
199 set_rotation(0.0f);
200 }
201
202-mrg::Renderer::~Renderer() = default;
203+mrg::Renderer::~Renderer()
204+{
205+ render_target.ensure_current();
206+}
207
208 void mrg::Renderer::tessellate(std::vector<mgl::Primitive>& primitives,
209 mg::Renderable const& renderable) const
210
211=== modified file 'tests/unit-tests/graphics/mesa/kms/test_platform.cpp'
212--- tests/unit-tests/graphics/mesa/kms/test_platform.cpp 2015-12-16 13:01:56 +0000
213+++ tests/unit-tests/graphics/mesa/kms/test_platform.cpp 2016-01-21 13:45:56 +0000
214@@ -332,6 +332,26 @@
215 EXPECT_EQ(mg::PlatformPriority::best, probe(options));
216 }
217
218+TEST_F(MesaGraphicsPlatform, probe_returns_in_between_when_cant_set_master)
219+{ // Regression test for LP: #1528082
220+ using namespace testing;
221+
222+ mtf::UdevEnvironment udev_environment;
223+ boost::program_options::options_description po;
224+ mir::options::ProgramOption options;
225+
226+ udev_environment.add_standard_device("standard-drm-devices");
227+
228+ EXPECT_CALL(mock_drm, drmSetMaster(_))
229+ .WillOnce(Return(-1));
230+
231+ mir::SharedLibrary platform_lib{mtf::server_platform("graphics-mesa-kms")};
232+ auto probe = platform_lib.load_function<mg::PlatformProbe>(probe_platform);
233+ auto prio = probe(options);
234+ EXPECT_THAT(prio, Gt(mg::PlatformPriority::unsupported));
235+ EXPECT_THAT(prio, Lt(mg::PlatformPriority::supported));
236+}
237+
238 TEST_F(MesaGraphicsPlatform, probe_returns_best_when_drm_devices_vt_option_exist)
239 {
240 mtf::UdevEnvironment udev_environment;
241
242=== modified file 'tests/unit-tests/renderers/gl/CMakeLists.txt'
243--- tests/unit-tests/renderers/gl/CMakeLists.txt 2015-09-07 11:54:56 +0000
244+++ tests/unit-tests/renderers/gl/CMakeLists.txt 2016-01-21 13:45:56 +0000
245@@ -1,5 +1,4 @@
246 list(APPEND UNIT_TEST_SOURCES
247- ${CMAKE_CURRENT_SOURCE_DIR}/test_gl_program_family.cpp
248 ${CMAKE_CURRENT_SOURCE_DIR}/test_gl_renderer.cpp
249 )
250
251
252=== removed file 'tests/unit-tests/renderers/gl/test_gl_program_family.cpp'
253--- tests/unit-tests/renderers/gl/test_gl_program_family.cpp 2015-09-11 12:29:40 +0000
254+++ tests/unit-tests/renderers/gl/test_gl_program_family.cpp 1970-01-01 00:00:00 +0000
255@@ -1,49 +0,0 @@
256-/*
257- * Copyright © 2015 Canonical Ltd.
258- *
259- * This program is free software: you can redistribute it and/or modify
260- * it under the terms of the GNU General Public License version 3 as
261- * published by the Free Software Foundation.
262- *
263- * This program is distributed in the hope that it will be useful,
264- * but WITHOUT ANY WARRANTY; without even the implied warranty of
265- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
266- * GNU General Public License for more details.
267- *
268- * You should have received a copy of the GNU General Public License
269- * along with this program. If not, see <http://www.gnu.org/licenses/>.
270- *
271- * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
272- */
273-
274-#include "src/renderers/gl/program_family.h"
275-#include "mir/test/doubles/mock_gl.h"
276-#include "mir/test/doubles/mock_egl.h"
277-
278-#include <gtest/gtest.h>
279-#include <gmock/gmock.h>
280-
281-namespace mtd = mir::test::doubles;
282-namespace mrg = mir::renderer::gl;
283-
284-// Regression test for LP: #1454201
285-TEST(GLProgramFamily, releases_gl_context_before_deleting_shader_objects)
286-{
287- using namespace testing;
288-
289- NiceMock<mtd::MockGL> mock_gl;
290- NiceMock<mtd::MockEGL> mock_egl;
291-
292- ON_CALL(mock_gl, glCreateShader(_)).WillByDefault(Return(1));
293- ON_CALL(mock_gl, glCreateProgram()).WillByDefault(Return(1));
294-
295- {
296- mrg::ProgramFamily family;
297- family.add_program("vertex shader", "fragment shader");
298-
299- InSequence seq;
300- EXPECT_CALL(mock_egl, eglMakeCurrent(_,EGL_NO_SURFACE,EGL_NO_SURFACE,EGL_NO_CONTEXT));
301- EXPECT_CALL(mock_gl, glDeleteProgram(_)).Times(1);
302- EXPECT_CALL(mock_gl, glDeleteShader(_)).Times(2);
303- }
304-}
305
306=== modified file 'tests/unit-tests/renderers/gl/test_gl_renderer.cpp'
307--- tests/unit-tests/renderers/gl/test_gl_renderer.cpp 2015-10-26 12:25:02 +0000
308+++ tests/unit-tests/renderers/gl/test_gl_renderer.cpp 2016-01-21 13:45:56 +0000
309@@ -265,6 +265,8 @@
310 EXPECT_CALL(mock_display_buffer, make_current());
311
312 mrg::Renderer renderer(mock_display_buffer);
313+
314+ testing::Mock::VerifyAndClearExpectations(&mock_display_buffer);
315 }
316
317 TEST_F(GLRenderer, releases_display_buffer_current_when_destroyed)
318@@ -274,6 +276,21 @@
319 EXPECT_CALL(mock_display_buffer, release_current());
320 }
321
322+TEST_F(GLRenderer, makes_display_buffer_current_before_deleting_programs)
323+{
324+ mrg::Renderer renderer(mock_display_buffer);
325+
326+ InSequence seq;
327+ EXPECT_CALL(mock_display_buffer, make_current());
328+ EXPECT_CALL(mock_display_buffer, swap_buffers());
329+ EXPECT_CALL(mock_display_buffer, make_current());
330+ EXPECT_CALL(mock_gl, glDeleteProgram(_)).Times(AtLeast(1));
331+ EXPECT_CALL(mock_gl, glDeleteShader(_)).Times(AtLeast(1));
332+ EXPECT_CALL(mock_display_buffer, release_current());
333+
334+ renderer.render(renderable_list);
335+}
336+
337 TEST_F(GLRenderer, makes_display_buffer_current_before_rendering)
338 {
339 mrg::Renderer renderer(mock_display_buffer);
340@@ -283,6 +300,8 @@
341 EXPECT_CALL(mock_gl, glClear(_));
342
343 renderer.render(renderable_list);
344+
345+ testing::Mock::VerifyAndClearExpectations(&mock_display_buffer);
346 }
347
348 TEST_F(GLRenderer, swaps_buffers_after_rendering)

Subscribers

People subscribed via source and target branches