Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe6d3c45 authored by Brian Lindahl's avatar Brian Lindahl Committed by Automerger Merge Worker
Browse files

Merge "Fix VideoRenderQualityTracker_test after default is disabled" into main am: 6e7e4e4a

parents cb78e0b0 6e7e4e4a
Loading
Loading
Loading
Loading
+38 −2
Original line number Diff line number Diff line
@@ -261,7 +261,7 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withValid)
    Configuration::GetServerConfigurableFlagFn getServerConfigurableFlagFn{
        [](const std::string &, const std::string &flag, const std::string &) -> std::string {
            if (flag == "render_metrics_enabled") {
                return "false";
                return "true";
            } else if (flag == "render_metrics_are_skipped_frames_dropped") {
                return "false";
            } else if (flag == "render_metrics_max_expected_content_frame_duration_us") {
@@ -304,7 +304,7 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withValid)
    // default - if we are accidentally configuring to the default then we're not necessarily
    // testing the parsing.
    Configuration d;
    EXPECT_EQ(c.enabled, false);
    EXPECT_EQ(c.enabled, true);
    EXPECT_NE(c.enabled, d.enabled);
    EXPECT_EQ(c.areSkippedFramesDropped, false);
    EXPECT_NE(c.areSkippedFramesDropped, d.areSkippedFramesDropped);
@@ -357,6 +357,7 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withValid)

TEST_F(VideoRenderQualityTrackerTest, countsReleasedFrames) {
    Configuration c;
    c.enabled = true;
    Helper h(16.66, c);
    h.drop(10);
    h.render({16.66, 16.66, 16.66});
@@ -368,6 +369,7 @@ TEST_F(VideoRenderQualityTrackerTest, countsReleasedFrames) {

TEST_F(VideoRenderQualityTrackerTest, countsSkippedFrames) {
    Configuration c;
    c.enabled = true;
    Helper h(16.66, c);
    h.drop(10); // dropped frames are not counted
    h.skip(10); // frames skipped before rendering a frame are not counted
@@ -382,6 +384,7 @@ TEST_F(VideoRenderQualityTrackerTest, countsSkippedFrames) {

TEST_F(VideoRenderQualityTrackerTest, whenSkippedFramesAreDropped_countsDroppedFrames) {
    Configuration c;
    c.enabled = true;
    c.areSkippedFramesDropped = true;
    Helper h(16.66, c);
    h.skip(10); // skipped frames at the beginning of playback are not counted
@@ -398,6 +401,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenSkippedFramesAreDropped_countsDroppedF

TEST_F(VideoRenderQualityTrackerTest, whenNotSkippedFramesAreDropped_countsDroppedFrames) {
    Configuration c;
    c.enabled = true;
    c.areSkippedFramesDropped = false;
    Helper h(16.66, c);
    h.skip(10); // skipped frames at the beginning of playback are not counted
@@ -414,6 +418,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenNotSkippedFramesAreDropped_countsDropp

TEST_F(VideoRenderQualityTrackerTest, countsRenderedFrames) {
    Configuration c;
    c.enabled = true;
    Helper h(16.66, c);
    h.drop(10); // dropped frames are not counted
    h.render({16.66, 16.66, 16.66});
@@ -425,6 +430,7 @@ TEST_F(VideoRenderQualityTrackerTest, countsRenderedFrames) {

TEST_F(VideoRenderQualityTrackerTest, detectsFrameRate) {
    Configuration c;
    c.enabled = true;
    c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
    Helper h(16.66, c);
    h.render({16.6, 16.7, 16.6, 16.7});
@@ -434,6 +440,7 @@ TEST_F(VideoRenderQualityTrackerTest, detectsFrameRate) {

TEST_F(VideoRenderQualityTrackerTest, handlesSeeking) {
    Configuration c;
    c.enabled = true;
    c.maxExpectedContentFrameDurationUs = 30;
    VideoRenderQualityTracker v(c);
    v.onFrameReleased(0, 0);
@@ -472,6 +479,7 @@ TEST_F(VideoRenderQualityTrackerTest, handlesSeeking) {

TEST_F(VideoRenderQualityTrackerTest, withSkipping_handlesSeeking) {
    Configuration c;
    c.enabled = true;
    c.maxExpectedContentFrameDurationUs = 30;
    VideoRenderQualityTracker v(c);
    v.onFrameReleased(0, 0);
@@ -508,6 +516,7 @@ TEST_F(VideoRenderQualityTrackerTest, withSkipping_handlesSeeking) {

TEST_F(VideoRenderQualityTrackerTest, whenLowTolerance_doesntDetectFrameRate) {
    Configuration c;
    c.enabled = true;
    c.frameRateDetectionToleranceUs = 0;
    Helper h(16.66, c);
    h.render({16.6, 16.7, 16.6, 16.7});
@@ -517,6 +526,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenLowTolerance_doesntDetectFrameRate) {

TEST_F(VideoRenderQualityTrackerTest, whenFrameRateDestabilizes_detectsFrameRate) {
    Configuration c;
    c.enabled = true;
    c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
    Helper h(16.66, c);
    h.render({16.6, 16.7, 16.6, 16.7});
@@ -527,6 +537,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenFrameRateDestabilizes_detectsFrameRate

TEST_F(VideoRenderQualityTrackerTest, detects32Pulldown) {
    Configuration c;
    c.enabled = true;
    c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
    Helper h(41.66, c);
    h.render({49.9, 33.2, 50.0, 33.4, 50.1, 33.2});
@@ -536,6 +547,7 @@ TEST_F(VideoRenderQualityTrackerTest, detects32Pulldown) {

TEST_F(VideoRenderQualityTrackerTest, whenBad32Pulldown_doesntDetect32Pulldown) {
    Configuration c;
    c.enabled = true;
    c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
    Helper h(41.66, c);
    h.render({50.0, 33.33, 33.33, 50.00, 33.33, 50.00});
@@ -545,6 +557,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenBad32Pulldown_doesntDetect32Pulldown)

TEST_F(VideoRenderQualityTrackerTest, whenFrameRateChanges_detectsMostRecentFrameRate) {
    Configuration c;
    c.enabled = true;
    c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
    Helper h(16.66, c);
    h.render({16.6, 16.7, 16.6, 16.7});
@@ -558,6 +571,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenFrameRateChanges_detectsMostRecentFram

TEST_F(VideoRenderQualityTrackerTest, whenFrameRateIsUnstable_doesntDetectFrameRate) {
    Configuration c;
    c.enabled = true;
    c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
    Helper h(16.66, c);
    h.render({16.66, 30.0, 16.66, 30.0, 16.66});
@@ -567,6 +581,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenFrameRateIsUnstable_doesntDetectFrameR

TEST_F(VideoRenderQualityTrackerTest, capturesFreezeRate) {
    Configuration c;
    c.enabled = true;
    Helper h(20, c);
    h.render(3);
    EXPECT_EQ(h.getMetrics().freezeRate, 0);
@@ -579,6 +594,7 @@ TEST_F(VideoRenderQualityTrackerTest, capturesFreezeRate) {

TEST_F(VideoRenderQualityTrackerTest, capturesFreezeDurationHistogram) {
    Configuration c;
    c.enabled = true;
    // +17 because freeze durations include the render time of the previous frame
    c.freezeDurationMsHistogramBuckets = {2 * 17 + 17, 3 * 17 + 17, 6 * 17 + 17};
    Helper h(17, c);
@@ -612,6 +628,7 @@ TEST_F(VideoRenderQualityTrackerTest, capturesFreezeDurationHistogram) {

TEST_F(VideoRenderQualityTrackerTest, capturesFreezeDistanceHistogram) {
    Configuration c;
    c.enabled = true;
    c.freezeDistanceMsHistogramBuckets = {1 * 17, 5 * 17, 6 * 17};
    Helper h(17, c);
    h.render(1);
@@ -643,6 +660,7 @@ TEST_F(VideoRenderQualityTrackerTest, capturesFreezeDistanceHistogram) {

TEST_F(VideoRenderQualityTrackerTest, when60hz_hasNoJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(16.66, c); // ~24Hz
    h.render({16.66, 16.66, 16.66, 16.66, 16.66, 16.66, 16.66});
    EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -651,6 +669,7 @@ TEST_F(VideoRenderQualityTrackerTest, when60hz_hasNoJudder) {

TEST_F(VideoRenderQualityTrackerTest, whenSmallVariance60hz_hasNoJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(16.66, c); // ~24Hz
    h.render({14, 18, 14, 18, 14, 18, 14, 18});
    EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -659,6 +678,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenSmallVariance60hz_hasNoJudder) {

TEST_F(VideoRenderQualityTrackerTest, whenBadSmallVariance60Hz_hasJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(16.66, c); // ~24Hz
    h.render({14, 18, 14, /* no 18 between 14s */ 14, 18, 14, 18});
    EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 1);
@@ -666,6 +686,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenBadSmallVariance60Hz_hasJudder) {

TEST_F(VideoRenderQualityTrackerTest, when30Hz_hasNoJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(33.33, c);
    h.render({33.33, 33.33, 33.33, 33.33, 33.33, 33.33});
    EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -674,6 +695,7 @@ TEST_F(VideoRenderQualityTrackerTest, when30Hz_hasNoJudder) {

TEST_F(VideoRenderQualityTrackerTest, whenSmallVariance30Hz_hasNoJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(33.33, c);
    h.render({29.0, 35.0, 29.0, 35.0, 29.0, 35.0});
    EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -682,6 +704,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenSmallVariance30Hz_hasNoJudder) {

TEST_F(VideoRenderQualityTrackerTest, whenBadSmallVariance30Hz_hasJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(33.33, c);
    h.render({29.0, 35.0, 29.0, /* no 35 between 29s */ 29.0, 35.0, 29.0, 35.0});
    EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 1);
@@ -689,6 +712,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenBadSmallVariance30Hz_hasJudder) {

TEST_F(VideoRenderQualityTrackerTest, whenBad30HzTo60Hz_hasJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(33.33, c);
    h.render({33.33, 33.33, 50.0, /* frame stayed 1 vsync too long */ 16.66, 33.33, 33.33});
    EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 2); // note: 2 counts of judder
@@ -696,6 +720,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenBad30HzTo60Hz_hasJudder) {

TEST_F(VideoRenderQualityTrackerTest, when24HzTo60Hz_hasNoJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(41.66, c);
    h.render({50.0, 33.33, 50.0, 33.33, 50.0, 33.33});
    EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -704,6 +729,7 @@ TEST_F(VideoRenderQualityTrackerTest, when24HzTo60Hz_hasNoJudder) {

TEST_F(VideoRenderQualityTrackerTest, when25HzTo60Hz_hasJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(40, c);
    h.render({33.33, 33.33, 50.0});
    h.render({33.33, 33.33, 50.0});
@@ -716,6 +742,7 @@ TEST_F(VideoRenderQualityTrackerTest, when25HzTo60Hz_hasJudder) {

TEST_F(VideoRenderQualityTrackerTest, when50HzTo60Hz_hasJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(20, c);
    h.render({16.66, 16.66, 16.66, 33.33});
    h.render({16.66, 16.66, 16.66, 33.33});
@@ -728,6 +755,7 @@ TEST_F(VideoRenderQualityTrackerTest, when50HzTo60Hz_hasJudder) {

TEST_F(VideoRenderQualityTrackerTest, when30HzTo50Hz_hasJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(33.33, c);
    h.render({40.0, 40.0, 40.0, 60.0});
    h.render({40.0, 40.0, 40.0, 60.0});
@@ -739,6 +767,7 @@ TEST_F(VideoRenderQualityTrackerTest, when30HzTo50Hz_hasJudder) {

TEST_F(VideoRenderQualityTrackerTest, whenSmallVariancePulldown24HzTo60Hz_hasNoJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(41.66, c);
    h.render({52.0, 31.33, 52.0, 31.33, 52.0, 31.33});
    EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 0);
@@ -746,6 +775,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenSmallVariancePulldown24HzTo60Hz_hasNoJ

TEST_F(VideoRenderQualityTrackerTest, whenBad24HzTo60Hz_hasJudder) {
    Configuration c;
    c.enabled = true;
    Helper h(41.66, c);
    h.render({50.0, 33.33, 50.0, 33.33, /* no 50 between 33s */ 33.33, 50.0, 33.33});
    EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 1);
@@ -753,6 +783,7 @@ TEST_F(VideoRenderQualityTrackerTest, whenBad24HzTo60Hz_hasJudder) {

TEST_F(VideoRenderQualityTrackerTest, capturesJudderScoreHistogram) {
    Configuration c;
    c.enabled = true;
    c.judderErrorToleranceUs = 2000;
    c.judderScoreHistogramBuckets = {1, 5, 8};
    Helper h(16, c);
@@ -767,6 +798,7 @@ TEST_F(VideoRenderQualityTrackerTest, capturesJudderScoreHistogram) {
TEST_F(VideoRenderQualityTrackerTest, ranksJudderScoresInOrder) {
    // Each rendering is ranked from best to worst from a user experience
    Configuration c;
    c.enabled = true;
    c.judderErrorToleranceUs = 2000;
    c.judderScoreHistogramBuckets = {0, 1000};
    int64_t previousScore = 0;
@@ -846,6 +878,7 @@ TEST_F(VideoRenderQualityTrackerTest, ranksJudderScoresInOrder) {

TEST_F(VideoRenderQualityTrackerTest, capturesFreezeEvents) {
    Configuration c;
    c.enabled = true;
    c.freezeEventMax = 5;
    c.freezeEventDetailsMax = 4;
    c.freezeEventDistanceToleranceMs = 1000;
@@ -938,6 +971,7 @@ TEST_F(VideoRenderQualityTrackerTest, capturesFreezeEvents) {

TEST_F(VideoRenderQualityTrackerTest, capturesJudderEvents) {
    Configuration c;
    c.enabled = true;
    c.judderEventMax = 4;
    c.judderEventDetailsMax = 3;
    c.judderEventDistanceToleranceMs = 100;
@@ -988,6 +1022,7 @@ TEST_F(VideoRenderQualityTrackerTest, capturesJudderEvents) {

TEST_F(VideoRenderQualityTrackerTest, capturesOverallFreezeScore) {
    Configuration c;
    c.enabled = true;
    // # drops * 20ms + 20ms because current frame is frozen + 1 for bucket threshold
    c.freezeDurationMsHistogramBuckets = {1 * 20 + 21, 5 * 20 + 21, 10 * 20 + 21};
    c.freezeDurationMsHistogramToScore = {10, 100, 1000};
@@ -1012,6 +1047,7 @@ TEST_F(VideoRenderQualityTrackerTest, capturesOverallFreezeScore) {

TEST_F(VideoRenderQualityTrackerTest, capturesOverallJudderScore) {
    Configuration c;
    c.enabled = true;
    c.judderScoreHistogramBuckets = {0, 6, 10};
    c.judderScoreHistogramToScore = {10, 100, 1000};
    Helper h(20, c);