Loading media/libstagefright/VideoRenderQualityTracker.cpp +21 −23 Original line number Diff line number Diff line Loading @@ -161,7 +161,6 @@ VideoRenderQualityTracker::Configuration getFlag(traceTriggerEnabled, "trace_trigger_enabled"); getFlag(traceTriggerThrottleMs, "trace_trigger_throttle_ms"); getFlag(traceMinFreezeDurationMs, "trace_minimum_freeze_duration_ms"); getFlag(traceMaxFreezeDurationMs, "trace_maximum_freeze_duration_ms"); #undef getFlag return c; } Loading Loading @@ -208,7 +207,6 @@ VideoRenderQualityTracker::Configuration::Configuration() { "ro.build.type", "user") != "user"; // Enabled for non-user builds for debugging. traceTriggerThrottleMs = 5 * 60 * 1000; // 5 mins. traceMinFreezeDurationMs = 400; traceMaxFreezeDurationMs = 1500; } VideoRenderQualityTracker::VideoRenderQualityTracker() Loading Loading @@ -300,15 +298,7 @@ void VideoRenderQualityTracker::onFrameRendered(int64_t contentTimeUs, int64_t a int64_t actualRenderTimeUs = actualRenderTimeNs / 1000; if (mLastRenderTimeUs != -1) { int64_t frameRenderDurationMs = (actualRenderTimeUs - mLastRenderTimeUs) / 1000; mRenderDurationMs += frameRenderDurationMs; if (mConfiguration.traceTriggerEnabled // Threshold for visible video freeze. && frameRenderDurationMs >= mConfiguration.traceMinFreezeDurationMs // Threshold for removing long render durations which could be video pause. && frameRenderDurationMs < mConfiguration.traceMaxFreezeDurationMs) { triggerTraceWithThrottle(mTraceTriggerFn, mConfiguration, actualRenderTimeUs); } mRenderDurationMs += (actualRenderTimeUs - mLastRenderTimeUs) / 1000; } // Now that a frame has been rendered, the previously skipped frames can be processed as skipped Loading Loading @@ -549,7 +539,7 @@ void VideoRenderQualityTracker::processMetricsForRenderedFrame(int64_t contentTi } if (!isLikelyCatchingUpAfterPause) { processFreeze(actualRenderTimeUs, mLastRenderTimeUs, mLastFreezeEndTimeUs, mFreezeEvent, mMetrics, mConfiguration); mMetrics, mConfiguration, mTraceTriggerFn); mLastFreezeEndTimeUs = actualRenderTimeUs; } } Loading @@ -575,8 +565,8 @@ void VideoRenderQualityTracker::processMetricsForRenderedFrame(int64_t contentTi void VideoRenderQualityTracker::processFreeze(int64_t actualRenderTimeUs, int64_t lastRenderTimeUs, int64_t lastFreezeEndTimeUs, FreezeEvent &e, VideoRenderQualityMetrics &m, const Configuration &c) { VideoRenderQualityMetrics &m, const Configuration &c, const TraceTriggerFn traceTriggerFn) { int32_t durationMs = int32_t((actualRenderTimeUs - lastRenderTimeUs) / 1000); m.freezeDurationMsHistogram.insert(durationMs); int32_t distanceMs = -1; Loading Loading @@ -612,6 +602,11 @@ void VideoRenderQualityTracker::processFreeze(int64_t actualRenderTimeUs, int64_ e.details.distanceMs.push_back(distanceMs); // -1 for first detail in the first event } } if (c.traceTriggerEnabled && durationMs >= c.traceMinFreezeDurationMs) { ALOGI("Video freezed %lld ms", (long long) durationMs); triggerTraceWithThrottle(traceTriggerFn, c, actualRenderTimeUs); } } void VideoRenderQualityTracker::maybeCaptureFreezeEvent(int64_t actualRenderTimeUs, Loading Loading @@ -818,6 +813,7 @@ void VideoRenderQualityTracker::triggerTraceWithThrottle(const TraceTriggerFn tr static int64_t lastTriggerUs = -1; static Mutex updateLastTriggerLock; { Mutex::Autolock autoLock(updateLastTriggerLock); if (lastTriggerUs != -1) { int32_t sinceLastTriggerMs = int32_t((triggerTimeUs - lastTriggerUs) / 1000); Loading @@ -829,6 +825,8 @@ void VideoRenderQualityTracker::triggerTraceWithThrottle(const TraceTriggerFn tr } } lastTriggerUs = triggerTimeUs; } (*traceTriggerFn)(); } Loading media/libstagefright/include/media/stagefright/VideoRenderQualityTracker.h +2 −6 Original line number Diff line number Diff line Loading @@ -220,11 +220,6 @@ public: // // The minimum frame render duration to recognize video freeze event to collect trace. int32_t traceMinFreezeDurationMs; // // The maximum frame render duration to recognize video freeze event. A frame render // duration that is larger than the max duration would not trigger trace collection for // video freeze because it's highly possible a video pause. int32_t traceMaxFreezeDurationMs; }; struct FreezeEvent { Loading Loading @@ -380,7 +375,8 @@ private: // Process a frame freeze. static void processFreeze(int64_t actualRenderTimeUs, int64_t lastRenderTimeUs, int64_t lastFreezeEndTimeUs, FreezeEvent &e, VideoRenderQualityMetrics &m, const Configuration &c); VideoRenderQualityMetrics &m, const Configuration &c, const TraceTriggerFn traceTriggerFn); // Retrieve a freeze event if an event just finished. static void maybeCaptureFreezeEvent(int64_t actualRenderTimeUs, int64_t lastFreezeEndTimeUs, Loading media/libstagefright/tests/VideoRenderQualityTracker_test.cpp +27 −49 Original line number Diff line number Diff line Loading @@ -156,7 +156,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withDefault EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withEmpty) { Loading Loading @@ -188,7 +187,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withEmpty) EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withInvalid) { Loading Loading @@ -220,7 +218,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withInvalid EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withAlmostValid) { Loading Loading @@ -297,7 +294,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withAlmostV EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withValid) { Loading Loading @@ -412,7 +408,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withValid) EXPECT_EQ(c.traceTriggerEnabled, true); EXPECT_EQ(c.traceTriggerThrottleMs, 50000); EXPECT_EQ(c.traceMinFreezeDurationMs, 1000); EXPECT_EQ(c.traceMaxFreezeDurationMs, 5000); } TEST_F(VideoRenderQualityTrackerTest, countsReleasedFrames) { Loading Loading @@ -1126,53 +1121,34 @@ TEST_F(VideoRenderQualityTrackerTest, c.enabled = true; c.traceTriggerEnabled = true; // The trigger is enabled, so traces should be triggered. // The value of traceTriggerThrottleMs must be larger than traceMinFreezeDurationMs. Otherwise, // the throttle does work. // the throttle does not work. c.traceTriggerThrottleMs = 200; c.traceMinFreezeDurationMs = 40; int32_t freeze = c.traceMinFreezeDurationMs; c.traceMinFreezeDurationMs = 4 * 20; // 4 frames. Helper h(20, c); // Freeze triggers separated by 80ms which is less than the threshold. h.render({ freeze, // Freeze duration does not check trace trigger. 20, // Trace triggered. 20, // Throttle time: 20/200ms 20, // Throttle time: 40/200ms freeze, // Throttle time: 80/200ms 20, // Throttle time: 100/200ms (Trace not triggered) }); // Freeze triggers separated by 100ms which is less than the threshold. h.render(1); // Video start. h.drop(3); // Freeze. h.render(1); // Trace triggered. h.render(1); // Throttle time: 20/200ms h.drop(3); // Throttle time: 80/200ms h.render(1); // Throttle time: 100/200ms (Trace not triggered) EXPECT_EQ(h.getTraceTriggeredCount(), 1); // Next freeze trigger is separated by 200ms which breaks the throttle threshold. h.render({ 20, // Throttle time: 120/200ms 20, // Throttle time: 140/200ms 20, // Throttle time: 160/200ms freeze, // Throttle time: 200/200ms 20, // Trace triggered. }); h.render(1); // Throttle time: 120/200ms h.drop(3); // Throttle time: 180/200ms h.render(1); // Throttle time: 200/200ms (Trace triggered) EXPECT_EQ(h.getTraceTriggeredCount(), 2); // Next freeze trigger is separated by 80ms which is less than the threshold. h.render({ 20, // Throttle time: 20/200ms 20, // Throttle time: 40/200ms freeze, // Throttle time: 80/200ms 20, // Throttle time: 100/200ms (Trace not triggered) }); // Next freeze trigger is separated by 100ms which is less than the threshold. h.render(1); // Throttle time: 20/200ms h.drop(3); // Throttle time: 80/200ms h.render(1); // Throttle time: 100/200ms (Trace not triggered) EXPECT_EQ(h.getTraceTriggeredCount(), 2); } TEST_F(VideoRenderQualityTrackerTest, freezeForTraceDuration_triggersTrace) { Configuration c; c.enabled = true; c.traceTriggerEnabled = true; // The trigger is enabled, so traces should be triggered. c.traceTriggerThrottleMs = 0; // Disable throttle in the test case. int32_t freeze1 = c.traceMinFreezeDurationMs; int32_t freeze2 = c.traceMaxFreezeDurationMs - 1; int32_t couldBeAPause = c.traceMaxFreezeDurationMs + 1; Helper h(20, c); h.render({freeze1, 20, freeze2, 20, couldBeAPause, 20}); // Freeze duration is less than traceMinFreezeDurationMs and throttle ends. h.render(1); // Throttle time: 120/200ms h.render(1); // Throttle time: 140/200ms h.drop(2); // Throttle time: 180/200ms h.render(1); // Throttle time: 200/200ms (Trace not triggered, freeze duration = 60ms) EXPECT_EQ(h.getTraceTriggeredCount(), 2); } Loading @@ -1182,12 +1158,14 @@ TEST_F(VideoRenderQualityTrackerTest, c.enabled = true; c.traceTriggerEnabled = false; // The trigger is disabled, so no traces should be triggered. c.traceTriggerThrottleMs = 0; // Disable throttle in the test case. int32_t freeze1 = c.traceMinFreezeDurationMs; int32_t freeze2 = c.traceMaxFreezeDurationMs - 1; int32_t couldBeAPause = c.traceMaxFreezeDurationMs + 1; c.traceMinFreezeDurationMs = 4 * 20; // 4 frames. Helper h(20, c); h.render({freeze1, 20, freeze2, 20, couldBeAPause, 20}); h.render(1); h.drop(3); h.render(1); // Render duration is 80 ms. h.drop(4); h.render(1); // Render duration is 100 ms. EXPECT_EQ(h.getTraceTriggeredCount(), 0); } Loading Loading
media/libstagefright/VideoRenderQualityTracker.cpp +21 −23 Original line number Diff line number Diff line Loading @@ -161,7 +161,6 @@ VideoRenderQualityTracker::Configuration getFlag(traceTriggerEnabled, "trace_trigger_enabled"); getFlag(traceTriggerThrottleMs, "trace_trigger_throttle_ms"); getFlag(traceMinFreezeDurationMs, "trace_minimum_freeze_duration_ms"); getFlag(traceMaxFreezeDurationMs, "trace_maximum_freeze_duration_ms"); #undef getFlag return c; } Loading Loading @@ -208,7 +207,6 @@ VideoRenderQualityTracker::Configuration::Configuration() { "ro.build.type", "user") != "user"; // Enabled for non-user builds for debugging. traceTriggerThrottleMs = 5 * 60 * 1000; // 5 mins. traceMinFreezeDurationMs = 400; traceMaxFreezeDurationMs = 1500; } VideoRenderQualityTracker::VideoRenderQualityTracker() Loading Loading @@ -300,15 +298,7 @@ void VideoRenderQualityTracker::onFrameRendered(int64_t contentTimeUs, int64_t a int64_t actualRenderTimeUs = actualRenderTimeNs / 1000; if (mLastRenderTimeUs != -1) { int64_t frameRenderDurationMs = (actualRenderTimeUs - mLastRenderTimeUs) / 1000; mRenderDurationMs += frameRenderDurationMs; if (mConfiguration.traceTriggerEnabled // Threshold for visible video freeze. && frameRenderDurationMs >= mConfiguration.traceMinFreezeDurationMs // Threshold for removing long render durations which could be video pause. && frameRenderDurationMs < mConfiguration.traceMaxFreezeDurationMs) { triggerTraceWithThrottle(mTraceTriggerFn, mConfiguration, actualRenderTimeUs); } mRenderDurationMs += (actualRenderTimeUs - mLastRenderTimeUs) / 1000; } // Now that a frame has been rendered, the previously skipped frames can be processed as skipped Loading Loading @@ -549,7 +539,7 @@ void VideoRenderQualityTracker::processMetricsForRenderedFrame(int64_t contentTi } if (!isLikelyCatchingUpAfterPause) { processFreeze(actualRenderTimeUs, mLastRenderTimeUs, mLastFreezeEndTimeUs, mFreezeEvent, mMetrics, mConfiguration); mMetrics, mConfiguration, mTraceTriggerFn); mLastFreezeEndTimeUs = actualRenderTimeUs; } } Loading @@ -575,8 +565,8 @@ void VideoRenderQualityTracker::processMetricsForRenderedFrame(int64_t contentTi void VideoRenderQualityTracker::processFreeze(int64_t actualRenderTimeUs, int64_t lastRenderTimeUs, int64_t lastFreezeEndTimeUs, FreezeEvent &e, VideoRenderQualityMetrics &m, const Configuration &c) { VideoRenderQualityMetrics &m, const Configuration &c, const TraceTriggerFn traceTriggerFn) { int32_t durationMs = int32_t((actualRenderTimeUs - lastRenderTimeUs) / 1000); m.freezeDurationMsHistogram.insert(durationMs); int32_t distanceMs = -1; Loading Loading @@ -612,6 +602,11 @@ void VideoRenderQualityTracker::processFreeze(int64_t actualRenderTimeUs, int64_ e.details.distanceMs.push_back(distanceMs); // -1 for first detail in the first event } } if (c.traceTriggerEnabled && durationMs >= c.traceMinFreezeDurationMs) { ALOGI("Video freezed %lld ms", (long long) durationMs); triggerTraceWithThrottle(traceTriggerFn, c, actualRenderTimeUs); } } void VideoRenderQualityTracker::maybeCaptureFreezeEvent(int64_t actualRenderTimeUs, Loading Loading @@ -818,6 +813,7 @@ void VideoRenderQualityTracker::triggerTraceWithThrottle(const TraceTriggerFn tr static int64_t lastTriggerUs = -1; static Mutex updateLastTriggerLock; { Mutex::Autolock autoLock(updateLastTriggerLock); if (lastTriggerUs != -1) { int32_t sinceLastTriggerMs = int32_t((triggerTimeUs - lastTriggerUs) / 1000); Loading @@ -829,6 +825,8 @@ void VideoRenderQualityTracker::triggerTraceWithThrottle(const TraceTriggerFn tr } } lastTriggerUs = triggerTimeUs; } (*traceTriggerFn)(); } Loading
media/libstagefright/include/media/stagefright/VideoRenderQualityTracker.h +2 −6 Original line number Diff line number Diff line Loading @@ -220,11 +220,6 @@ public: // // The minimum frame render duration to recognize video freeze event to collect trace. int32_t traceMinFreezeDurationMs; // // The maximum frame render duration to recognize video freeze event. A frame render // duration that is larger than the max duration would not trigger trace collection for // video freeze because it's highly possible a video pause. int32_t traceMaxFreezeDurationMs; }; struct FreezeEvent { Loading Loading @@ -380,7 +375,8 @@ private: // Process a frame freeze. static void processFreeze(int64_t actualRenderTimeUs, int64_t lastRenderTimeUs, int64_t lastFreezeEndTimeUs, FreezeEvent &e, VideoRenderQualityMetrics &m, const Configuration &c); VideoRenderQualityMetrics &m, const Configuration &c, const TraceTriggerFn traceTriggerFn); // Retrieve a freeze event if an event just finished. static void maybeCaptureFreezeEvent(int64_t actualRenderTimeUs, int64_t lastFreezeEndTimeUs, Loading
media/libstagefright/tests/VideoRenderQualityTracker_test.cpp +27 −49 Original line number Diff line number Diff line Loading @@ -156,7 +156,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withDefault EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withEmpty) { Loading Loading @@ -188,7 +187,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withEmpty) EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withInvalid) { Loading Loading @@ -220,7 +218,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withInvalid EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withAlmostValid) { Loading Loading @@ -297,7 +294,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withAlmostV EXPECT_EQ(c.traceTriggerEnabled, d.traceTriggerEnabled); EXPECT_EQ(c.traceTriggerThrottleMs, d.traceTriggerThrottleMs); EXPECT_EQ(c.traceMinFreezeDurationMs, d.traceMinFreezeDurationMs); EXPECT_EQ(c.traceMaxFreezeDurationMs, d.traceMaxFreezeDurationMs); } TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withValid) { Loading Loading @@ -412,7 +408,6 @@ TEST_F(VideoRenderQualityTrackerTest, getFromServerConfigurableFlags_withValid) EXPECT_EQ(c.traceTriggerEnabled, true); EXPECT_EQ(c.traceTriggerThrottleMs, 50000); EXPECT_EQ(c.traceMinFreezeDurationMs, 1000); EXPECT_EQ(c.traceMaxFreezeDurationMs, 5000); } TEST_F(VideoRenderQualityTrackerTest, countsReleasedFrames) { Loading Loading @@ -1126,53 +1121,34 @@ TEST_F(VideoRenderQualityTrackerTest, c.enabled = true; c.traceTriggerEnabled = true; // The trigger is enabled, so traces should be triggered. // The value of traceTriggerThrottleMs must be larger than traceMinFreezeDurationMs. Otherwise, // the throttle does work. // the throttle does not work. c.traceTriggerThrottleMs = 200; c.traceMinFreezeDurationMs = 40; int32_t freeze = c.traceMinFreezeDurationMs; c.traceMinFreezeDurationMs = 4 * 20; // 4 frames. Helper h(20, c); // Freeze triggers separated by 80ms which is less than the threshold. h.render({ freeze, // Freeze duration does not check trace trigger. 20, // Trace triggered. 20, // Throttle time: 20/200ms 20, // Throttle time: 40/200ms freeze, // Throttle time: 80/200ms 20, // Throttle time: 100/200ms (Trace not triggered) }); // Freeze triggers separated by 100ms which is less than the threshold. h.render(1); // Video start. h.drop(3); // Freeze. h.render(1); // Trace triggered. h.render(1); // Throttle time: 20/200ms h.drop(3); // Throttle time: 80/200ms h.render(1); // Throttle time: 100/200ms (Trace not triggered) EXPECT_EQ(h.getTraceTriggeredCount(), 1); // Next freeze trigger is separated by 200ms which breaks the throttle threshold. h.render({ 20, // Throttle time: 120/200ms 20, // Throttle time: 140/200ms 20, // Throttle time: 160/200ms freeze, // Throttle time: 200/200ms 20, // Trace triggered. }); h.render(1); // Throttle time: 120/200ms h.drop(3); // Throttle time: 180/200ms h.render(1); // Throttle time: 200/200ms (Trace triggered) EXPECT_EQ(h.getTraceTriggeredCount(), 2); // Next freeze trigger is separated by 80ms which is less than the threshold. h.render({ 20, // Throttle time: 20/200ms 20, // Throttle time: 40/200ms freeze, // Throttle time: 80/200ms 20, // Throttle time: 100/200ms (Trace not triggered) }); // Next freeze trigger is separated by 100ms which is less than the threshold. h.render(1); // Throttle time: 20/200ms h.drop(3); // Throttle time: 80/200ms h.render(1); // Throttle time: 100/200ms (Trace not triggered) EXPECT_EQ(h.getTraceTriggeredCount(), 2); } TEST_F(VideoRenderQualityTrackerTest, freezeForTraceDuration_triggersTrace) { Configuration c; c.enabled = true; c.traceTriggerEnabled = true; // The trigger is enabled, so traces should be triggered. c.traceTriggerThrottleMs = 0; // Disable throttle in the test case. int32_t freeze1 = c.traceMinFreezeDurationMs; int32_t freeze2 = c.traceMaxFreezeDurationMs - 1; int32_t couldBeAPause = c.traceMaxFreezeDurationMs + 1; Helper h(20, c); h.render({freeze1, 20, freeze2, 20, couldBeAPause, 20}); // Freeze duration is less than traceMinFreezeDurationMs and throttle ends. h.render(1); // Throttle time: 120/200ms h.render(1); // Throttle time: 140/200ms h.drop(2); // Throttle time: 180/200ms h.render(1); // Throttle time: 200/200ms (Trace not triggered, freeze duration = 60ms) EXPECT_EQ(h.getTraceTriggeredCount(), 2); } Loading @@ -1182,12 +1158,14 @@ TEST_F(VideoRenderQualityTrackerTest, c.enabled = true; c.traceTriggerEnabled = false; // The trigger is disabled, so no traces should be triggered. c.traceTriggerThrottleMs = 0; // Disable throttle in the test case. int32_t freeze1 = c.traceMinFreezeDurationMs; int32_t freeze2 = c.traceMaxFreezeDurationMs - 1; int32_t couldBeAPause = c.traceMaxFreezeDurationMs + 1; c.traceMinFreezeDurationMs = 4 * 20; // 4 frames. Helper h(20, c); h.render({freeze1, 20, freeze2, 20, couldBeAPause, 20}); h.render(1); h.drop(3); h.render(1); // Render duration is 80 ms. h.drop(4); h.render(1); // Render duration is 100 ms. EXPECT_EQ(h.getTraceTriggeredCount(), 0); } Loading