131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org/* 231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * 431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * Use of this source code is governed by a BSD-style license 531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * that can be found in the LICENSE file in the root of the source 631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * tree. An additional intellectual property rights grant can be found 731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * in the file PATENTS. All contributing project authors may 831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * be found in the AUTHORS file in the root of the source tree. 931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org */ 1031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include <math.h> 1231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 1431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include "webrtc/voice_engine/network_predictor.h" 1531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include "webrtc/system_wrappers/interface/clock.h" 1631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgnamespace webrtc { 1831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgnamespace voe { 1931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 2031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgclass TestNetworkPredictor : public ::testing::Test { 2131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org protected: 2231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org TestNetworkPredictor() 2331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org : clock_(0), 2431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org network_predictor_(new NetworkPredictor(&clock_)) {} 2531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org SimulatedClock clock_; 2631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org scoped_ptr<NetworkPredictor> network_predictor_; 2731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org}; 2831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 2931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgTEST_F(TestNetworkPredictor, TestPacketLossRateFilter) { 3031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // Test initial packet loss rate estimate is 0. 3131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_EQ(0, network_predictor_->GetLossRate()); 3231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org network_predictor_->UpdatePacketLossRate(32); 3331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // First time, no filtering. 3431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_EQ(32, network_predictor_->GetLossRate()); 3531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org clock_.AdvanceTimeMilliseconds(1000); 3631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org network_predictor_->UpdatePacketLossRate(40); 3731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org float exp = pow(0.9999f, 1000); 3831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org float value = 32.0f * exp + (1 - exp) * 40.0f; 3931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org EXPECT_EQ(static_cast<uint8_t>(value + 0.5f), 4031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org network_predictor_->GetLossRate()); 4131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 4231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} // namespace voe 4331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} // namespace webrtc 44