diff options
Diffstat (limited to 'chromium/content/renderer/media/webrtc/media_stream_track_metrics.h')
-rw-r--r-- | chromium/content/renderer/media/webrtc/media_stream_track_metrics.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/chromium/content/renderer/media/webrtc/media_stream_track_metrics.h b/chromium/content/renderer/media/webrtc/media_stream_track_metrics.h new file mode 100644 index 00000000000..aaf669d0d0c --- /dev/null +++ b/chromium/content/renderer/media/webrtc/media_stream_track_metrics.h @@ -0,0 +1,101 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_MEDIA_STREAM_TRACK_METRICS_H_ +#define CONTENT_RENDERER_MEDIA_WEBRTC_MEDIA_STREAM_TRACK_METRICS_H_ + +#include "base/basictypes.h" +#include "base/memory/scoped_vector.h" +#include "base/threading/non_thread_safe.h" +#include "content/common/content_export.h" +#include "third_party/libjingle/source/talk/app/webrtc/peerconnectioninterface.h" + +namespace webrtc { +class MediaStreamInterface; +class MediaStreamTrackInterface; +} + +namespace content { + +class MediaStreamTrackMetricsObserver; +class RTCPeerConnectionHandler; + +// Responsible for observing the connected lifetimes of tracks going +// over a PeerConnection, and sending messages to the browser process +// about lifetime events. +// +// There should be exactly one of these objects owned by each +// RTCPeerConnectionHandler, and its lifetime should match the +// lifetime of its owner. +class CONTENT_EXPORT MediaStreamTrackMetrics : public base::NonThreadSafe { + public: + explicit MediaStreamTrackMetrics(); + ~MediaStreamTrackMetrics(); + + enum StreamType { SENT_STREAM, RECEIVED_STREAM }; + + enum TrackType { AUDIO_TRACK, VIDEO_TRACK }; + + enum LifetimeEvent { CONNECTED, DISCONNECTED }; + + // Starts tracking lifetimes of all the tracks in |stream| and any + // tracks added or removed to/from the stream until |RemoveStream| + // is called or this object's lifetime ends. + void AddStream(StreamType type, webrtc::MediaStreamInterface* stream); + + // Stops tracking lifetimes of tracks in |stream|. + void RemoveStream(StreamType type, webrtc::MediaStreamInterface* stream); + + // Called to indicate changes in the ICE connection state for the + // PeerConnection this object is associated with. Used to generate + // the connected/disconnected lifetime events for these tracks. + void IceConnectionChange( + webrtc::PeerConnectionInterface::IceConnectionState new_state); + + // Send a lifetime message to the browser process. Virtual so that + // it can be overridden in unit tests. + // + // |track_id| is the ID of the track that just got connected or + // disconnected. + // + // |is_audio| is true for an audio track, false for a video track. + // + // |start_lifetime| is true to indicate that it just got connected, + // false to indicate it is no longer connected. + // + // |is_remote| is true for remote streams (received over a + // PeerConnection), false for local streams (sent over a + // PeerConnection). + virtual void SendLifetimeMessage(const std::string& track_id, + TrackType track_type, + LifetimeEvent lifetime_event, + StreamType stream_type); + + protected: + // Calls SendLifetimeMessage for |observer| depending on |ice_state_|. + void SendLifeTimeMessageDependingOnIceState( + MediaStreamTrackMetricsObserver* observer); + + // Implements MakeUniqueId. |pc_id| is a cast of this object's + // |this| pointer to a 64-bit integer, which is usable as a unique + // ID for the PeerConnection this object is attached to (since there + // is a one-to-one relationship). + uint64 MakeUniqueIdImpl(uint64 pc_id, + const std::string& track, + StreamType stream_type); + + private: + // Make a unique ID for the given track, that is valid while the + // track object and the PeerConnection it is attached to both exist. + uint64 MakeUniqueId(const std::string& track, StreamType stream_type); + + typedef ScopedVector<MediaStreamTrackMetricsObserver> ObserverVector; + ObserverVector observers_; + + webrtc::PeerConnectionInterface::IceConnectionState ice_state_; +}; + +} // namespace + +#endif // CONTENT_RENDERER_MEDIA_WEBRTC_MEDIA_STREAM_TRACK_METRICS_H_ |