Index: media/base/android/media_decoder_job.cc |
diff --git a/media/base/android/media_decoder_job.cc b/media/base/android/media_decoder_job.cc |
index 6a96ccbc59b64cad79d8bb83601e013993499bc9..654a86574a27d8e127ee789674225ced243601dc 100644 |
--- a/media/base/android/media_decoder_job.cc |
+++ b/media/base/android/media_decoder_job.cc |
@@ -10,6 +10,7 @@ |
#include "base/thread_task_runner_handle.h" |
#include "base/trace_event/trace_event.h" |
#include "media/base/android/media_drm_bridge.h" |
+#include "media/base/android/media_statistics.h" |
#include "media/base/bind_to_current_loop.h" |
#include "media/base/timestamp_constants.h" |
@@ -23,8 +24,10 @@ static const int kMediaCodecTimeoutInMilliseconds = 250; |
MediaDecoderJob::MediaDecoderJob( |
const scoped_refptr<base::SingleThreadTaskRunner>& decoder_task_runner, |
const base::Closure& request_data_cb, |
- const base::Closure& config_changed_cb) |
+ const base::Closure& config_changed_cb, |
+ FrameStatistics* frame_statistics) |
: need_to_reconfig_decoder_job_(false), |
+ frame_statistics_(frame_statistics), |
ui_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
decoder_task_runner_(decoder_task_runner), |
needs_flush_(false), |
@@ -485,9 +488,20 @@ void MediaDecoderJob::DecodeInternal( |
(status != MEDIA_CODEC_OUTPUT_END_OF_STREAM || size != 0u); |
base::TimeDelta time_to_render; |
DCHECK(!start_time_ticks.is_null()); |
- if (render_output && ComputeTimeToRender()) { |
- time_to_render = presentation_timestamp - (base::TimeTicks::Now() - |
- start_time_ticks + start_presentation_timestamp); |
+ if (render_output) { |
+ if (frame_statistics_) |
+ frame_statistics_->AddFrame(); |
+ |
+ if (ComputeTimeToRender()) { |
+ time_to_render = |
+ presentation_timestamp - (base::TimeTicks::Now() - start_time_ticks + |
+ start_presentation_timestamp); |
+ |
+ // ComputeTimeToRender() returns true for video streams only, this is a |
+ // video stream. |
+ if (frame_statistics_ && time_to_render < base::TimeDelta()) |
+ frame_statistics_->AddLateFrame((-1) * time_to_render); |
+ } |
} |
if (time_to_render > base::TimeDelta()) { |