Add configuration for ability to use the encode usage measure for triggering overuse/underuse.
BUG=1577 R=mflodman@webrtc.org Review URL: https://webrtc-codereview.appspot.com/10509004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5767 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -66,6 +66,11 @@ class OveruseFrameDetectorTest : public ::testing::Test {
|
||||
options_.high_capture_jitter_threshold_ms) / 2.0f) + 0.5;
|
||||
}
|
||||
|
||||
int InitialEncodeUsage() {
|
||||
return ((options_.low_encode_usage_threshold_percent +
|
||||
options_.high_encode_usage_threshold_percent) / 2.0f) + 0.5;
|
||||
}
|
||||
|
||||
void InsertFramesWithInterval(
|
||||
size_t num_frames, int interval_ms, int width, int height) {
|
||||
while (num_frames-- > 0) {
|
||||
@ -74,6 +79,16 @@ class OveruseFrameDetectorTest : public ::testing::Test {
|
||||
}
|
||||
}
|
||||
|
||||
void InsertAndEncodeFramesWithInterval(
|
||||
int num_frames, int interval_ms, int width, int height, int encode_ms) {
|
||||
while (num_frames-- > 0) {
|
||||
overuse_detector_->FrameCaptured(width, height);
|
||||
clock_->AdvanceTimeMilliseconds(encode_ms);
|
||||
overuse_detector_->FrameEncoded(encode_ms);
|
||||
clock_->AdvanceTimeMilliseconds(interval_ms - encode_ms);
|
||||
}
|
||||
}
|
||||
|
||||
void TriggerOveruse(int num_times) {
|
||||
for (int i = 0; i < num_times; ++i) {
|
||||
InsertFramesWithInterval(200, kFrameInterval33ms, kWidth, kHeight);
|
||||
@ -87,6 +102,22 @@ class OveruseFrameDetectorTest : public ::testing::Test {
|
||||
overuse_detector_->Process();
|
||||
}
|
||||
|
||||
void TriggerOveruseWithEncodeUsage(int num_times) {
|
||||
const int kEncodeTimeMs = 32;
|
||||
for (int i = 0; i < num_times; ++i) {
|
||||
InsertAndEncodeFramesWithInterval(
|
||||
1000, kFrameInterval33ms, kWidth, kHeight, kEncodeTimeMs);
|
||||
overuse_detector_->Process();
|
||||
}
|
||||
}
|
||||
|
||||
void TriggerNormalUsageWithEncodeUsage() {
|
||||
const int kEncodeTimeMs = 5;
|
||||
InsertAndEncodeFramesWithInterval(
|
||||
1000, kFrameInterval33ms, kWidth, kHeight, kEncodeTimeMs);
|
||||
overuse_detector_->Process();
|
||||
}
|
||||
|
||||
CpuOveruseOptions options_;
|
||||
scoped_ptr<SimulatedClock> clock_;
|
||||
scoped_ptr<MockCpuOveruseObserver> observer_;
|
||||
@ -266,13 +297,42 @@ TEST_F(OveruseFrameDetectorTest, EncodedFrame) {
|
||||
EXPECT_EQ(2, overuse_detector_->AvgEncodeTimeMs());
|
||||
}
|
||||
|
||||
TEST_F(OveruseFrameDetectorTest, InitialEncodeUsage) {
|
||||
EXPECT_EQ(InitialEncodeUsage(), overuse_detector_->EncodeUsagePercent());
|
||||
}
|
||||
|
||||
TEST_F(OveruseFrameDetectorTest, EncodedUsage) {
|
||||
for (int i = 0; i < 30; i++) {
|
||||
overuse_detector_->FrameCaptured(kWidth, kHeight);
|
||||
clock_->AdvanceTimeMilliseconds(5);
|
||||
overuse_detector_->FrameEncoded(5);
|
||||
clock_->AdvanceTimeMilliseconds(33-5);
|
||||
}
|
||||
const int kEncodeTimeMs = 5;
|
||||
InsertAndEncodeFramesWithInterval(
|
||||
1000, kFrameInterval33ms, kWidth, kHeight, kEncodeTimeMs);
|
||||
EXPECT_EQ(15, overuse_detector_->EncodeUsagePercent());
|
||||
}
|
||||
|
||||
TEST_F(OveruseFrameDetectorTest, EncodeUsageResetAfterChangingThreshold) {
|
||||
EXPECT_EQ(InitialEncodeUsage(), overuse_detector_->EncodeUsagePercent());
|
||||
options_.high_encode_usage_threshold_percent = 100;
|
||||
overuse_detector_->SetOptions(options_);
|
||||
EXPECT_EQ(InitialEncodeUsage(), overuse_detector_->EncodeUsagePercent());
|
||||
options_.low_encode_usage_threshold_percent = 20;
|
||||
overuse_detector_->SetOptions(options_);
|
||||
EXPECT_EQ(InitialEncodeUsage(), overuse_detector_->EncodeUsagePercent());
|
||||
}
|
||||
|
||||
TEST_F(OveruseFrameDetectorTest, TriggerOveruseWithEncodeUsage) {
|
||||
options_.enable_capture_jitter_method = false;
|
||||
options_.enable_encode_usage_method = true;
|
||||
overuse_detector_->SetOptions(options_);
|
||||
EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
|
||||
TriggerOveruseWithEncodeUsage(options_.high_threshold_consecutive_count);
|
||||
}
|
||||
|
||||
TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithEncodeUsage) {
|
||||
options_.enable_capture_jitter_method = false;
|
||||
options_.enable_encode_usage_method = true;
|
||||
overuse_detector_->SetOptions(options_);
|
||||
EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
|
||||
TriggerOveruseWithEncodeUsage(options_.high_threshold_consecutive_count);
|
||||
EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1));
|
||||
TriggerNormalUsageWithEncodeUsage();
|
||||
}
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user