rate-estimator.cc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:1k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #include "rate-estimator.h"
  2. #include <math.h>
  3. RateEstimator::RateEstimator(): k_(0.1), estRate_(0.0), bytesArr_(0.0), temp_size_(0) {
  4.   prevTime_ = Scheduler::instance().clock();
  5.   reset_time_ = Scheduler::instance().clock();
  6. }
  7. RateEstimator::RateEstimator(double estimate): k_(0.1), bytesArr_(0.0), temp_size_(0) {
  8.   prevTime_ = Scheduler::instance().clock();
  9.   reset_time_ = Scheduler::instance().clock();
  10.   estRate_ = estimate;
  11. }
  12. void
  13. RateEstimator::estimateRate(Packet * pkt) {
  14.   hdr_cmn* hdr  = HDR_CMN(pkt);
  15.   bytesArr_+= hdr->size();
  16.   int pktSize   = hdr->size() << 3; /* length of the packet in bits */
  17.   
  18.   double now = Scheduler::instance().clock();
  19.   double timeGap = ( now - prevTime_);
  20.   if (timeGap == 0) {
  21.     temp_size_ += pktSize;
  22.     return;
  23.   }
  24.   else {
  25.     pktSize+= temp_size_;
  26.     temp_size_ = 0;
  27.   }
  28.   prevTime_ = now;
  29.   estRate_ = (1 - exp(-timeGap/k_))*((double)pktSize)/timeGap + exp(-timeGap/k_)*estRate_;
  30. }
  31.   
  32. void
  33. RateEstimator::reset() {
  34.   reset_time_ = Scheduler::instance().clock();
  35.   bytesArr_ = 0;
  36. //shoule the rate estimate be reset?
  37.   //  estRate_=0.0;
  38.   //  prevTime_= Scheduler::instance().clock();
  39.   // temp_size_=0;
  40. }