This source file includes following definitions.
- OnMessageReceived
- OnAddTrack
- OnRemoveTrack
- ReportDuration
#include "content/browser/renderer_host/media/media_stream_track_metrics_host.h"
#include "base/metrics/histogram.h"
#include "content/common/media/media_stream_track_metrics_host_messages.h"
#define UMA_HISTOGRAM_TIMES_16H(name, sample) \
UMA_HISTOGRAM_CUSTOM_TIMES(name, sample, \
base::TimeDelta::FromMilliseconds(100), \
base::TimeDelta::FromHours(16), \
50);
namespace content {
MediaStreamTrackMetricsHost::MediaStreamTrackMetricsHost()
: BrowserMessageFilter(MediaStreamTrackMetricsHostMsgStart) {
}
MediaStreamTrackMetricsHost::~MediaStreamTrackMetricsHost() {
for (TrackMap::iterator it = tracks_.begin();
it != tracks_.end();
++it) {
TrackInfo& info = it->second;
ReportDuration(info);
}
tracks_.clear();
}
bool MediaStreamTrackMetricsHost::OnMessageReceived(
const IPC::Message& message,
bool* message_was_ok) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP_EX(MediaStreamTrackMetricsHost,
message,
*message_was_ok)
IPC_MESSAGE_HANDLER(MediaStreamTrackMetricsHost_AddTrack, OnAddTrack)
IPC_MESSAGE_HANDLER(MediaStreamTrackMetricsHost_RemoveTrack, OnRemoveTrack)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
return handled;
}
void MediaStreamTrackMetricsHost::OnAddTrack(uint64 id,
bool is_audio,
bool is_remote) {
DCHECK(tracks_.find(id) == tracks_.end());
TrackInfo info = {is_audio, is_remote, base::TimeTicks::Now()};
tracks_[id] = info;
}
void MediaStreamTrackMetricsHost::OnRemoveTrack(uint64 id) {
DCHECK(tracks_.find(id) != tracks_.end());
TrackInfo& info = tracks_[id];
ReportDuration(info);
tracks_.erase(id);
}
void MediaStreamTrackMetricsHost::ReportDuration(const TrackInfo& info) {
base::TimeDelta duration = base::TimeTicks::Now() - info.timestamp;
if (info.is_remote) {
if (info.is_audio) {
DVLOG(3) << "WebRTC.ReceivedAudioTrackDuration: " << duration.InSeconds();
UMA_HISTOGRAM_TIMES_16H("WebRTC.ReceivedAudioTrackDuration", duration);
} else {
DVLOG(3) << "WebRTC.ReceivedVideoTrackDuration: " << duration.InSeconds();
UMA_HISTOGRAM_TIMES_16H("WebRTC.ReceivedVideoTrackDuration", duration);
}
} else {
if (info.is_audio) {
DVLOG(3) << "WebRTC.SentAudioTrackDuration: " << duration.InSeconds();
UMA_HISTOGRAM_TIMES_16H("WebRTC.SentAudioTrackDuration", duration);
} else {
DVLOG(3) << "WebRTC.SentVideoTrackDuration: " << duration.InSeconds();
UMA_HISTOGRAM_TIMES_16H("WebRTC.SentVideoTrackDuration", duration);
}
}
}
}