Mir

Merge lp:~vanvugt/mir/fix-1671033 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: 4086
Proposed branch: lp:~vanvugt/mir/fix-1671033
Merge into: lp:mir
Diff against target: 33 lines (+7/-5)
2 files modified
tests/mir_test_doubles/fake_alarm_factory.cpp (+6/-4)
tests/unit-tests/scene/test_mediating_display_changer.cpp (+1/-1)
To merge this branch: bzr merge lp:~vanvugt/mir/fix-1671033
Reviewer Review Type Date Requested Status
Alan Griffiths Approve
Mir CI Bot continuous-integration Approve
Review via email: mp+319784@code.launchpad.net

Commit message

Optimize a crazily inefficient test case (LP: #1671033)

Not a threading problem this time, but a general algorithmic complexity
problem. The test itself was running 50x longer than it needs to, and
the FakeAlarmFactory class it uses was copying a vector 3 million times during the one test case (now zero times).

Execution times under valgrind:
Before: 30 seconds; After: 0.7 seconds

Execution times natively:
Before: 0.8 seconds; After: 0.01 seconds

Description of the change

Note the above times are from a fast Xeon. CI logs show the test was taking minutes in CI.

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

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

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

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

OK

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tests/mir_test_doubles/fake_alarm_factory.cpp'
2--- tests/mir_test_doubles/fake_alarm_factory.cpp 2017-01-18 02:29:37 +0000
3+++ tests/mir_test_doubles/fake_alarm_factory.cpp 2017-03-14 10:11:45 +0000
4@@ -155,11 +155,13 @@
5 void mtd::FakeAlarmFactory::advance_by(mt::Duration step)
6 {
7 clock->advance_by(step);
8- // Guard against alarms deleting themselves from their callback...
9- auto temp_alarms = alarms;
10- for (auto& alarm : temp_alarms)
11+ for (unsigned i = 0u; i < alarms.size();)
12 {
13- alarm->time_updated();
14+ auto const old_size = alarms.size();
15+ alarms[i]->time_updated();
16+ // Guard against alarms deleting themselves from their callback...
17+ if (alarms.size() >= old_size)
18+ ++i;
19 }
20 }
21
22
23=== modified file 'tests/unit-tests/scene/test_mediating_display_changer.cpp'
24--- tests/unit-tests/scene/test_mediating_display_changer.cpp 2017-03-13 08:12:52 +0000
25+++ tests/unit-tests/scene/test_mediating_display_changer.cpp 2017-03-14 10:11:45 +0000
26@@ -1022,7 +1022,7 @@
27
28 changer->confirm_base_configuration(mock_session, new_config);
29
30- alarm_factory.advance_smoothly_by(timeout * 100);
31+ alarm_factory.advance_smoothly_by(timeout * 2);
32 EXPECT_THAT(*applied_config, mt::DisplayConfigMatches(std::cref(*new_config)));
33 }
34

Subscribers

People subscribed via source and target branches