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
=== modified file 'tests/acceptance-tests/test_latency.cpp'
--- tests/acceptance-tests/test_latency.cpp 2016-01-29 08:18:22 +0000
+++ tests/acceptance-tests/test_latency.cpp 2016-02-12 04:13:44 +0000
@@ -40,6 +40,7 @@
40namespace40namespace
41{41{
4242
43unsigned int const expected_client_buffers = 3;
43int const refresh_rate = 60;44int const refresh_rate = 60;
44std::chrono::microseconds const vblank_interval(1000000/refresh_rate);45std::chrono::microseconds const vblank_interval(1000000/refresh_rate);
4546
@@ -69,6 +70,13 @@
69 {70 {
70 if (i->buffer_id == submission_id)71 if (i->buffer_id == submission_id)
71 {72 {
73 // The server is skipping a frame we gave it, which may or
74 // may not be a bug. TODO: investigate.
75 // EXPECT_TRUE(i == submissions.begin());
76 // Fix it up so our stats aren't skewed by the miss:
77 if (i != submissions.begin())
78 i = submissions.erase(submissions.begin(), i);
79
72 latency = post_count - i->time;80 latency = post_count - i->time;
73 submissions.erase(i);81 submissions.erase(i);
74 break;82 break;
@@ -151,6 +159,8 @@
151 {159 {
152 std::lock_guard<std::mutex> lock{mutex};160 std::lock_guard<std::mutex> lock{mutex};
153 latency_list.push_back(latency.value());161 latency_list.push_back(latency.value());
162 if (latency.value() > max)
163 max = latency.value();
154 }164 }
155165
156 stats.post();166 stats.post();
@@ -175,9 +185,15 @@
175 return static_cast<float>(sum) / latency_list.size();185 return static_cast<float>(sum) / latency_list.size();
176 }186 }
177187
188 unsigned int max_latency() const
189 {
190 return max;
191 }
192
178private:193private:
179 std::mutex mutex;194 std::mutex mutex;
180 std::vector<int> latency_list;195 std::vector<unsigned int> latency_list;
196 unsigned int max = 0;
181 Stats& stats;197 Stats& stats;
182 IdCollectingDB db;198 IdCollectingDB db;
183};199};
@@ -230,8 +246,6 @@
230 ASSERT_TRUE(stats.wait_for_posts(test_submissions,246 ASSERT_TRUE(stats.wait_for_posts(test_submissions,
231 std::chrono::seconds(60)));247 std::chrono::seconds(60)));
232248
233 unsigned int const expected_client_buffers = 3;
234
235 // Note: Using the "early release" optimization without dynamic queue249 // Note: Using the "early release" optimization without dynamic queue
236 // scaling enabled makes the expected latency possibly up to250 // scaling enabled makes the expected latency possibly up to
237 // nbuffers instead of nbuffers-1. After dynamic queue scaling is251 // nbuffers instead of nbuffers-1. After dynamic queue scaling is
@@ -245,6 +259,24 @@
245 EXPECT_THAT(observed_latency, Lt(expected_max_latency+error_margin));259 EXPECT_THAT(observed_latency, Lt(expected_max_latency+error_margin));
246}260}
247261
262TEST_F(ClientLatency, latency_is_limited_to_nbuffers)
263{
264 using namespace testing;
265
266 auto stream = mir_surface_get_buffer_stream(surface);
267 for(auto i = 0u; i < test_submissions; i++) {
268 auto submission_id = mir_debug_surface_current_buffer_id(surface);
269 stats.record_submission(submission_id);
270 mir_buffer_stream_swap_buffers_sync(stream);
271 }
272
273 ASSERT_TRUE(stats.wait_for_posts(test_submissions,
274 std::chrono::seconds(60)));
275
276 auto max_latency = display.group.max_latency();
277 EXPECT_THAT(max_latency, Le(expected_client_buffers));
278}
279
248TEST_F(ClientLatency, throttled_input_rate_yields_lower_latency)280TEST_F(ClientLatency, throttled_input_rate_yields_lower_latency)
249{281{
250 using namespace testing;282 using namespace testing;

Subscribers

People subscribed via source and target branches