66 lines
1.5 KiB
C++
66 lines
1.5 KiB
C++
/*
|
||
* Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved.
|
||
*
|
||
* This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit).
|
||
*
|
||
* Use of this source code is governed by MIT license that can be found in the
|
||
* LICENSE file in the root of the source tree. All contributing project authors
|
||
* may be found in the AUTHORS file in the root of the source tree.
|
||
*/
|
||
|
||
#ifndef SPEED_STATISTIC_H_
|
||
#define SPEED_STATISTIC_H_
|
||
|
||
#include "TimeTicker.h"
|
||
|
||
namespace toolkit {
|
||
|
||
class BytesSpeed {
|
||
public:
|
||
BytesSpeed() = default;
|
||
~BytesSpeed() = default;
|
||
|
||
/**
|
||
* 添加统计字节
|
||
*/
|
||
BytesSpeed &operator+=(size_t bytes) {
|
||
_bytes += bytes;
|
||
if (_bytes > 1024 * 1024) {
|
||
//数据大于1MB就计算一次网速
|
||
computeSpeed();
|
||
}
|
||
return *this;
|
||
}
|
||
|
||
/**
|
||
* 获取速度,单位bytes/s
|
||
*/
|
||
int getSpeed() {
|
||
if (_ticker.elapsedTime() < 1000) {
|
||
//获取频率小于1秒,那么返回上次计算结果
|
||
return _speed;
|
||
}
|
||
return computeSpeed();
|
||
}
|
||
|
||
private:
|
||
int computeSpeed() {
|
||
auto elapsed = _ticker.elapsedTime();
|
||
if (!elapsed) {
|
||
return _speed;
|
||
}
|
||
_speed = (int)(_bytes * 1000 / elapsed);
|
||
_ticker.resetTime();
|
||
_bytes = 0;
|
||
return _speed;
|
||
}
|
||
|
||
private:
|
||
int _speed = 0;
|
||
size_t _bytes = 0;
|
||
Ticker _ticker;
|
||
};
|
||
|
||
} /* namespace toolkit */
|
||
#endif /* SPEED_STATISTIC_H_ */
|