1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Refactor ISrsKbpsDelta

This commit is contained in:
winlin 2019-01-01 17:36:27 +08:00
parent dcebf8a31f
commit 6234905532
13 changed files with 146 additions and 159 deletions

View file

@ -31,7 +31,7 @@
class SrsWallClock;
/**
* a kbps sample, for example, 1minute kbps,
* a kbps sample, for example, the kbps at time,
* 10minute kbps sample.
*/
class SrsKbpsSample
@ -97,7 +97,7 @@ public:
SrsKbpsSlice(SrsWallClock* clk);
virtual ~SrsKbpsSlice();
public:
// Get current total bytes, not depend on sample().
// Get current total bytes, it doesn't depend on sample().
virtual int64_t get_total_bytes();
// Resample the slice to calculate the kbps.
virtual void sample();
@ -106,30 +106,21 @@ public:
/**
* the interface which provices delta of bytes.
* for a delta, for example, a live stream connection, we can got the delta by:
* IKbpsDelta* delta = ...;
* delta->resample();
* kbps->add_delta(delta);
* delta->cleanup();
* ISrsKbpsDelta* delta = ...;
* int64_t in, out;
* delta->remark(&in, &out);
* kbps->add_delta(in, out);
*/
class IKbpsDelta
class ISrsKbpsDelta
{
public:
IKbpsDelta();
virtual ~IKbpsDelta();
ISrsKbpsDelta();
virtual ~ISrsKbpsDelta();
public:
/**
* resample to generate the value of delta bytes.
*/
virtual void resample() = 0;
/**
* get the send or recv bytes delta.
*/
virtual int64_t get_send_bytes_delta() = 0;
virtual int64_t get_recv_bytes_delta() = 0;
/**
* cleanup the value of delta bytes.
*/
virtual void cleanup() = 0;
virtual void remark(int64_t* in, int64_t* out) = 0;
};
/**
@ -161,19 +152,19 @@ public:
* SrsKbps* kbps = ...;
* kbps->set_io(NULL, NULL)
* for each connection in connections:
* IKbpsDelta* delta = connection; // where connection implements IKbpsDelta
* delta->resample()
* kbps->add_delta(delta)
* delta->cleanup()
* ISrsKbpsDelta* delta = connection; // where connection implements ISrsKbpsDelta
* int64_t in, out;
* delta->remark(&in, &out)
* kbps->add_delta(in, out)
* kbps->sample()
* kbps->get_xxx_kbps().
* 3. kbps used as IKbpsDelta, to provides delta bytes:
* 3. kbps used as ISrsKbpsDelta, to provides delta bytes:
* SrsKbps* kbps = ...;
* kbps->set_io(in, out);
* IKbpsDelta* delta = (IKbpsDelta*)kbps;
* delta->resample();
* printf("delta is %d/%d", delta->get_send_bytes_delta(), delta->get_recv_bytes_delta());
* delta->cleanup();
* ISrsKbpsDelta* delta = (ISrsKbpsDelta*)kbps;
* int64_t in, out;
* delta->remark(&in, out);
* printf("delta is %d/%d", in, out);
* 4. kbps used as ISrsProtocolStatistic, to provides raw bytes:
* SrsKbps* kbps = ...;
* kbps->set_io(in, out);
@ -183,7 +174,7 @@ public:
* user->set_io(kbps, kbps);
* the server never know how many bytes already send/recv, for the connection maybe closed.
*/
class SrsKbps : virtual public ISrsProtocolStatistic, virtual public IKbpsDelta
class SrsKbps : virtual public ISrsProtocolStatistic, virtual public ISrsKbpsDelta
{
private:
SrsKbpsSlice is;
@ -226,7 +217,7 @@ public:
* @remark user must invoke sample() to calc result after invoke this method.
* @param delta, assert should never be NULL.
*/
virtual void add_delta(IKbpsDelta* delta);
virtual void add_delta(int64_t in, int64_t out);
/**
* resample all samples, ignore if in/out is NULL.
* used for user to calc the kbps, to sample new kbps value.
@ -238,12 +229,9 @@ public:
public:
virtual int64_t get_send_bytes();
virtual int64_t get_recv_bytes();
// interface IKbpsDelta
// interface ISrsKbpsDelta
public:
virtual void resample();
virtual int64_t get_send_bytes_delta();
virtual int64_t get_recv_bytes_delta();
virtual void cleanup();
virtual void remark(int64_t* in, int64_t* out);
// interface ISrsMemorySizer
public:
virtual int size_memory();