| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 // The caller is responsible for ensuring that the session outlives the | 60 // The caller is responsible for ensuring that the session outlives the |
| 61 // StatsCollector instance. | 61 // StatsCollector instance. |
| 62 explicit StatsCollector(WebRtcSession* session); | 62 explicit StatsCollector(WebRtcSession* session); |
| 63 virtual ~StatsCollector(); | 63 virtual ~StatsCollector(); |
| 64 | 64 |
| 65 // Adds a MediaStream with tracks that can be used as a |selector| in a call | 65 // Adds a MediaStream with tracks that can be used as a |selector| in a call |
| 66 // to GetStats. | 66 // to GetStats. |
| 67 void AddStream(MediaStreamInterface* stream); | 67 void AddStream(MediaStreamInterface* stream); |
| 68 | 68 |
| 69 // Adds a local audio track that is used for getting some voice statistics. | 69 // Adds a local audio track that is used for getting some voice statistics. |
| 70 void AddLocalAudioTrack(AudioTrackInterface* audio_track, uint32 ssrc); | 70 void AddLocalAudioTrack(AudioTrackInterface* audio_track, uint32_t ssrc); |
| 71 | 71 |
| 72 // Removes a local audio tracks that is used for getting some voice | 72 // Removes a local audio tracks that is used for getting some voice |
| 73 // statistics. | 73 // statistics. |
| 74 void RemoveLocalAudioTrack(AudioTrackInterface* audio_track, uint32 ssrc); | 74 void RemoveLocalAudioTrack(AudioTrackInterface* audio_track, uint32_t ssrc); |
| 75 | 75 |
| 76 // Gather statistics from the session and store them for future use. | 76 // Gather statistics from the session and store them for future use. |
| 77 void UpdateStats(PeerConnectionInterface::StatsOutputLevel level); | 77 void UpdateStats(PeerConnectionInterface::StatsOutputLevel level); |
| 78 | 78 |
| 79 // Gets a StatsReports of the last collected stats. Note that UpdateStats must | 79 // Gets a StatsReports of the last collected stats. Note that UpdateStats must |
| 80 // be called before this function to get the most recent stats. |selector| is | 80 // be called before this function to get the most recent stats. |selector| is |
| 81 // a track label or empty string. The most recent reports are stored in | 81 // a track label or empty string. The most recent reports are stored in |
| 82 // |reports|. | 82 // |reports|. |
| 83 // TODO(tommi): Change this contract to accept a callback object instead | 83 // TODO(tommi): Change this contract to accept a callback object instead |
| 84 // of filling in |reports|. As is, there's a requirement that the caller | 84 // of filling in |reports|. As is, there's a requirement that the caller |
| 85 // uses |reports| immediately without allowing any async activity on | 85 // uses |reports| immediately without allowing any async activity on |
| 86 // the thread (message handling etc) and then discard the results. | 86 // the thread (message handling etc) and then discard the results. |
| 87 void GetStats(MediaStreamTrackInterface* track, | 87 void GetStats(MediaStreamTrackInterface* track, |
| 88 StatsReports* reports); | 88 StatsReports* reports); |
| 89 | 89 |
| 90 // Prepare a local or remote SSRC report for the given ssrc. Used internally | 90 // Prepare a local or remote SSRC report for the given ssrc. Used internally |
| 91 // in the ExtractStatsFromList template. | 91 // in the ExtractStatsFromList template. |
| 92 StatsReport* PrepareReport(bool local, uint32 ssrc, | 92 StatsReport* PrepareReport(bool local, |
| 93 const StatsReport::Id& transport_id, StatsReport::Direction direction); | 93 uint32_t ssrc, |
| 94 const StatsReport::Id& transport_id, |
| 95 StatsReport::Direction direction); |
| 94 | 96 |
| 95 // Method used by the unittest to force a update of stats since UpdateStats() | 97 // Method used by the unittest to force a update of stats since UpdateStats() |
| 96 // that occur less than kMinGatherStatsPeriod number of ms apart will be | 98 // that occur less than kMinGatherStatsPeriod number of ms apart will be |
| 97 // ignored. | 99 // ignored. |
| 98 void ClearUpdateStatsCacheForTest(); | 100 void ClearUpdateStatsCacheForTest(); |
| 99 | 101 |
| 100 private: | 102 private: |
| 101 friend class StatsCollectorTest; | 103 friend class StatsCollectorTest; |
| 102 | 104 |
| 103 // Overridden in unit tests to fake timing. | 105 // Overridden in unit tests to fake timing. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 132 const std::string& id, | 134 const std::string& id, |
| 133 StatsReport::Direction direction); | 135 StatsReport::Direction direction); |
| 134 | 136 |
| 135 // Helper method to get stats from the local audio tracks. | 137 // Helper method to get stats from the local audio tracks. |
| 136 void UpdateStatsFromExistingLocalAudioTracks(); | 138 void UpdateStatsFromExistingLocalAudioTracks(); |
| 137 void UpdateReportFromAudioTrack(AudioTrackInterface* track, | 139 void UpdateReportFromAudioTrack(AudioTrackInterface* track, |
| 138 StatsReport* report); | 140 StatsReport* report); |
| 139 | 141 |
| 140 // Helper method to get the id for the track identified by ssrc. | 142 // Helper method to get the id for the track identified by ssrc. |
| 141 // |direction| tells if the track is for sending or receiving. | 143 // |direction| tells if the track is for sending or receiving. |
| 142 bool GetTrackIdBySsrc(uint32 ssrc, std::string* track_id, | 144 bool GetTrackIdBySsrc(uint32_t ssrc, |
| 145 std::string* track_id, |
| 143 StatsReport::Direction direction); | 146 StatsReport::Direction direction); |
| 144 | 147 |
| 145 // Helper method to update the timestamp of track records. | 148 // Helper method to update the timestamp of track records. |
| 146 void UpdateTrackReports(); | 149 void UpdateTrackReports(); |
| 147 | 150 |
| 148 // A collection for all of our stats reports. | 151 // A collection for all of our stats reports. |
| 149 StatsCollection reports_; | 152 StatsCollection reports_; |
| 150 TrackIdMap track_ids_; | 153 TrackIdMap track_ids_; |
| 151 // Raw pointer to the session the statistics are gathered from. | 154 // Raw pointer to the session the statistics are gathered from. |
| 152 WebRtcSession* const session_; | 155 WebRtcSession* const session_; |
| 153 double stats_gathering_started_; | 156 double stats_gathering_started_; |
| 154 cricket::ProxyTransportMap proxy_to_transport_; | 157 cricket::ProxyTransportMap proxy_to_transport_; |
| 155 | 158 |
| 156 // TODO(tommi): We appear to be holding on to raw pointers to reference | 159 // TODO(tommi): We appear to be holding on to raw pointers to reference |
| 157 // counted objects? We should be using scoped_refptr here. | 160 // counted objects? We should be using scoped_refptr here. |
| 158 typedef std::vector<std::pair<AudioTrackInterface*, uint32> > | 161 typedef std::vector<std::pair<AudioTrackInterface*, uint32_t> > |
| 159 LocalAudioTrackVector; | 162 LocalAudioTrackVector; |
| 160 LocalAudioTrackVector local_audio_tracks_; | 163 LocalAudioTrackVector local_audio_tracks_; |
| 161 }; | 164 }; |
| 162 | 165 |
| 163 } // namespace webrtc | 166 } // namespace webrtc |
| 164 | 167 |
| 165 #endif // TALK_APP_WEBRTC_STATSCOLLECTOR_H_ | 168 #endif // TALK_APP_WEBRTC_STATSCOLLECTOR_H_ |
| OLD | NEW |