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();