Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/media/android/browser_media_player_manager.h" | 5 #include "content/browser/media/android/browser_media_player_manager.h" |
| 6 | 6 |
| 7 #include "base/android/scoped_java_ref.h" | 7 #include "base/android/scoped_java_ref.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/metrics/histogram.h" | |
| 9 #include "content/browser/android/content_view_core_impl.h" | 10 #include "content/browser/android/content_view_core_impl.h" |
| 10 #include "content/browser/media/android/browser_demuxer_android.h" | 11 #include "content/browser/media/android/browser_demuxer_android.h" |
| 11 #include "content/browser/media/android/media_resource_getter_impl.h" | 12 #include "content/browser/media/android/media_resource_getter_impl.h" |
| 12 #include "content/browser/renderer_host/render_view_host_impl.h" | 13 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 13 #include "content/browser/web_contents/web_contents_view_android.h" | 14 #include "content/browser/web_contents/web_contents_view_android.h" |
| 14 #include "content/common/media/media_player_messages_android.h" | 15 #include "content/common/media/media_player_messages_android.h" |
| 15 #include "content/public/browser/android/content_view_core.h" | 16 #include "content/public/browser/android/content_view_core.h" |
| 16 #include "content/public/browser/android/external_video_surface_container.h" | 17 #include "content/public/browser/android/external_video_surface_container.h" |
| 17 #include "content/public/browser/browser_context.h" | 18 #include "content/public/browser/browser_context.h" |
| 18 #include "content/public/browser/content_browser_client.h" | 19 #include "content/public/browser/content_browser_client.h" |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 33 using media::MediaPlayerBridge; | 34 using media::MediaPlayerBridge; |
| 34 using media::MediaPlayerManager; | 35 using media::MediaPlayerManager; |
| 35 using media::MediaSourcePlayer; | 36 using media::MediaSourcePlayer; |
| 36 | 37 |
| 37 namespace content { | 38 namespace content { |
| 38 | 39 |
| 39 // Threshold on the number of media players per renderer before we start | 40 // Threshold on the number of media players per renderer before we start |
| 40 // attempting to release inactive media players. | 41 // attempting to release inactive media players. |
| 41 const int kMediaPlayerThreshold = 1; | 42 const int kMediaPlayerThreshold = 1; |
| 42 | 43 |
| 44 // Number of media types to be recorded. | |
| 45 const int kMaxMediaTypes = 2; | |
| 46 | |
| 43 static BrowserMediaPlayerManager::Factory g_factory = NULL; | 47 static BrowserMediaPlayerManager::Factory g_factory = NULL; |
| 44 static media::MediaUrlInterceptor* media_url_interceptor_ = NULL; | 48 static media::MediaUrlInterceptor* media_url_interceptor_ = NULL; |
| 45 | 49 |
| 50 void RecordMobileMediaType(bool is_media_url) { | |
| 51 UMA_HISTOGRAM_ENUMERATION("Media.Mobile.MediaType", | |
|
Ilya Sherman
2014/08/27 00:31:27
Why not use UMA_HISTOGRAM_BOOLEAN?
qinmin
2014/08/27 17:29:38
Done.
| |
| 52 is_media_url ? 0 : 1, kMaxMediaTypes); | |
| 53 } | |
| 54 | |
| 46 // static | 55 // static |
| 47 void BrowserMediaPlayerManager::RegisterFactory(Factory factory) { | 56 void BrowserMediaPlayerManager::RegisterFactory(Factory factory) { |
| 48 g_factory = factory; | 57 g_factory = factory; |
| 49 } | 58 } |
| 50 | 59 |
| 51 // static | 60 // static |
| 52 void BrowserMediaPlayerManager::RegisterMediaUrlInterceptor( | 61 void BrowserMediaPlayerManager::RegisterMediaUrlInterceptor( |
| 53 media::MediaUrlInterceptor* media_url_interceptor) { | 62 media::MediaUrlInterceptor* media_url_interceptor) { |
| 54 media_url_interceptor_ = media_url_interceptor; | 63 media_url_interceptor_ = media_url_interceptor; |
| 55 } | 64 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 // May reach here due to prerendering. Don't extract the metadata | 105 // May reach here due to prerendering. Don't extract the metadata |
| 97 // since it is expensive. | 106 // since it is expensive. |
| 98 // TODO(qinmin): extract the metadata once the user decided to load | 107 // TODO(qinmin): extract the metadata once the user decided to load |
| 99 // the page. | 108 // the page. |
| 100 browser_media_player_manager->OnMediaMetadataChanged( | 109 browser_media_player_manager->OnMediaMetadataChanged( |
| 101 media_player_params.player_id, base::TimeDelta(), 0, 0, false); | 110 media_player_params.player_id, base::TimeDelta(), 0, 0, false); |
| 102 } else if (!content_view_core_impl->ShouldBlockMediaRequest( | 111 } else if (!content_view_core_impl->ShouldBlockMediaRequest( |
| 103 media_player_params.url)) { | 112 media_player_params.url)) { |
| 104 media_player_bridge->Initialize(); | 113 media_player_bridge->Initialize(); |
| 105 } | 114 } |
| 115 std::string path = media_player_params.url.path(); | |
| 116 bool is_hls_media = EndsWith(path, ".m3u8", true) || | |
| 117 EndsWith(path, ".m3u", true); | |
| 118 UMA_HISTOGRAM_BOOLEAN("Media.Mobile.IsHttpLiveStreamingMedia", | |
| 119 is_hls_media); | |
| 120 RecordMobileMediaType(true); | |
| 106 return media_player_bridge; | 121 return media_player_bridge; |
| 107 } | 122 } |
| 108 | 123 |
| 109 case MEDIA_PLAYER_TYPE_MEDIA_SOURCE: { | 124 case MEDIA_PLAYER_TYPE_MEDIA_SOURCE: { |
| 125 RecordMobileMediaType(false); | |
| 110 return new MediaSourcePlayer( | 126 return new MediaSourcePlayer( |
| 111 media_player_params.player_id, | 127 media_player_params.player_id, |
| 112 manager, | 128 manager, |
| 113 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, | 129 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, |
| 114 weak_ptr_factory_.GetWeakPtr()), | 130 weak_ptr_factory_.GetWeakPtr()), |
| 115 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased, | 131 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased, |
| 116 weak_ptr_factory_.GetWeakPtr()), | 132 weak_ptr_factory_.GetWeakPtr()), |
| 117 demuxer->CreateDemuxer(media_player_params.demuxer_client_id), | 133 demuxer->CreateDemuxer(media_player_params.demuxer_client_id), |
| 118 media_player_params.frame_url); | 134 media_player_params.frame_url); |
| 119 } | 135 } |
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 586 #if defined(VIDEO_HOLE) | 602 #if defined(VIDEO_HOLE) |
| 587 MediaPlayerAndroid* player = GetPlayer(player_id); | 603 MediaPlayerAndroid* player = GetPlayer(player_id); |
| 588 if (player && player->IsSurfaceInUse()) | 604 if (player && player->IsSurfaceInUse()) |
| 589 return; | 605 return; |
| 590 if (external_video_surface_container_) | 606 if (external_video_surface_container_) |
| 591 external_video_surface_container_->ReleaseExternalVideoSurface(player_id); | 607 external_video_surface_container_->ReleaseExternalVideoSurface(player_id); |
| 592 #endif // defined(VIDEO_HOLE) | 608 #endif // defined(VIDEO_HOLE) |
| 593 } | 609 } |
| 594 | 610 |
| 595 } // namespace content | 611 } // namespace content |
| OLD | NEW |