1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_H_ 6#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_H_ 7 8#include <map> 9#include <string> 10 11#include "base/time/time.h" 12#include "content/public/browser/browser_message_filter.h" 13 14namespace content { 15 16// Responsible for logging metrics about audio and video track 17// lifetimes. These are based on messages from the renderer that are 18// sent when tracks are created and destroyed. Unfortunately we can't 19// reliably log the lifetime metric in the renderer because that 20// process may be destroyed at any time by the fast shutdown path (see 21// RenderProcessHost::FastShutdownIfPossible). 22// 23// There is one instance of this class per render process. 24// 25// If the renderer process goes away without sending messages that 26// tracks were removed, this class instead infers that the tracks were 27// removed. 28class MediaStreamTrackMetricsHost 29 : public BrowserMessageFilter { 30 public: 31 explicit MediaStreamTrackMetricsHost(); 32 33 protected: 34 virtual ~MediaStreamTrackMetricsHost(); 35 36 // BrowserMessageFilter override. 37 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 38 39 private: 40 void OnAddTrack(uint64 id, bool is_audio, bool is_remote); 41 void OnRemoveTrack(uint64 id); 42 43 // Information for a track we're keeping in |tracks_|. |is_audio| 44 // specifies whether it's an audio or video track, |is_remote| 45 // specifies whether it's remote (received over a PeerConnection) or 46 // local (sent over a PeerConnection). |timestamp| specifies when 47 // the track was connected. 48 struct TrackInfo { 49 bool is_audio; 50 bool is_remote; 51 base::TimeTicks timestamp; 52 }; 53 54 void ReportDuration(const TrackInfo& info); 55 56 // Values are unique (per renderer) track IDs. 57 typedef std::map<uint64, TrackInfo> TrackMap; 58 TrackMap tracks_; 59}; 60 61} // namespace content 62 63#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_H_ 64