diff options
author | mflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-11-16 13:57:26 +0000 |
---|---|---|
committer | mflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-11-16 13:57:26 +0000 |
commit | e296783ae1fd7fa8a52582c8bb63a570e625532a (patch) | |
tree | b332caaeeccfb9d48dcf60db1599f6509ce194f4 /video_engine/call_stats.h | |
parent | e6527c12c79d4506c5a45ac1e73498ee51b34e9f (diff) | |
download | webrtc-e296783ae1fd7fa8a52582c8bb63a570e625532a.tar.gz |
Adding ViE CallStats to keep track of call statistics. As a start, only rtt is handled.
This CL will be followed by another CL connecting the dots.
BUG=769
TEST=New unittest added.
Review URL: https://webrtc-codereview.appspot.com/968006
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@3117 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'video_engine/call_stats.h')
-rw-r--r-- | video_engine/call_stats.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/video_engine/call_stats.h b/video_engine/call_stats.h new file mode 100644 index 00000000..14619f1e --- /dev/null +++ b/video_engine/call_stats.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2012 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_VIDEO_ENGINE_CALL_STATS_H_ +#define WEBRTC_VIDEO_ENGINE_CALL_STATS_H_ + +#include <list> + +#include "webrtc/modules/interface/module.h" +#include "webrtc/system_wrappers/interface/constructor_magic.h" +#include "webrtc/system_wrappers/interface/scoped_ptr.h" + +namespace webrtc { + +class CriticalSectionWrapper; +class RtcpRttObserver; + +// Interface used to distribute call statistics. Callbacks will be triggered as +// soon as the class has been registered using RegisterStatsObserver. +class StatsObserver { + public: + virtual void OnRttUpdate(uint32_t rtt) = 0; + + virtual ~StatsObserver() {} +}; + +// CallStats keeps track of statistics for a call. +class CallStats : public Module { + public: + friend class RtcpObserver; + + CallStats(); + ~CallStats(); + + // Implements Module, to use the process thread. + virtual int32_t TimeUntilNextProcess(); + virtual int32_t Process(); + + // Returns a RtcpRttObserver to register at a statistics provider. The object + // has the same lifetime as the CallStats instance. + RtcpRttObserver* rtcp_rtt_observer() const; + + // Registers/deregisters a new observer to receive statistics updates. + void RegisterStatsObserver(StatsObserver* observer); + void DeregisterStatsObserver(StatsObserver* observer); + + protected: + void OnRttUpdate(uint32_t rtt); + + private: + // Helper struct keeping track of the time a rtt value is reported. + struct RttTime { + RttTime(uint32_t new_rtt, int64_t rtt_time) + : rtt(new_rtt), time(rtt_time) {} + const uint32_t rtt; + const int64_t time; + }; + + // Protecting all members. + scoped_ptr<CriticalSectionWrapper> crit_; + // Observer receiving statistics updates. + scoped_ptr<RtcpRttObserver> rtcp_rtt_observer_; + // The last time 'Process' resulted in statistic update. + int64_t last_process_time_; + + // All Rtt reports within valid time interval, oldest first. + std::list<RttTime> reports_; + + // Observers getting stats reports. + std::list<StatsObserver*> observers_; + + DISALLOW_COPY_AND_ASSIGN(CallStats); +}; + +} // namespace webrtc + +#endif // WEBRTC_VIDEO_ENGINE_CALL_STATS_H_ |