// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "media/capture/content/video_capture_oracle.h" #include <optional> #include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" namespace media { namespace { constexpr base::TimeTicks kInitialTestTimeTicks = …; constexpr base::TimeDelta k30HzPeriod = …; constexpr gfx::Size k1080pSize = …; constexpr gfx::Size k720pSize = …; constexpr gfx::Size k360pSize = …; constexpr gfx::Size kSmallestNonEmptySize = …; } // namespace // Tests that VideoCaptureOracle filters out events whose timestamps are // decreasing. TEST(VideoCaptureOracleTest, EnforcesEventTimeMonotonicity) { … } // Tests that VideoCaptureOracle is enforcing the requirement that // successfully captured frames are delivered in order. Otherwise, downstream // consumers could be tripped-up by out-of-order frames or frame timestamps. TEST(VideoCaptureOracleTest, EnforcesFramesDeliveredInOrder) { … } // Tests that VideoCaptureOracle transitions between using its two samplers in a // way that does not introduce severe jank, pauses, etc. TEST(VideoCaptureOracleTest, TransitionsSmoothlyBetweenSamplers) { … } // Tests that VideoCaptureOracle prevents refresh request events from initiating // simultaneous captures. TEST(VideoCaptureOracleTest, SamplesAtCorrectTimesAroundRefreshRequests) { … } // Tests that VideoCaptureOracle does not rapidly change proposed capture sizes, // to allow both the source content and the rest of the end-to-end system to // stabilize (if autothrottling is enabled). TEST(VideoCaptureOracleTest, DoesNotRapidlyChangeCaptureSize) { … } // Tests that VideoCaptureOracle allows every video frame to have a different // size if resize throttling is disabled. TEST(VideoCaptureOracleTest, ResizeThrottlingDisabled) { … } namespace { // Tests that VideoCaptureOracle can auto-throttle by stepping the capture size // up or down. When |is_content_animating| is false, there is more // aggressiveness expected in the timing of stepping upwards. If // |with_consumer_feedback| is false, only buffer pool utilization varies and no // consumer feedback is provided. If |with_consumer_feedback| is true, the // buffer pool utilization is held constant at 25%, and the consumer utilization // feedback varies. void RunAutoThrottleTest(bool is_content_animating, bool with_consumer_feedback) { … } } // namespace // Tests that VideoCaptureOracle can auto-throttle by stepping the capture size // up or down, using utilization feedback signals from either the buffer pool or // the consumer, and with slightly different behavior depending on whether // content is animating. TEST(VideoCaptureOracleTest, AutoThrottlesCaptureSizeBasedOnUtilizationFeedback) { … } // Test that the capture size is not auto-throttled if consumer feedback is // never provided. This represents VideoCaptureOracle being stuck in the // kThrottlingEnabled mode, but never having entered the kThrottlingActive mode. TEST(VideoCaptureOracleTest, DoesNotAutoThrottleCaptureSizeWithoutConsumerFeedback) { … } // Tests that, while content is animating, VideoCaptureOracle can make frequent // capture size increases only just after the source size has changed. // Otherwise, capture size increases should only be made cautiously, after a // long "proving period of under-utilization" has elapsed. TEST(VideoCaptureOracleTest, IncreasesFrequentlyOnlyAfterSourceSizeChange) { … } // Tests that VideoCaptureOracle does not change the capture size if // auto-throttling is enabled when using a fixed resolution policy. TEST(VideoCaptureOracleTest, DoesNotAutoThrottleWhenResolutionIsFixed) { … } // Tests that VideoCaptureOracle reduces resolution on max_pixels feedback. TEST(VideoCaptureOracleTest, RespectsMaxPixelsFeedback) { … } // Tests that VideoCaptureOracle respects resource_utilization feedback over // max_pixels feedback. TEST(VideoCaptureOracleTest, IgnoresMaxPixelsFeedbackIfAutoThrottlingIsOn) { … } // Tests that VideoCaptureOracle respects the max framerate requested by the // consumer. TEST(VideoCaptureOracleTest, RespectsMaxFrameRateFeedback) { … } } // namespace media