/* * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETESTBASE_H_ #define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETESTBASE_H_ #include #include #include "typedefs.h" #include "TestSenderReceiver.h" class StatVec : public std::vector { public: double Mean(); double Variance(); double Std(); double Max(); double Min(); double Median(); double Percentile(double p); // 0 <= p <= 100% void Export(std::fstream &file, bool colVec = false); }; class BWETest : public SendRecCB { public: BWETest(std::string testName, int startRateKbps); virtual ~BWETest(); bool SetMaster(bool isMaster = true); void UseRecvTimeout() { _sendrec->SetPacketTimeout(1000); }; virtual int Init(std::string ip, WebRtc_UWord16 port); virtual bool Start(); virtual bool Stop(); bool ProcLoop(void); virtual void Report(std::fstream &log); std::string TestName() { return (_testName); }; // SenderReceiver callback virtual void OnOnNetworkChanged(const WebRtc_UWord32 bitrateTargetBps, const WebRtc_UWord8 fractionLost, const WebRtc_UWord16 roundTripTimeMs, const WebRtc_UWord32 jitterMS, const WebRtc_UWord16 bwEstimateKbitMin, const WebRtc_UWord16 bwEstimateKbitMax); protected: virtual bool StoppingCriterionMaster() = 0; virtual bool StoppingCriterionSlave() { return (_sendrec->timeOutTriggered()); }; TestSenderReceiver * _sendrec; TestLoadGenerator * _gen; std::string _testName; int _startRateKbps; bool _master; bool _initialized; bool _started; bool _running; EventWrapper *_eventPtr; ThreadWrapper* _procThread; WebRtc_Word64 _startTimeMs; WebRtc_Word64 _stopTimeMs; // Statistics, protected by separate CritSect CriticalSectionWrapper& _statCritSect; StatVec _rateVecKbps; StatVec _rttVecMs; StatVec _lossVec; }; class BWEOneWayTest : public BWETest { public: BWEOneWayTest(std::string testName, int startRateKbps) : BWETest(testName, startRateKbps) {}; virtual int Init(std::string ip, WebRtc_UWord16 port); virtual bool Start(); protected: virtual bool StoppingCriterionSlave() {return ( _sendrec->timeOutTriggered()); }; private: }; #endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETESTBASE_H_