| Index: content/renderer/media/remote_media_stream_impl.cc
|
| diff --git a/content/renderer/media/remote_media_stream_impl.cc b/content/renderer/media/remote_media_stream_impl.cc
|
| index 66bdb60821d460328d74c65a2bb76744a013e93a..43b4d6aaa8e8a3993ec39267d6e65354ef503b74 100644
|
| --- a/content/renderer/media/remote_media_stream_impl.cc
|
| +++ b/content/renderer/media/remote_media_stream_impl.cc
|
| @@ -8,8 +8,10 @@
|
|
|
| #include "base/logging.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "content/common/media/media_stream_track_metrics_host_messages.h"
|
| #include "content/renderer/media/media_stream.h"
|
| #include "content/renderer/media/media_stream_dependency_factory.h"
|
| +#include "content/renderer/render_thread_impl.h"
|
| #include "third_party/WebKit/public/platform/WebString.h"
|
|
|
| namespace content {
|
| @@ -41,6 +43,15 @@ class RemoteMediaStreamTrackObserver
|
| DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackObserver);
|
| };
|
|
|
| +// We need an ID that is unique for this observer, within the current
|
| +// renderer process, for the lifetime of the observer object. The
|
| +// simplest approach is to just use the object's pointer value. We
|
| +// store it in a uint64 which will be large enough regardless of
|
| +// platform.
|
| +uint64 MakeUniqueId(RemoteMediaStreamTrackObserver* observer) {
|
| + return reinterpret_cast<uint64>(reinterpret_cast<void*>(observer));
|
| +}
|
| +
|
| } // namespace content
|
|
|
| namespace {
|
| @@ -80,9 +91,21 @@ RemoteMediaStreamTrackObserver::RemoteMediaStreamTrackObserver(
|
| webrtc_track_(webrtc_track),
|
| webkit_track_(webkit_track) {
|
| webrtc_track->RegisterObserver(this);
|
| +
|
| + // We need to mirror the lifetime state for tracks to the browser
|
| + // process so that the duration of tracks can be accurately
|
| + // reported, because of RenderProcessHost::FastShutdownIfPossible,
|
| + // which in many cases will simply kill the renderer process.
|
| + RenderThreadImpl::current()->Send(new MediaStreamTrackMetricsHost_AddTrack(
|
| + MakeUniqueId(this),
|
| + webkit_track_.source().type() == blink::WebMediaStreamSource::TypeAudio,
|
| + true));
|
| }
|
|
|
| RemoteMediaStreamTrackObserver::~RemoteMediaStreamTrackObserver() {
|
| + RenderThreadImpl::current()->Send(new MediaStreamTrackMetricsHost_RemoveTrack(
|
| + MakeUniqueId(this)));
|
| +
|
| webrtc_track_->UnregisterObserver(this);
|
| }
|
|
|
|
|