update metrics for mediaplayer
rework for a better guarantee of what is always present
in return value for android.media.MediaPlayer.getMetrics()
Bug: 36355865
Test: ran cts "android.media.cts.MediaPlayerTest"
Change-Id: Ieb6d14298e676fff7152dea5f7a9a66f7f7476a4
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index 621347d..66b64f8 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -93,7 +93,7 @@
mLooper->stop();
// finalize any pending metrics, usually a no-op.
- finalizeMetrics("destructor");
+ updateMetrics("destructor");
logMetrics("destructor");
if (mAnalyticsItem != NULL) {
@@ -511,11 +511,11 @@
return OK;
}
-void NuPlayerDriver::finalizeMetrics(const char *where) {
+void NuPlayerDriver::updateMetrics(const char *where) {
if (where == NULL) {
where = "unknown";
}
- ALOGV("finalizeMetrics(%p) from %s at state %d", this, where, mState);
+ ALOGV("updateMetrics(%p) from %s at state %d", this, where, mState);
// gather the final stats for this record
Vector<sp<AMessage>> trackStats;
@@ -560,18 +560,16 @@
}
}
}
-
- // getDuration() uses mLock for mutex -- careful where we use it.
- int duration_ms = -1;
- getDuration(&duration_ms);
- if (duration_ms != -1) {
- mAnalyticsItem->setInt64(kPlayerDuration, duration_ms);
- }
-
- if (mPlayingTimeUs > 0) {
- mAnalyticsItem->setInt64(kPlayerPlaying, (mPlayingTimeUs+500)/1000 );
- }
}
+
+ // always provide duration and playing time, even if they have 0/unknown values.
+
+ // getDuration() uses mLock for mutex -- careful where we use it.
+ int duration_ms = -1;
+ getDuration(&duration_ms);
+ mAnalyticsItem->setInt64(kPlayerDuration, duration_ms);
+
+ mAnalyticsItem->setInt64(kPlayerPlaying, (mPlayingTimeUs+500)/1000 );
}
@@ -605,7 +603,7 @@
status_t NuPlayerDriver::reset() {
ALOGD("reset(%p) at state %d", this, mState);
- finalizeMetrics("reset");
+ updateMetrics("reset");
logMetrics("reset");
Mutex::Autolock autoLock(mLock);
@@ -731,7 +729,7 @@
if (key == FOURCC('m','t','r','X')) {
// mtrX -- a play on 'metrics' (not matrix)
// gather current info all together, parcel it, and send it back
- finalizeMetrics("api");
+ updateMetrics("api");
mAnalyticsItem->writeToParcel(reply);
return OK;
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h
index 082f71a..c5ddcb0 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h
@@ -137,7 +137,7 @@
bool mLooping;
bool mAutoLoop;
- void finalizeMetrics(const char *where);
+ void updateMetrics(const char *where);
void logMetrics(const char *where);
status_t prepare_l();