diff --git a/libs/deviceutil/src/android/cts/util/MediaUtils.java b/libs/deviceutil/src/android/cts/util/MediaUtils.java
index 0a454b6..721ff47 100755
--- a/libs/deviceutil/src/android/cts/util/MediaUtils.java
+++ b/libs/deviceutil/src/android/cts/util/MediaUtils.java
@@ -27,9 +27,9 @@
 import android.net.Uri;
 import android.util.Range;
 
-import com.android.cts.util.ReportLog;
-import com.android.cts.util.ResultType;
-import com.android.cts.util.ResultUnit;
+import com.android.compatibility.common.util.DeviceReportLog;
+import com.android.compatibility.common.util.ResultType;
+import com.android.compatibility.common.util.ResultUnit;
 
 import java.lang.reflect.Method;
 import static java.lang.reflect.Modifier.isPublic;
@@ -503,12 +503,12 @@
         return avgs;
     }
 
-    public static String logResults(ReportLog log, String prefix,
+    public static String logResults(DeviceReportLog log, String prefix,
             double min, double max, double avg, double stdev) {
         String msg = prefix;
         msg += " min=" + Math.round(min / 1000) + " max=" + Math.round(max / 1000) +
                 " avg=" + Math.round(avg / 1000) + " stdev=" + Math.round(stdev / 1000);
-        log.printValue(msg, 1000000000 / min, ResultType.HIGHER_BETTER, ResultUnit.FPS);
+        log.addValue(msg, 1000000000 / min, ResultType.HIGHER_BETTER, ResultUnit.FPS);
         return msg;
     }
 
diff --git a/tests/leanbackjank/src/android/leanbackjank/cts/CtsJankTestBase.java b/tests/leanbackjank/src/android/leanbackjank/cts/CtsJankTestBase.java
index 77a1d1c..3db269c 100644
--- a/tests/leanbackjank/src/android/leanbackjank/cts/CtsJankTestBase.java
+++ b/tests/leanbackjank/src/android/leanbackjank/cts/CtsJankTestBase.java
@@ -16,18 +16,20 @@
 
 package android.leanbackjank.cts;
 
-import android.cts.util.DeviceReportLog;
 import android.os.Bundle;
 import android.support.test.jank.GfxMonitor;
 import android.support.test.jank.JankTestBase;
 import android.support.test.jank.WindowContentFrameStatsMonitor;
 import android.support.test.uiautomator.UiDevice;
 
-import com.android.cts.util.ResultType;
-import com.android.cts.util.ResultUnit;
+import com.android.compatibility.common.util.DeviceReportLog;
+import com.android.compatibility.common.util.ResultType;
+import com.android.compatibility.common.util.ResultUnit;
 
 public abstract class CtsJankTestBase extends JankTestBase {
 
+    private final String REPORT_LOG_NAME = "CtsLeanbackJankTestCases";
+
     private UiDevice mDevice;
     private DeviceReportLog mLog;
 
@@ -36,7 +38,7 @@
         if (!metrics.containsKey(key)) {
             return;
         }
-        mLog.printValue(source, key, metrics.getInt(key), resultType, resultUnit);
+        mLog.addValue(source, key, metrics.getInt(key), resultType, resultUnit);
     }
 
     private void printDoubleValueWithKey(String source, Bundle metrics, String key,
@@ -44,7 +46,7 @@
         if (!metrics.containsKey(key)) {
             return;
         }
-        mLog.printValue(source, key, metrics.getDouble(key), resultType, resultUnit);
+        mLog.addValue(source, key, metrics.getDouble(key), resultType, resultUnit);
     }
 
     @Override
@@ -57,7 +59,7 @@
                 ResultType.LOWER_BETTER, ResultUnit.MS);
         printIntValueWithKey(source, metrics, WindowContentFrameStatsMonitor.KEY_MAX_NUM_JANKY,
                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
-        mLog.printSummary(WindowContentFrameStatsMonitor.KEY_AVG_NUM_JANKY,
+        mLog.setSummary(WindowContentFrameStatsMonitor.KEY_AVG_NUM_JANKY,
                 metrics.getDouble(WindowContentFrameStatsMonitor.KEY_AVG_NUM_JANKY),
                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
 
@@ -84,7 +86,8 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        mLog = new DeviceReportLog();
+        String streamName = "cts_leanback_jank";
+        mLog = new DeviceReportLog(REPORT_LOG_NAME, streamName);
         // fix device orientation
         mDevice = UiDevice.getInstance(getInstrumentation());
         mDevice.setOrientationNatural();
@@ -92,7 +95,7 @@
 
     @Override
     protected void tearDown() throws Exception {
-        mLog.deliverReportToHost(getInstrumentation());
+        mLog.submit(getInstrumentation());
         // restore device orientation
         mDevice.unfreezeRotation();
         super.tearDown();
diff --git a/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java b/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java
index a153f78..7e56a22 100644
--- a/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java
+++ b/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
 import android.content.res.Resources;
-import android.cts.util.DeviceReportLog;
 import android.cts.util.MediaUtils;
 import android.media.MediaCodec;
 import android.media.MediaCodecList;
@@ -34,8 +33,9 @@
 import android.util.Range;
 import android.view.Surface;
 
-import com.android.cts.util.ResultType;
-import com.android.cts.util.ResultUnit;
+import com.android.compatibility.common.util.DeviceReportLog;
+import com.android.compatibility.common.util.ResultType;
+import com.android.compatibility.common.util.ResultUnit;
 import com.android.compatibility.common.util.Stat;
 
 import java.nio.ByteBuffer;
@@ -45,6 +45,7 @@
 
 public class VideoDecoderPerfTest extends MediaPlayerTestBase {
     private static final String TAG = "VideoDecoderPerfTest";
+    private static final String REPORT_LOG_NAME = "CtsMediaTestCases";
     private static final int TOTAL_FRAMES = 3000;
     private static final int MAX_TIME_MS = 120000;  // 2 minutes
     private static final int NUMBER_OF_REPEAT = 2;
@@ -71,12 +72,13 @@
         super.setUp();
         mVerifyResults = true;
         mResources = mContext.getResources();
-        mReportLog = new DeviceReportLog();
+        String streamName = "video_decoder_perf_test";
+        mReportLog = new DeviceReportLog(REPORT_LOG_NAME, streamName);
     }
 
     @Override
     protected void tearDown() throws Exception {
-        mReportLog.deliverReportToHost(getInstrumentation());
+        mReportLog.submit(getInstrumentation());
         super.tearDown();
     }
 
@@ -149,7 +151,7 @@
             mResultRawData = null;
         }
         // use 0 for summary line, detail for each test config is in the report.
-        mReportLog.printSummary("average fps", 0, ResultType.HIGHER_BETTER, ResultUnit.FPS);
+        mReportLog.setSummary("average_fps", 0, ResultType.HIGHER_BETTER, ResultUnit.FPS);
         mSamplesInMemory.clear();
     }
 
@@ -298,7 +300,7 @@
 
         String message = "average fps for " + testConfig;
         double fps = (double)outputNum / ((finish - start) / 1000.0);
-        mReportLog.printValue(message, fps, ResultType.HIGHER_BETTER, ResultUnit.FPS);
+        mReportLog.addValue(message, fps, ResultType.HIGHER_BETTER, ResultUnit.FPS);
 
         double[] avgs = MediaUtils.calculateMovingAverage(frameTimeDiff, MOVING_AVERAGE_NUM);
         double decMin = Stat.getMin(avgs);
diff --git a/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java b/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
index 2c54d35..dd1a3a0 100644
--- a/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
+++ b/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
@@ -17,7 +17,6 @@
 package android.video.cts;
 
 import android.cts.util.MediaUtils;
-import android.cts.util.DeviceReportLog;
 import android.graphics.ImageFormat;
 import android.graphics.Point;
 import android.media.Image;
@@ -36,8 +35,9 @@
 import android.util.Range;
 
 import android.cts.util.CtsAndroidTestCase;
-import com.android.cts.util.ResultType;
-import com.android.cts.util.ResultUnit;
+import com.android.compatibility.common.util.DeviceReportLog;
+import com.android.compatibility.common.util.ResultType;
+import com.android.compatibility.common.util.ResultUnit;
 import com.android.compatibility.common.util.Stat;
 import com.android.cts.util.TimeoutReq;
 
@@ -61,6 +61,7 @@
  */
 public class VideoEncoderDecoderTest extends CtsAndroidTestCase {
     private static final String TAG = "VideoEncoderDecoderTest";
+    private static final String REPORT_LOG_NAME = "CtsVideoTestCases";
     // this wait time affects fps as too big value will work as a blocker if device fps
     // is not very high.
     private static final long VIDEO_CODEC_WAIT_TIME_US = 5000;
@@ -123,7 +124,8 @@
         long now = System.currentTimeMillis();
         mRandom = new Random(now);
         mTestConfig = new TestConfig();
-        mReportLog = new DeviceReportLog();
+        String streamName = "video_encoder_decoder_test";
+        mReportLog = new DeviceReportLog(REPORT_LOG_NAME, streamName);
         super.setUp();
     }
 
@@ -137,7 +139,7 @@
         mUVDirectBuffer = null;
         mRandom = null;
         mTestConfig = null;
-        mReportLog.deliverReportToHost(getInstrumentation());
+        mReportLog.submit(getInstrumentation());
         super.tearDown();
     }
 
@@ -553,19 +555,19 @@
             // it will be good to clean everything to make every run the same.
             System.gc();
         }
-        mReportLog.printArray("encoder", encoderFpsResults, ResultType.HIGHER_BETTER,
+        mReportLog.addValues("encoder", encoderFpsResults, ResultType.HIGHER_BETTER,
                 ResultUnit.FPS);
-        mReportLog.printArray("rms error", decoderRmsErrorResults, ResultType.LOWER_BETTER,
+        mReportLog.addValues("rms_error", decoderRmsErrorResults, ResultType.LOWER_BETTER,
                 ResultUnit.NONE);
-        mReportLog.printArray("decoder", decoderFpsResults, ResultType.HIGHER_BETTER,
+        mReportLog.addValues("decoder", decoderFpsResults, ResultType.HIGHER_BETTER,
                 ResultUnit.FPS);
-        mReportLog.printArray("encoder decoder", totalFpsResults, ResultType.HIGHER_BETTER,
+        mReportLog.addValues("encoder_decoder", totalFpsResults, ResultType.HIGHER_BETTER,
                 ResultUnit.FPS);
-        mReportLog.printValue(mimeType + " encoder average fps for " + w + "x" + h,
+        mReportLog.addValue(mimeType + "_encoder_average_fps_for_" + w + "x" + h,
                 Stat.getAverage(encoderFpsResults), ResultType.HIGHER_BETTER, ResultUnit.FPS);
-        mReportLog.printValue(mimeType + " decoder average fps for " + w + "x" + h,
+        mReportLog.addValue(mimeType + "_decoder_average_fps_for_" + w + "x" + h,
                 Stat.getAverage(decoderFpsResults), ResultType.HIGHER_BETTER, ResultUnit.FPS);
-        mReportLog.printSummary("encoder decoder", Stat.getAverage(totalFpsResults),
+        mReportLog.setSummary("encoder_decoder", Stat.getAverage(totalFpsResults),
                 ResultType.HIGHER_BETTER, ResultUnit.FPS);
 
         boolean encTestPassed = false;
@@ -580,10 +582,10 @@
             }
 
             if (mTestConfig.mReportFrameTime) {
-                mReportLog.printValue(
+                mReportLog.addValue(
                         "encodertest#" + i + ": " + Arrays.toString(mEncoderFrameTimeDiff[i]),
                         0, ResultType.NEUTRAL, ResultUnit.NONE);
-                mReportLog.printValue(
+                mReportLog.addValue(
                         "decodertest#" + i + ": " + Arrays.toString(mDecoderFrameTimeDiff[i]),
                         0, ResultType.NEUTRAL, ResultUnit.NONE);
             }
