summaryrefslogtreecommitdiff
path: root/video_engine/call_stats.h
diff options
context:
space:
mode:
authormflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2012-11-16 13:57:26 +0000
committermflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2012-11-16 13:57:26 +0000
commite296783ae1fd7fa8a52582c8bb63a570e625532a (patch)
treeb332caaeeccfb9d48dcf60db1599f6509ce194f4 /video_engine/call_stats.h
parente6527c12c79d4506c5a45ac1e73498ee51b34e9f (diff)
downloadwebrtc-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.h84
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_