Merge "Add proc load listener wait time."
diff --git a/libraries/collectors-helper/system/src/com/android/helpers/ProcLoadHelper.java b/libraries/collectors-helper/system/src/com/android/helpers/ProcLoadHelper.java
index dd362b8..0b71b53 100644
--- a/libraries/collectors-helper/system/src/com/android/helpers/ProcLoadHelper.java
+++ b/libraries/collectors-helper/system/src/com/android/helpers/ProcLoadHelper.java
@@ -36,6 +36,7 @@
     private static final String LOG_TAG = ProcLoadHelper.class.getSimpleName();
     private static final String LOAD_CMD = "cat /proc/loadavg";
     public static final String LAST_MINUTE_LOAD_METRIC_KEY = "proc_loadavg_last_minute";
+    public static final String PROC_LOAD_WAIT_TIME_METRIC_KEY = "proc_load_wait_time_msecs";
 
     private static final Pattern LOAD_OUTPUT_PATTERN = Pattern.compile(
             "(?<LASTMINUTELOAD>.*)\\s.*\\s.*\\s.*\\s.*");
@@ -46,6 +47,7 @@
     private long mProcLoadIntervalInMs = 500;
     private double mRecentLoad = 0;
     private UiDevice mDevice;
+    private double mTotalWaitTime = 0;
 
     /** Wait untill the proc/load reaches below the threshold or timeout expires */
     @Override
@@ -66,6 +68,8 @@
                         ? mProcLoadIntervalInMs : remainingWaitTime;
                 Log.d(LOG_TAG, String.format("Waiting for %s msecs", currWaitTime));
                 SystemClock.sleep(currWaitTime);
+                mTotalWaitTime += currWaitTime;
+                Log.d(LOG_TAG, String.format("Waited for %s msecs", mTotalWaitTime));
                 remainingWaitTime = remainingWaitTime - mProcLoadIntervalInMs;
             }
         }
@@ -80,6 +84,7 @@
         Log.i(LOG_TAG, String.format("proc/loadavg in last minute before test is : %s",
                 mRecentLoad));
         result.put(LAST_MINUTE_LOAD_METRIC_KEY, mRecentLoad);
+        result.put(PROC_LOAD_WAIT_TIME_METRIC_KEY, mTotalWaitTime);
         return result;
     }
 
diff --git a/libraries/collectors-helper/system/test/src/com/android/helpers/tests/ProcLoadHelperTest.java b/libraries/collectors-helper/system/test/src/com/android/helpers/tests/ProcLoadHelperTest.java
index a66d8bc..1cd0ca4 100644
--- a/libraries/collectors-helper/system/test/src/com/android/helpers/tests/ProcLoadHelperTest.java
+++ b/libraries/collectors-helper/system/test/src/com/android/helpers/tests/ProcLoadHelperTest.java
@@ -22,6 +22,7 @@
 
 import com.android.helpers.ProcLoadHelper;
 import static com.android.helpers.ProcLoadHelper.LAST_MINUTE_LOAD_METRIC_KEY;
+import static com.android.helpers.ProcLoadHelper.PROC_LOAD_WAIT_TIME_METRIC_KEY;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -60,6 +61,18 @@
         assertTrue(procLoadMetric.get(LAST_MINUTE_LOAD_METRIC_KEY) > 0);
     }
 
+    /** Test to verify total proc load wait time metric. **/
+    @Test
+    public void testProcLoadWaitTimeMetric() {
+        mLoadHelper.setProcLoadThreshold(100);
+        mLoadHelper.setProcLoadWaitTimeInMs(1100L);
+        mLoadHelper.setProcLoadIntervalInMs(100L);
+        assertTrue(mLoadHelper.startCollecting());
+        Map<String, Double> procLoadMetric = mLoadHelper.getMetrics();
+        assertTrue(procLoadMetric.containsKey(PROC_LOAD_WAIT_TIME_METRIC_KEY));
+        assertTrue(procLoadMetric.get(LAST_MINUTE_LOAD_METRIC_KEY) > 0);
+    }
+
     /** Test to verify threshold not met workflow. */
     @Test
     public void testMetricAfterTimeout() {