Mir

Merge lp:~vanvugt/mir/fix-1638220 into lp:mir

Proposed by Daniel van Vugt
Status: Merged
Approved by: Daniel van Vugt
Approved revision: no longer in the source branch.
Merged at revision: 3798
Proposed branch: lp:~vanvugt/mir/fix-1638220
Merge into: lp:mir
Diff against target: 60 lines (+33/-6)
2 files modified
src/platforms/mesa/server/kms/real_kms_output.cpp (+8/-6)
tests/unit-tests/platforms/mesa/kms/test_real_kms_output.cpp (+25/-0)
To merge this branch: bzr merge lp:~vanvugt/mir/fix-1638220
Reviewer Review Type Date Requested Status
Alan Griffiths Approve
Cemil Azizoglu (community) Approve
Mir CI Bot continuous-integration Approve
Review via email: mp+309734@code.launchpad.net

Commit message

Avoid crashing on systems that don't have hardware gamma ramps,
like VirtualBox (LP: #1638220)

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

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

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

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

ok

review: Approve
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

Code is a little verbose, but OK

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/platforms/mesa/server/kms/real_kms_output.cpp'
2--- src/platforms/mesa/server/kms/real_kms_output.cpp 2016-10-12 13:31:04 +0000
3+++ src/platforms/mesa/server/kms/real_kms_output.cpp 2016-11-01 09:40:38 +0000
4@@ -296,15 +296,17 @@
5 std::invalid_argument("set_gamma: mismatch gamma LUT sizes"));
6 }
7
8- if (drmModeCrtcSetGamma(
9+ int ret = drmModeCrtcSetGamma(
10 drm_fd,
11 current_crtc->crtc_id,
12 gamma.red.size(),
13 const_cast<uint16_t*>(gamma.red.data()),
14 const_cast<uint16_t*>(gamma.green.data()),
15- const_cast<uint16_t*>(gamma.blue.data())) != 0)
16- {
17- BOOST_THROW_EXCEPTION(
18- std::system_error(errno, std::system_category(), "drmModeCrtcSetGamma Failed"));
19- }
20+ const_cast<uint16_t*>(gamma.blue.data()));
21+
22+ int err = -ret;
23+ if (err)
24+ mir::log_warning("drmModeCrtcSetGamma failed: %s", strerror(err));
25+
26+ // TODO: return bool in future? Then do what with it?
27 }
28
29=== modified file 'tests/unit-tests/platforms/mesa/kms/test_real_kms_output.cpp'
30--- tests/unit-tests/platforms/mesa/kms/test_real_kms_output.cpp 2016-10-12 13:31:04 +0000
31+++ tests/unit-tests/platforms/mesa/kms/test_real_kms_output.cpp 2016-11-01 09:40:38 +0000
32@@ -397,3 +397,28 @@
33 EXPECT_TRUE(output.set_crtc(fb_id));
34 output.set_gamma(gamma);
35 }
36+
37+TEST_F(RealKMSOutputTest, drm_set_gamma_failure_does_not_throw)
38+{ // Regression test for LP: #1638220
39+ using namespace testing;
40+
41+ uint32_t const fb_id{67};
42+
43+ setup_outputs_connected_crtc();
44+
45+ mgm::RealKMSOutput output{mock_drm.fake_drm.fd(), connector_ids[0],
46+ mt::fake_shared(mock_page_flipper)};
47+
48+ mg::GammaCurves gamma{{1}, {2}, {3}};
49+
50+ EXPECT_CALL(mock_drm, drmModeCrtcSetGamma(mock_drm.fake_drm.fd(), crtc_ids[0],
51+ gamma.red.size(),
52+ const_cast<uint16_t*>(gamma.red.data()),
53+ const_cast<uint16_t*>(gamma.green.data()),
54+ const_cast<uint16_t*>(gamma.blue.data())))
55+ .WillOnce(Return(-ENOSYS));
56+
57+ EXPECT_TRUE(output.set_crtc(fb_id));
58+
59+ EXPECT_NO_THROW(output.set_gamma(gamma););
60+}

Subscribers

People subscribed via source and target branches