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

Side by Side Diff: media/blink/webmediaplayer_impl.cc

Issue 2815303006: Convert MediaLog from being ref counted to owned by WebMediaPlayer. (Closed)
Patch Set: Rebase. Created 3 years, 8 months 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
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | media/blink/webmediaplayer_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "media/blink/webmediaplayer_impl.h" 5 #include "media/blink/webmediaplayer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #include <string> 10 #include <string>
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 STATIC_ASSERT_ENUM(WebMediaPlayer::kCORSModeUseCredentials, 170 STATIC_ASSERT_ENUM(WebMediaPlayer::kCORSModeUseCredentials,
171 UrlData::CORS_USE_CREDENTIALS); 171 UrlData::CORS_USE_CREDENTIALS);
172 172
173 WebMediaPlayerImpl::WebMediaPlayerImpl( 173 WebMediaPlayerImpl::WebMediaPlayerImpl(
174 blink::WebLocalFrame* frame, 174 blink::WebLocalFrame* frame,
175 blink::WebMediaPlayerClient* client, 175 blink::WebMediaPlayerClient* client,
176 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, 176 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
177 WebMediaPlayerDelegate* delegate, 177 WebMediaPlayerDelegate* delegate,
178 std::unique_ptr<RendererFactory> renderer_factory, 178 std::unique_ptr<RendererFactory> renderer_factory,
179 linked_ptr<UrlIndex> url_index, 179 linked_ptr<UrlIndex> url_index,
180 const WebMediaPlayerParams& params) 180 std::unique_ptr<WebMediaPlayerParams> params)
181 : frame_(frame), 181 : frame_(frame),
182 delegate_state_(DelegateState::GONE), 182 delegate_state_(DelegateState::GONE),
183 delegate_has_audio_(false), 183 delegate_has_audio_(false),
184 network_state_(WebMediaPlayer::kNetworkStateEmpty), 184 network_state_(WebMediaPlayer::kNetworkStateEmpty),
185 ready_state_(WebMediaPlayer::kReadyStateHaveNothing), 185 ready_state_(WebMediaPlayer::kReadyStateHaveNothing),
186 highest_ready_state_(WebMediaPlayer::kReadyStateHaveNothing), 186 highest_ready_state_(WebMediaPlayer::kReadyStateHaveNothing),
187 preload_(MultibufferDataSource::AUTO), 187 preload_(MultibufferDataSource::AUTO),
188 main_task_runner_(frame->LoadingTaskRunner()), 188 main_task_runner_(frame->LoadingTaskRunner()),
189 media_task_runner_(params.media_task_runner()), 189 media_task_runner_(params->media_task_runner()),
190 worker_task_runner_(params.worker_task_runner()), 190 worker_task_runner_(params->worker_task_runner()),
191 media_log_(params.media_log()), 191 media_log_(params->take_media_log()),
192 pipeline_controller_( 192 pipeline_controller_(
193 base::MakeUnique<PipelineImpl>(media_task_runner_, media_log_.get()), 193 base::MakeUnique<PipelineImpl>(media_task_runner_, media_log_.get()),
194 base::Bind(&WebMediaPlayerImpl::CreateRenderer, 194 base::Bind(&WebMediaPlayerImpl::CreateRenderer,
195 base::Unretained(this)), 195 base::Unretained(this)),
196 base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, AsWeakPtr()), 196 base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, AsWeakPtr()),
197 base::Bind(&WebMediaPlayerImpl::OnPipelineSuspended, AsWeakPtr()), 197 base::Bind(&WebMediaPlayerImpl::OnPipelineSuspended, AsWeakPtr()),
198 base::Bind(&WebMediaPlayerImpl::OnBeforePipelineResume, AsWeakPtr()), 198 base::Bind(&WebMediaPlayerImpl::OnBeforePipelineResume, AsWeakPtr()),
199 base::Bind(&WebMediaPlayerImpl::OnPipelineResumed, AsWeakPtr()), 199 base::Bind(&WebMediaPlayerImpl::OnPipelineResumed, AsWeakPtr()),
200 base::Bind(&WebMediaPlayerImpl::OnError, AsWeakPtr())), 200 base::Bind(&WebMediaPlayerImpl::OnError, AsWeakPtr())),
201 load_type_(kLoadTypeURL), 201 load_type_(kLoadTypeURL),
202 opaque_(false), 202 opaque_(false),
203 playback_rate_(0.0), 203 playback_rate_(0.0),
204 paused_(true), 204 paused_(true),
205 paused_when_hidden_(false), 205 paused_when_hidden_(false),
206 seeking_(false), 206 seeking_(false),
207 pending_suspend_resume_cycle_(false), 207 pending_suspend_resume_cycle_(false),
208 ended_(false), 208 ended_(false),
209 should_notify_time_changed_(false), 209 should_notify_time_changed_(false),
210 overlay_enabled_(false), 210 overlay_enabled_(false),
211 decoder_requires_restart_for_overlay_(false), 211 decoder_requires_restart_for_overlay_(false),
212 client_(client), 212 client_(client),
213 encrypted_client_(encrypted_client), 213 encrypted_client_(encrypted_client),
214 delegate_(delegate), 214 delegate_(delegate),
215 delegate_id_(0), 215 delegate_id_(0),
216 defer_load_cb_(params.defer_load_cb()), 216 defer_load_cb_(params->defer_load_cb()),
217 context_3d_cb_(params.context_3d_cb()), 217 context_3d_cb_(params->context_3d_cb()),
218 adjust_allocated_memory_cb_(params.adjust_allocated_memory_cb()), 218 adjust_allocated_memory_cb_(params->adjust_allocated_memory_cb()),
219 last_reported_memory_usage_(0), 219 last_reported_memory_usage_(0),
220 supports_save_(true), 220 supports_save_(true),
221 chunk_demuxer_(NULL), 221 chunk_demuxer_(NULL),
222 url_index_(url_index), 222 url_index_(url_index),
223 // Threaded compositing isn't enabled universally yet. 223 // Threaded compositing isn't enabled universally yet.
224 compositor_task_runner_(params.compositor_task_runner() 224 compositor_task_runner_(params->compositor_task_runner()
225 ? params.compositor_task_runner() 225 ? params->compositor_task_runner()
226 : base::ThreadTaskRunnerHandle::Get()), 226 : base::ThreadTaskRunnerHandle::Get()),
227 compositor_(new VideoFrameCompositor(compositor_task_runner_)), 227 compositor_(new VideoFrameCompositor(compositor_task_runner_)),
228 #if defined(OS_ANDROID) // WMPI_CAST 228 #if defined(OS_ANDROID) // WMPI_CAST
229 cast_impl_(this, client_, params.context_3d_cb()), 229 cast_impl_(this, client_, params->context_3d_cb()),
230 #endif 230 #endif
231 volume_(1.0), 231 volume_(1.0),
232 volume_multiplier_(1.0), 232 volume_multiplier_(1.0),
233 renderer_factory_(std::move(renderer_factory)), 233 renderer_factory_(std::move(renderer_factory)),
234 surface_manager_(params.surface_manager()), 234 surface_manager_(params->surface_manager()),
235 overlay_surface_id_(SurfaceManager::kNoSurfaceID), 235 overlay_surface_id_(SurfaceManager::kNoSurfaceID),
236 suppress_destruction_errors_(false), 236 suppress_destruction_errors_(false),
237 suspend_enabled_(params.allow_suspend()), 237 suspend_enabled_(params->allow_suspend()),
238 use_fallback_path_(false), 238 use_fallback_path_(false),
239 is_encrypted_(false), 239 is_encrypted_(false),
240 preroll_attempt_pending_(false), 240 preroll_attempt_pending_(false),
241 observer_(params.media_observer()), 241 observer_(params->media_observer()),
242 max_keyframe_distance_to_disable_background_video_( 242 max_keyframe_distance_to_disable_background_video_(
243 params.max_keyframe_distance_to_disable_background_video()), 243 params->max_keyframe_distance_to_disable_background_video()),
244 max_keyframe_distance_to_disable_background_video_mse_( 244 max_keyframe_distance_to_disable_background_video_mse_(
245 params.max_keyframe_distance_to_disable_background_video_mse()), 245 params->max_keyframe_distance_to_disable_background_video_mse()),
246 enable_instant_source_buffer_gc_( 246 enable_instant_source_buffer_gc_(
247 params.enable_instant_source_buffer_gc()), 247 params->enable_instant_source_buffer_gc()),
248 embedded_media_experience_enabled_( 248 embedded_media_experience_enabled_(
249 params.embedded_media_experience_enabled()) { 249 params->embedded_media_experience_enabled()) {
250 DVLOG(1) << __func__; 250 DVLOG(1) << __func__;
251 DCHECK(!adjust_allocated_memory_cb_.is_null()); 251 DCHECK(!adjust_allocated_memory_cb_.is_null());
252 DCHECK(renderer_factory_); 252 DCHECK(renderer_factory_);
253 DCHECK(client_); 253 DCHECK(client_);
254 DCHECK(delegate_); 254 DCHECK(delegate_);
255 255
256 tick_clock_.reset(new base::DefaultTickClock()); 256 tick_clock_.reset(new base::DefaultTickClock());
257 257
258 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( 258 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch(
259 switches::kForceVideoOverlays); 259 switches::kForceVideoOverlays);
260 260
261 enable_fullscreen_video_overlays_ = 261 enable_fullscreen_video_overlays_ =
262 base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo); 262 base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo);
263 263
264 delegate_id_ = delegate_->AddObserver(this); 264 delegate_id_ = delegate_->AddObserver(this);
265 delegate_->SetIdle(delegate_id_, true); 265 delegate_->SetIdle(delegate_id_, true);
266 266
267 media_log_->AddEvent( 267 media_log_->AddEvent(
268 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 268 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED));
269 269
270 if (params.initial_cdm()) 270 if (params->initial_cdm())
271 SetCdm(params.initial_cdm()); 271 SetCdm(params->initial_cdm());
272 272
273 // TODO(xhwang): When we use an external Renderer, many methods won't work, 273 // TODO(xhwang): When we use an external Renderer, many methods won't work,
274 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 274 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861
275 audio_source_provider_ = 275 audio_source_provider_ = new WebAudioSourceProviderImpl(
276 new WebAudioSourceProviderImpl(params.audio_renderer_sink(), media_log_); 276 params->audio_renderer_sink(), media_log_.get());
277 277
278 if (observer_) 278 if (observer_)
279 observer_->SetClient(this); 279 observer_->SetClient(this);
280 } 280 }
281 281
282 WebMediaPlayerImpl::~WebMediaPlayerImpl() { 282 WebMediaPlayerImpl::~WebMediaPlayerImpl() {
283 DVLOG(1) << __func__; 283 DVLOG(1) << __func__;
284 DCHECK(main_task_runner_->BelongsToCurrentThread()); 284 DCHECK(main_task_runner_->BelongsToCurrentThread());
285 285
286 if (set_cdm_result_) { 286 if (set_cdm_result_) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 delegate_->SetIsEffectivelyFullscreen(delegate_id_, isEffectivelyFullscreen); 393 delegate_->SetIsEffectivelyFullscreen(delegate_id_, isEffectivelyFullscreen);
394 } 394 }
395 395
396 void WebMediaPlayerImpl::DoLoad(LoadType load_type, 396 void WebMediaPlayerImpl::DoLoad(LoadType load_type,
397 const blink::WebURL& url, 397 const blink::WebURL& url,
398 CORSMode cors_mode) { 398 CORSMode cors_mode) {
399 DVLOG(1) << __func__; 399 DVLOG(1) << __func__;
400 DCHECK(main_task_runner_->BelongsToCurrentThread()); 400 DCHECK(main_task_runner_->BelongsToCurrentThread());
401 401
402 GURL gurl(url); 402 GURL gurl(url);
403 ReportMetrics(load_type, gurl, frame_->GetSecurityOrigin(), media_log_); 403 ReportMetrics(load_type, gurl, frame_->GetSecurityOrigin(), media_log_.get());
404 404
405 // Set subresource URL for crash reporting. 405 // Set subresource URL for crash reporting.
406 base::debug::SetCrashKeyValue("subresource_url", gurl.spec()); 406 base::debug::SetCrashKeyValue("subresource_url", gurl.spec());
407 407
408 if (use_fallback_path_) 408 if (use_fallback_path_)
409 fallback_url_ = gurl; 409 fallback_url_ = gurl;
410 410
411 load_type_ = load_type; 411 load_type_ = load_type;
412 412
413 SetNetworkState(WebMediaPlayer::kNetworkStateLoading); 413 SetNetworkState(WebMediaPlayer::kNetworkStateLoading);
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) { 662 const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) {
663 DCHECK(main_task_runner_->BelongsToCurrentThread()); 663 DCHECK(main_task_runner_->BelongsToCurrentThread());
664 664
665 std::ostringstream logstr; 665 std::ostringstream logstr;
666 std::vector<MediaTrack::Id> enabledMediaTrackIds; 666 std::vector<MediaTrack::Id> enabledMediaTrackIds;
667 for (const auto& blinkTrackId : enabledTrackIds) { 667 for (const auto& blinkTrackId : enabledTrackIds) {
668 MediaTrack::Id track_id = blinkTrackId.Utf8().data(); 668 MediaTrack::Id track_id = blinkTrackId.Utf8().data();
669 logstr << track_id << " "; 669 logstr << track_id << " ";
670 enabledMediaTrackIds.push_back(track_id); 670 enabledMediaTrackIds.push_back(track_id);
671 } 671 }
672 MEDIA_LOG(INFO, media_log_) << "Enabled audio tracks: [" << logstr.str() 672 MEDIA_LOG(INFO, media_log_.get())
673 << "]"; 673 << "Enabled audio tracks: [" << logstr.str() << "]";
674 pipeline_controller_.OnEnabledAudioTracksChanged(enabledMediaTrackIds); 674 pipeline_controller_.OnEnabledAudioTracksChanged(enabledMediaTrackIds);
675 } 675 }
676 676
677 void WebMediaPlayerImpl::SelectedVideoTrackChanged( 677 void WebMediaPlayerImpl::SelectedVideoTrackChanged(
678 blink::WebMediaPlayer::TrackId* selectedTrackId) { 678 blink::WebMediaPlayer::TrackId* selectedTrackId) {
679 DCHECK(main_task_runner_->BelongsToCurrentThread()); 679 DCHECK(main_task_runner_->BelongsToCurrentThread());
680 680
681 base::Optional<MediaTrack::Id> selected_video_track_id; 681 base::Optional<MediaTrack::Id> selected_video_track_id;
682 if (selectedTrackId && !video_track_disabled_) 682 if (selectedTrackId && !video_track_disabled_)
683 selected_video_track_id = MediaTrack::Id(selectedTrackId->Utf8().data()); 683 selected_video_track_id = MediaTrack::Id(selectedTrackId->Utf8().data());
684 MEDIA_LOG(INFO, media_log_) << "Selected video track: [" 684 MEDIA_LOG(INFO, media_log_.get())
685 << selected_video_track_id.value_or("") << "]"; 685 << "Selected video track: [" << selected_video_track_id.value_or("")
686 << "]";
686 pipeline_controller_.OnSelectedVideoTrackChanged(selected_video_track_id); 687 pipeline_controller_.OnSelectedVideoTrackChanged(selected_video_track_id);
687 } 688 }
688 689
689 bool WebMediaPlayerImpl::GetLastUploadedFrameInfo(unsigned* width, 690 bool WebMediaPlayerImpl::GetLastUploadedFrameInfo(unsigned* width,
690 unsigned* height, 691 unsigned* height,
691 double* timestamp) { 692 double* timestamp) {
692 *width = last_uploaded_frame_size_.width(); 693 *width = last_uploaded_frame_size_.width();
693 *height = last_uploaded_frame_size_.height(); 694 *height = last_uploaded_frame_size_.height();
694 *timestamp = last_uploaded_frame_timestamp_.InSecondsF(); 695 *timestamp = last_uploaded_frame_timestamp_.InSecondsF();
695 return true; 696 return true;
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 } 1180 }
1180 1181
1181 void WebMediaPlayerImpl::OnPipelineResumed() { 1182 void WebMediaPlayerImpl::OnPipelineResumed() {
1182 is_pipeline_resuming_ = false; 1183 is_pipeline_resuming_ = false;
1183 1184
1184 UpdateBackgroundVideoOptimizationState(); 1185 UpdateBackgroundVideoOptimizationState();
1185 } 1186 }
1186 1187
1187 void WebMediaPlayerImpl::OnDemuxerOpened() { 1188 void WebMediaPlayerImpl::OnDemuxerOpened() {
1188 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1189 DCHECK(main_task_runner_->BelongsToCurrentThread());
1189 client_->MediaSourceOpened( 1190 client_->MediaSourceOpened(new WebMediaSourceImpl(chunk_demuxer_));
1190 new WebMediaSourceImpl(chunk_demuxer_, media_log_));
1191 } 1191 }
1192 1192
1193 void WebMediaPlayerImpl::OnMemoryPressure( 1193 void WebMediaPlayerImpl::OnMemoryPressure(
1194 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { 1194 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
1195 DVLOG(2) << __func__ << " memory_pressure_level=" << memory_pressure_level; 1195 DVLOG(2) << __func__ << " memory_pressure_level=" << memory_pressure_level;
1196 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1196 DCHECK(main_task_runner_->BelongsToCurrentThread());
1197 DCHECK(base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)); 1197 DCHECK(base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC));
1198 DCHECK(chunk_demuxer_); 1198 DCHECK(chunk_demuxer_);
1199 1199
1200 // The new value of |memory_pressure_level| will take effect on the next 1200 // The new value of |memory_pressure_level| will take effect on the next
(...skipping 20 matching lines...) Expand all
1221 } 1221 }
1222 1222
1223 void WebMediaPlayerImpl::OnError(PipelineStatus status) { 1223 void WebMediaPlayerImpl::OnError(PipelineStatus status) {
1224 DVLOG(1) << __func__; 1224 DVLOG(1) << __func__;
1225 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1225 DCHECK(main_task_runner_->BelongsToCurrentThread());
1226 DCHECK_NE(status, PIPELINE_OK); 1226 DCHECK_NE(status, PIPELINE_OK);
1227 1227
1228 if (suppress_destruction_errors_) 1228 if (suppress_destruction_errors_)
1229 return; 1229 return;
1230 1230
1231 ReportPipelineError(load_type_, status, media_log_); 1231 ReportPipelineError(load_type_, status, media_log_.get());
1232 media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(status)); 1232 media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(status));
1233 1233
1234 if (ready_state_ == WebMediaPlayer::kReadyStateHaveNothing) { 1234 if (ready_state_ == WebMediaPlayer::kReadyStateHaveNothing) {
1235 // Any error that occurs before reaching ReadyStateHaveMetadata should 1235 // Any error that occurs before reaching ReadyStateHaveMetadata should
1236 // be considered a format error. 1236 // be considered a format error.
1237 SetNetworkState(WebMediaPlayer::kNetworkStateFormatError); 1237 SetNetworkState(WebMediaPlayer::kNetworkStateFormatError);
1238 } else { 1238 } else {
1239 SetNetworkState(PipelineErrorToNetworkState(status)); 1239 SetNetworkState(PipelineErrorToNetworkState(status));
1240 } 1240 }
1241 1241
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
1748 // Figure out which demuxer to use. 1748 // Figure out which demuxer to use.
1749 if (load_type_ != kLoadTypeMediaSource) { 1749 if (load_type_ != kLoadTypeMediaSource) {
1750 DCHECK(!chunk_demuxer_); 1750 DCHECK(!chunk_demuxer_);
1751 DCHECK(data_source_); 1751 DCHECK(data_source_);
1752 1752
1753 #if !defined(MEDIA_DISABLE_FFMPEG) 1753 #if !defined(MEDIA_DISABLE_FFMPEG)
1754 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb = 1754 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb =
1755 BindToCurrentLoop(base::Bind( 1755 BindToCurrentLoop(base::Bind(
1756 &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr())); 1756 &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr()));
1757 1757
1758 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), 1758 demuxer_.reset(new FFmpegDemuxer(
1759 encrypted_media_init_data_cb, 1759 media_task_runner_, data_source_.get(), encrypted_media_init_data_cb,
1760 media_tracks_updated_cb, media_log_)); 1760 media_tracks_updated_cb, media_log_.get()));
1761 #else 1761 #else
1762 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); 1762 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN);
1763 return; 1763 return;
1764 #endif 1764 #endif
1765 } else { 1765 } else {
1766 DCHECK(!chunk_demuxer_); 1766 DCHECK(!chunk_demuxer_);
1767 DCHECK(!data_source_); 1767 DCHECK(!data_source_);
1768 1768
1769 chunk_demuxer_ = new ChunkDemuxer( 1769 chunk_demuxer_ = new ChunkDemuxer(
1770 BindToCurrentLoop( 1770 BindToCurrentLoop(
1771 base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())), 1771 base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())),
1772 encrypted_media_init_data_cb, media_log_); 1772 encrypted_media_init_data_cb, media_log_.get());
1773 demuxer_.reset(chunk_demuxer_); 1773 demuxer_.reset(chunk_demuxer_);
1774 1774
1775 if (base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)) { 1775 if (base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)) {
1776 // base::Unretained is safe because |this| owns memory_pressure_listener_. 1776 // base::Unretained is safe because |this| owns memory_pressure_listener_.
1777 memory_pressure_listener_ = 1777 memory_pressure_listener_ =
1778 base::MakeUnique<base::MemoryPressureListener>(base::Bind( 1778 base::MakeUnique<base::MemoryPressureListener>(base::Bind(
1779 &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this))); 1779 &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this)));
1780 } 1780 }
1781 } 1781 }
1782 1782
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
2161 // Idle timeout chosen arbitrarily. 2161 // Idle timeout chosen arbitrarily.
2162 background_pause_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(5), 2162 background_pause_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(5),
2163 this, &WebMediaPlayerImpl::OnPause); 2163 this, &WebMediaPlayerImpl::OnPause);
2164 } 2164 }
2165 2165
2166 void WebMediaPlayerImpl::CreateWatchTimeReporter() { 2166 void WebMediaPlayerImpl::CreateWatchTimeReporter() {
2167 // Create the watch time reporter and synchronize its initial state. 2167 // Create the watch time reporter and synchronize its initial state.
2168 watch_time_reporter_.reset( 2168 watch_time_reporter_.reset(
2169 new WatchTimeReporter(HasAudio(), HasVideo(), !!chunk_demuxer_, 2169 new WatchTimeReporter(HasAudio(), HasVideo(), !!chunk_demuxer_,
2170 is_encrypted_, embedded_media_experience_enabled_, 2170 is_encrypted_, embedded_media_experience_enabled_,
2171 media_log_, pipeline_metadata_.natural_size, 2171 media_log_.get(), pipeline_metadata_.natural_size,
2172 base::Bind(&GetCurrentTimeInternal, this))); 2172 base::Bind(&GetCurrentTimeInternal, this)));
2173 watch_time_reporter_->OnVolumeChange(volume_); 2173 watch_time_reporter_->OnVolumeChange(volume_);
2174 if (delegate_->IsFrameHidden()) 2174 if (delegate_->IsFrameHidden())
2175 watch_time_reporter_->OnHidden(); 2175 watch_time_reporter_->OnHidden();
2176 else 2176 else
2177 watch_time_reporter_->OnShown(); 2177 watch_time_reporter_->OnShown();
2178 } 2178 }
2179 2179
2180 bool WebMediaPlayerImpl::IsHidden() const { 2180 bool WebMediaPlayerImpl::IsHidden() const {
2181 DCHECK(main_task_runner_->BelongsToCurrentThread()); 2181 DCHECK(main_task_runner_->BelongsToCurrentThread());
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
2395 2395
2396 if (is_encrypted_) 2396 if (is_encrypted_)
2397 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.EME", height); 2397 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.EME", height);
2398 2398
2399 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.All", height); 2399 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.All", height);
2400 } 2400 }
2401 2401
2402 #undef UMA_HISTOGRAM_VIDEO_HEIGHT 2402 #undef UMA_HISTOGRAM_VIDEO_HEIGHT
2403 2403
2404 } // namespace media 2404 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | media/blink/webmediaplayer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698