| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index 2e148192b01a65d44b370ecd4f2a195e5d28ad68..5bdc8df7e74fb1c53fd45e1533433a76ecd8bd24 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -17,6 +17,7 @@
|
| #include "base/metrics/histogram.h"
|
| #include "base/single_thread_task_runner.h"
|
| #include "base/synchronization/waitable_event.h"
|
| +#include "base/task_runner_util.h"
|
| #include "base/thread_task_runner_handle.h"
|
| #include "base/trace_event/trace_event.h"
|
| #include "cc/blink/web_layer_impl.h"
|
| @@ -1119,16 +1120,34 @@ void WebMediaPlayerImpl::NotifyPlaybackPaused() {
|
| void WebMediaPlayerImpl::ReportMemoryUsage() {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| + // About base::Unretained() usage below: We destroy |demuxer_| on the main
|
| + // thread. Before that, however, ~WebMediaPlayerImpl() posts a task to the
|
| + // media thread and waits for it to finish. Hence, the GetMemoryUsage() task
|
| + // posted here must finish earlier.
|
| +
|
| + if (demuxer_) {
|
| + base::PostTaskAndReplyWithResult(
|
| + media_task_runner_.get(), FROM_HERE,
|
| + base::Bind(&Demuxer::GetMemoryUsage, base::Unretained(demuxer_.get())),
|
| + base::Bind(&WebMediaPlayerImpl::FinishMemoryUsageReport, AsWeakPtr()));
|
| + } else {
|
| + FinishMemoryUsageReport(0);
|
| + }
|
| +}
|
| +
|
| +void WebMediaPlayerImpl::FinishMemoryUsageReport(int64_t demuxer_memory_usage) {
|
| + DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| +
|
| const PipelineStatistics stats = pipeline_.GetStatistics();
|
| const int64_t current_memory_usage =
|
| stats.audio_memory_usage + stats.video_memory_usage +
|
| (data_source_ ? data_source_->GetMemoryUsage() : 0) +
|
| - (demuxer_ ? demuxer_->GetMemoryUsage() : 0);
|
| + demuxer_memory_usage;
|
|
|
| DVLOG(2) << "Memory Usage -- Audio: " << stats.audio_memory_usage
|
| << ", Video: " << stats.video_memory_usage << ", DataSource: "
|
| << (data_source_ ? data_source_->GetMemoryUsage() : 0)
|
| - << ", Demuxer: " << (demuxer_ ? demuxer_->GetMemoryUsage() : 0);
|
| + << ", Demuxer: " << demuxer_memory_usage;
|
|
|
| const int64_t delta = current_memory_usage - last_reported_memory_usage_;
|
| last_reported_memory_usage_ = current_memory_usage;
|
|
|