Mir

Merge lp:~vanvugt/mir/fix-ClientLatency-of-5-alt 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: 3310
Proposed branch: lp:~vanvugt/mir/fix-ClientLatency-of-5-alt
Merge into: lp:mir
Diff against target: 85 lines (+35/-3)
1 file modified
tests/acceptance-tests/test_latency.cpp (+35/-3)
To merge this branch: bzr merge lp:~vanvugt/mir/fix-ClientLatency-of-5-alt
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Cemil Azizoglu (community) Approve
Mir CI Bot continuous-integration Approve
Alan Griffiths Approve
Review via email: mp+285558@code.launchpad.net

Commit message

ClientLatency acceptance tests: Fix mismatching of stats that was causing
a spurious latency of 5 to be recorded for one of the buffer IDs when it's
really precisely 2.

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

PASSED: Continuous integration, rev:3302
https://mir-jenkins.ubuntu.com/job/mir-ci/269/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build/57
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/63
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/59
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/59
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=amd64,compiler=gcc,platform=mesa,release=xenial/59
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=amd64,compiler=gcc,platform=mesa,release=xenial/59/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/59
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/59/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/59
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/59/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=mesa,release=xenial/59
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=mesa,release=xenial/59/artifact/output/*zip*/output.zip

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

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

+ // The server is skipping a frame we gave it, which may or
17 + // may not be a bug. TODO: investigate.

Shouldn't we investigate first, instead of accommodating a potential bug in the test?

review: Needs Information
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

There are two issues and neither is strictly a bug in the test really.

1. The server seems to drop our first frame (unless we sleep first). TODO: investigate. This may turn out to be a "feature" as we apparently intentionally drop frames on server restarts already.

2. When #1 happens the latency stats are wrong. That's all I'm fixing here.

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

PASSED: Continuous integration, rev:3302
http://jenkins.qa.ubuntu.com/job/mir-ci/6252/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5855
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4762
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5811
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/414
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/576
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/576/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/576
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/576/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5808
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5808/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/8211
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27434
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/410
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/410/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/263
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27437

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

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

+ // EXPECT_TRUE(i == submissions.begin());

Not useful

review: Approve
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

That's arguably a useful future expectation.

If it turns out the server missing a frame is actually a bug, that's the kind of expectation we will need to introduce as a regression test. Although it may move.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3304
https://mir-jenkins.ubuntu.com/job/mir-ci/288/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build/76
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/82
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/78
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/78
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=amd64,compiler=gcc,platform=mesa,release=xenial/78
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=amd64,compiler=gcc,platform=mesa,release=xenial/78/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/78
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/78/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/78
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/78/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=mesa,release=xenial/78
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=mesa,release=xenial/78/artifact/output/*zip*/output.zip

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

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

Ok

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

PASSED: Continuous integration, rev:3304
http://jenkins.qa.ubuntu.com/job/mir-ci/6275/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5890
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4797
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5846
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/426
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/599
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/599/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/599
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/599/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5843
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5843/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/8240
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27528
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/422
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/422/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/275
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27529

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/mir-ci/6275/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 'tests/acceptance-tests/test_latency.cpp'
2--- tests/acceptance-tests/test_latency.cpp 2016-01-29 08:18:22 +0000
3+++ tests/acceptance-tests/test_latency.cpp 2016-02-12 04:13:44 +0000
4@@ -40,6 +40,7 @@
5 namespace
6 {
7
8+unsigned int const expected_client_buffers = 3;
9 int const refresh_rate = 60;
10 std::chrono::microseconds const vblank_interval(1000000/refresh_rate);
11
12@@ -69,6 +70,13 @@
13 {
14 if (i->buffer_id == submission_id)
15 {
16+ // The server is skipping a frame we gave it, which may or
17+ // may not be a bug. TODO: investigate.
18+ // EXPECT_TRUE(i == submissions.begin());
19+ // Fix it up so our stats aren't skewed by the miss:
20+ if (i != submissions.begin())
21+ i = submissions.erase(submissions.begin(), i);
22+
23 latency = post_count - i->time;
24 submissions.erase(i);
25 break;
26@@ -151,6 +159,8 @@
27 {
28 std::lock_guard<std::mutex> lock{mutex};
29 latency_list.push_back(latency.value());
30+ if (latency.value() > max)
31+ max = latency.value();
32 }
33
34 stats.post();
35@@ -175,9 +185,15 @@
36 return static_cast<float>(sum) / latency_list.size();
37 }
38
39+ unsigned int max_latency() const
40+ {
41+ return max;
42+ }
43+
44 private:
45 std::mutex mutex;
46- std::vector<int> latency_list;
47+ std::vector<unsigned int> latency_list;
48+ unsigned int max = 0;
49 Stats& stats;
50 IdCollectingDB db;
51 };
52@@ -230,8 +246,6 @@
53 ASSERT_TRUE(stats.wait_for_posts(test_submissions,
54 std::chrono::seconds(60)));
55
56- unsigned int const expected_client_buffers = 3;
57-
58 // Note: Using the "early release" optimization without dynamic queue
59 // scaling enabled makes the expected latency possibly up to
60 // nbuffers instead of nbuffers-1. After dynamic queue scaling is
61@@ -245,6 +259,24 @@
62 EXPECT_THAT(observed_latency, Lt(expected_max_latency+error_margin));
63 }
64
65+TEST_F(ClientLatency, latency_is_limited_to_nbuffers)
66+{
67+ using namespace testing;
68+
69+ auto stream = mir_surface_get_buffer_stream(surface);
70+ for(auto i = 0u; i < test_submissions; i++) {
71+ auto submission_id = mir_debug_surface_current_buffer_id(surface);
72+ stats.record_submission(submission_id);
73+ mir_buffer_stream_swap_buffers_sync(stream);
74+ }
75+
76+ ASSERT_TRUE(stats.wait_for_posts(test_submissions,
77+ std::chrono::seconds(60)));
78+
79+ auto max_latency = display.group.max_latency();
80+ EXPECT_THAT(max_latency, Le(expected_client_buffers));
81+}
82+
83 TEST_F(ClientLatency, throttled_input_rate_yields_lower_latency)
84 {
85 using namespace testing;

Subscribers

People subscribed via source and target branches