Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(555)

Side by Side Diff: content/browser/media/android/media_player_renderer.cc

Issue 2471903002: Add MediaServiceThrottler (Closed)
Patch Set: Release resources after 1 min. +2 UTS. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/media_player_renderer.h" 5 #include "content/browser/media/android/media_player_renderer.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/callback_helpers.h"
9 #include "content/browser/android/scoped_surface_request_manager.h" 10 #include "content/browser/android/scoped_surface_request_manager.h"
10 #include "content/browser/media/android/media_resource_getter_impl.h" 11 #include "content/browser/media/android/media_resource_getter_impl.h"
11 #include "content/public/browser/browser_context.h" 12 #include "content/public/browser/browser_context.h"
12 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/render_process_host.h" 14 #include "content/public/browser/render_process_host.h"
14 #include "content/public/browser/storage_partition.h" 15 #include "content/public/browser/storage_partition.h"
15 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
16 #include "content/public/common/content_client.h" 17 #include "content/public/common/content_client.h"
18 #include "media/base/android/media_service_throttler.h"
17 19
18 // TODO(tguilbert): Remove this ID once MediaPlayerManager has been deleted 20 // TODO(tguilbert): Remove this ID once MediaPlayerManager has been deleted
19 // and MediaPlayerBridge updated. See comment in header file. 21 // and MediaPlayerBridge updated. See comment in header file.
20 constexpr int kUnusedAndIrrelevantPlayerId = 0; 22 constexpr int kUnusedAndIrrelevantPlayerId = 0;
21 23
22 namespace content { 24 namespace content {
23 25
24 MediaPlayerRenderer::MediaPlayerRenderer(RenderFrameHost* render_frame_host) 26 MediaPlayerRenderer::MediaPlayerRenderer(RenderFrameHost* render_frame_host)
25 : render_frame_host_(render_frame_host), 27 : render_frame_host_(render_frame_host),
26 has_error_(false), 28 has_error_(false),
27 weak_factory_(this) {} 29 weak_factory_(this) {}
28 30
29 MediaPlayerRenderer::~MediaPlayerRenderer() { 31 MediaPlayerRenderer::~MediaPlayerRenderer() {
30 CancelScopedSurfaceRequest(); 32 CancelScopedSurfaceRequest();
31 } 33 }
32 34
33 void MediaPlayerRenderer::Initialize( 35 void MediaPlayerRenderer::Initialize(
34 media::DemuxerStreamProvider* demuxer_stream_provider, 36 media::DemuxerStreamProvider* demuxer_stream_provider,
35 media::RendererClient* client, 37 media::RendererClient* client,
36 const media::PipelineStatusCB& init_cb) { 38 const media::PipelineStatusCB& init_cb) {
37 DVLOG(1) << __func__; 39 DVLOG(1) << __func__;
40
41 DCHECK_CURRENTLY_ON(BrowserThread::UI);
42 DCHECK(!pending_init_cb_);
43
44 renderer_client_ = client;
45
38 if (demuxer_stream_provider->GetType() != 46 if (demuxer_stream_provider->GetType() !=
39 media::DemuxerStreamProvider::Type::URL) { 47 media::DemuxerStreamProvider::Type::URL) {
40 DLOG(ERROR) << "DemuxerStreamProvider is not of Type URL"; 48 DLOG(ERROR) << "DemuxerStreamProvider is not of Type URL";
41 init_cb.Run(media::PIPELINE_ERROR_INITIALIZATION_FAILED); 49 init_cb.Run(media::PIPELINE_ERROR_INITIALIZATION_FAILED);
42 return; 50 return;
43 } 51 }
44 52
45 media::MediaUrlParams url_params = 53 pending_init_cb_ = init_cb;
DaleCurtis 2016/11/11 23:32:15 Bind it into CreateMediaPlayer instead?
tguilbert 2016/11/14 23:18:07 Done.
46 demuxer_stream_provider->GetMediaUrlParams(); 54
47 renderer_client_ = client; 55 base::TimeDelta creation_delay =
56 media::MediaServiceThrottler::GetInstance()->GetDelayForClientCreation();
57
58 if (creation_delay.is_zero()) {
59 CreateUnderlyingMediaPlayer(demuxer_stream_provider->GetMediaUrlParams());
60 return;
61 }
62
63 BrowserThread::PostDelayedTask(
64 BrowserThread::UI, FROM_HERE,
65 base::Bind(&MediaPlayerRenderer::CreateUnderlyingMediaPlayer,
66 weak_factory_.GetWeakPtr(),
67 demuxer_stream_provider->GetMediaUrlParams()),
68 creation_delay);
69 }
70
71 void MediaPlayerRenderer::CreateUnderlyingMediaPlayer(
72 const media::MediaUrlParams& url_params) {
73 DCHECK_CURRENTLY_ON(BrowserThread::UI);
74 DCHECK(pending_init_cb_);
48 75
49 const std::string user_agent = GetContentClient()->GetUserAgent(); 76 const std::string user_agent = GetContentClient()->GetUserAgent();
50 77
51 media_player_.reset(new media::MediaPlayerBridge( 78 media_player_.reset(new media::MediaPlayerBridge(
52 kUnusedAndIrrelevantPlayerId, url_params.media_url, 79 kUnusedAndIrrelevantPlayerId, url_params.media_url,
53 url_params.first_party_for_cookies, user_agent, 80 url_params.first_party_for_cookies, user_agent,
54 false, // hide_url_log 81 false, // hide_url_log
55 this, base::Bind(&MediaPlayerRenderer::OnDecoderResourcesReleased, 82 this, base::Bind(&MediaPlayerRenderer::OnDecoderResourcesReleased,
56 weak_factory_.GetWeakPtr()), 83 weak_factory_.GetWeakPtr()),
57 GURL(), // frame_url 84 GURL(), // frame_url
58 true)); // allow_crendentials 85 true)); // allow_crendentials
59 86
60 media_player_->Initialize(); 87 media_player_->Initialize();
61 init_cb.Run(media::PIPELINE_OK); 88 base::ResetAndReturn(&pending_init_cb_).Run(media::PIPELINE_OK);
62 } 89 }
63 90
64 void MediaPlayerRenderer::SetCdm(media::CdmContext* cdm_context, 91 void MediaPlayerRenderer::SetCdm(media::CdmContext* cdm_context,
65 const media::CdmAttachedCB& cdm_attached_cb) { 92 const media::CdmAttachedCB& cdm_attached_cb) {
66 NOTREACHED(); 93 NOTREACHED();
67 } 94 }
68 95
69 void MediaPlayerRenderer::Flush(const base::Closure& flush_cb) { 96 void MediaPlayerRenderer::Flush(const base::Closure& flush_cb) {
70 DVLOG(3) << __func__; 97 DVLOG(3) << __func__;
71 flush_cb.Run(); 98 flush_cb.Run();
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 void MediaPlayerRenderer::CancelScopedSurfaceRequest() { 272 void MediaPlayerRenderer::CancelScopedSurfaceRequest() {
246 if (!surface_request_token_) 273 if (!surface_request_token_)
247 return; 274 return;
248 275
249 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest( 276 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest(
250 surface_request_token_); 277 surface_request_token_);
251 surface_request_token_ = base::UnguessableToken(); 278 surface_request_token_ = base::UnguessableToken();
252 } 279 }
253 280
254 } // namespace content 281 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698