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 |