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

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

Issue 2815303006: Convert MediaLog from being ref counted to owned by WebMediaPlayer. (Closed)
Patch Set: Actually fix fuzzers. 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
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->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 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
1752 // Figure out which demuxer to use. 1752 // Figure out which demuxer to use.
1753 if (load_type_ != kLoadTypeMediaSource) { 1753 if (load_type_ != kLoadTypeMediaSource) {
1754 DCHECK(!chunk_demuxer_); 1754 DCHECK(!chunk_demuxer_);
1755 DCHECK(data_source_); 1755 DCHECK(data_source_);
1756 1756
1757 #if !defined(MEDIA_DISABLE_FFMPEG) 1757 #if !defined(MEDIA_DISABLE_FFMPEG)
1758 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb = 1758 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb =
1759 BindToCurrentLoop(base::Bind( 1759 BindToCurrentLoop(base::Bind(
1760 &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr())); 1760 &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr()));
1761 1761
1762 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), 1762 demuxer_.reset(new FFmpegDemuxer(
1763 encrypted_media_init_data_cb, 1763 media_task_runner_, data_source_.get(), encrypted_media_init_data_cb,
1764 media_tracks_updated_cb, media_log_)); 1764 media_tracks_updated_cb, media_log_.get()));
1765 #else 1765 #else
1766 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); 1766 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN);
1767 return; 1767 return;
1768 #endif 1768 #endif
1769 } else { 1769 } else {
1770 DCHECK(!chunk_demuxer_); 1770 DCHECK(!chunk_demuxer_);
1771 DCHECK(!data_source_); 1771 DCHECK(!data_source_);
1772 1772
1773 chunk_demuxer_ = new ChunkDemuxer( 1773 chunk_demuxer_ = new ChunkDemuxer(
1774 BindToCurrentLoop( 1774 BindToCurrentLoop(
1775 base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())), 1775 base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())),
1776 encrypted_media_init_data_cb, media_log_); 1776 encrypted_media_init_data_cb, media_log_.get());
1777 demuxer_.reset(chunk_demuxer_); 1777 demuxer_.reset(chunk_demuxer_);
1778 1778
1779 if (base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)) { 1779 if (base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)) {
1780 // base::Unretained is safe because |this| owns memory_pressure_listener_. 1780 // base::Unretained is safe because |this| owns memory_pressure_listener_.
1781 memory_pressure_listener_ = 1781 memory_pressure_listener_ =
1782 base::MakeUnique<base::MemoryPressureListener>(base::Bind( 1782 base::MakeUnique<base::MemoryPressureListener>(base::Bind(
1783 &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this))); 1783 &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this)));
1784 } 1784 }
1785 } 1785 }
1786 1786
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
2153 // Idle timeout chosen arbitrarily. 2153 // Idle timeout chosen arbitrarily.
2154 background_pause_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(5), 2154 background_pause_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(5),
2155 this, &WebMediaPlayerImpl::OnPause); 2155 this, &WebMediaPlayerImpl::OnPause);
2156 } 2156 }
2157 2157
2158 void WebMediaPlayerImpl::CreateWatchTimeReporter() { 2158 void WebMediaPlayerImpl::CreateWatchTimeReporter() {
2159 // Create the watch time reporter and synchronize its initial state. 2159 // Create the watch time reporter and synchronize its initial state.
2160 watch_time_reporter_.reset( 2160 watch_time_reporter_.reset(
2161 new WatchTimeReporter(HasAudio(), HasVideo(), !!chunk_demuxer_, 2161 new WatchTimeReporter(HasAudio(), HasVideo(), !!chunk_demuxer_,
2162 is_encrypted_, embedded_media_experience_enabled_, 2162 is_encrypted_, embedded_media_experience_enabled_,
2163 media_log_, pipeline_metadata_.natural_size, 2163 media_log_.get(), pipeline_metadata_.natural_size,
2164 base::Bind(&GetCurrentTimeInternal, this))); 2164 base::Bind(&GetCurrentTimeInternal, this)));
2165 watch_time_reporter_->OnVolumeChange(volume_); 2165 watch_time_reporter_->OnVolumeChange(volume_);
2166 if (delegate_->IsFrameHidden()) 2166 if (delegate_->IsFrameHidden())
2167 watch_time_reporter_->OnHidden(); 2167 watch_time_reporter_->OnHidden();
2168 else 2168 else
2169 watch_time_reporter_->OnShown(); 2169 watch_time_reporter_->OnShown();
2170 } 2170 }
2171 2171
2172 bool WebMediaPlayerImpl::IsHidden() const { 2172 bool WebMediaPlayerImpl::IsHidden() const {
2173 DCHECK(main_task_runner_->BelongsToCurrentThread()); 2173 DCHECK(main_task_runner_->BelongsToCurrentThread());
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
2359 2359
2360 void WebMediaPlayerImpl::RecordUnderflowDuration(base::TimeDelta duration) { 2360 void WebMediaPlayerImpl::RecordUnderflowDuration(base::TimeDelta duration) {
2361 DCHECK(data_source_ || chunk_demuxer_); 2361 DCHECK(data_source_ || chunk_demuxer_);
2362 if (data_source_) 2362 if (data_source_)
2363 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration", duration); 2363 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration", duration);
2364 else 2364 else
2365 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration.MSE", duration); 2365 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration.MSE", duration);
2366 } 2366 }
2367 2367
2368 } // namespace media 2368 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698