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

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

Issue 2471903002: Add MediaServiceThrottler (Closed)
Patch Set: Integrate throttler into MediaPlayerRender 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 pending_init_cb_ = init_cb;
46
47 BrowserThread::PostDelayedTask(
DaleCurtis 2016/11/08 22:35:40 Worth skipping post if it's schedule == 0?
tguilbert 2016/11/11 03:50:28 Done.
48 BrowserThread::UI, FROM_HERE,
49 base::Bind(&MediaPlayerRenderer::InitializeInternal,
50 weak_factory_.GetWeakPtr(), demuxer_stream_provider),
51 media::MediaServiceThrottler::GetInstance()->ScheduleClientCreation());
52 }
53
54 void MediaPlayerRenderer::InitializeInternal(
sandersd (OOO until July 31) 2016/11/08 22:53:44 Rename to make the purpose more clear. Load() may
tguilbert 2016/11/11 03:50:28 I went with an (overly?) explicit name... LMK if y
55 media::DemuxerStreamProvider* demuxer_stream_provider) {
56 DCHECK_CURRENTLY_ON(BrowserThread::UI);
57 DCHECK(pending_init_cb_);
58
38 if (demuxer_stream_provider->GetType() != 59 if (demuxer_stream_provider->GetType() !=
39 media::DemuxerStreamProvider::Type::URL) { 60 media::DemuxerStreamProvider::Type::URL) {
40 DLOG(ERROR) << "DemuxerStreamProvider is not of Type URL"; 61 DLOG(ERROR) << "DemuxerStreamProvider is not of Type URL";
sandersd (OOO until July 31) 2016/11/08 22:53:44 Should this stay in Initialize()?
tguilbert 2016/11/11 03:50:28 Done.
41 init_cb.Run(media::PIPELINE_ERROR_INITIALIZATION_FAILED); 62 base::ResetAndReturn(&pending_init_cb_)
63 .Run(media::PIPELINE_ERROR_INITIALIZATION_FAILED);
42 return; 64 return;
43 } 65 }
44 66
45 media::MediaUrlParams url_params = 67 media::MediaUrlParams url_params =
46 demuxer_stream_provider->GetMediaUrlParams(); 68 demuxer_stream_provider->GetMediaUrlParams();
47 renderer_client_ = client;
48 69
49 const std::string user_agent = GetContentClient()->GetUserAgent(); 70 const std::string user_agent = GetContentClient()->GetUserAgent();
50 71
51 media_player_.reset(new media::MediaPlayerBridge( 72 media_player_.reset(new media::MediaPlayerBridge(
52 kUnusedAndIrrelevantPlayerId, url_params.media_url, 73 kUnusedAndIrrelevantPlayerId, url_params.media_url,
53 url_params.first_party_for_cookies, user_agent, 74 url_params.first_party_for_cookies, user_agent,
54 false, // hide_url_log 75 false, // hide_url_log
55 this, base::Bind(&MediaPlayerRenderer::OnDecoderResourcesReleased, 76 this, base::Bind(&MediaPlayerRenderer::OnDecoderResourcesReleased,
56 weak_factory_.GetWeakPtr()), 77 weak_factory_.GetWeakPtr()),
57 GURL(), // frame_url 78 GURL(), // frame_url
58 true)); // allow_crendentials 79 true)); // allow_crendentials
59 80
60 media_player_->Initialize(); 81 media_player_->Initialize();
61 init_cb.Run(media::PIPELINE_OK); 82 base::ResetAndReturn(&pending_init_cb_).Run(media::PIPELINE_OK);
62 } 83 }
63 84
64 void MediaPlayerRenderer::SetCdm(media::CdmContext* cdm_context, 85 void MediaPlayerRenderer::SetCdm(media::CdmContext* cdm_context,
65 const media::CdmAttachedCB& cdm_attached_cb) { 86 const media::CdmAttachedCB& cdm_attached_cb) {
66 NOTREACHED(); 87 NOTREACHED();
67 } 88 }
68 89
69 void MediaPlayerRenderer::Flush(const base::Closure& flush_cb) { 90 void MediaPlayerRenderer::Flush(const base::Closure& flush_cb) {
70 DVLOG(3) << __func__; 91 DVLOG(3) << __func__;
71 flush_cb.Run(); 92 flush_cb.Run();
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 void MediaPlayerRenderer::CancelScopedSurfaceRequest() { 266 void MediaPlayerRenderer::CancelScopedSurfaceRequest() {
246 if (!surface_request_token_) 267 if (!surface_request_token_)
247 return; 268 return;
248 269
249 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest( 270 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest(
250 surface_request_token_); 271 surface_request_token_);
251 surface_request_token_ = base::UnguessableToken(); 272 surface_request_token_ = base::UnguessableToken();
252 } 273 }
253 274
254 } // namespace content 275 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698