diff --git a/src/com/android/example/RebootTest.java b/src/com/android/example/RebootTest.java
index 8b4d41d..8a481d5 100644
--- a/src/com/android/example/RebootTest.java
+++ b/src/com/android/example/RebootTest.java
@@ -16,12 +16,12 @@
 
 package com.android.example;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.Option;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.IManagedTestDevice;
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 
@@ -45,13 +45,13 @@
     public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
         long start;
         Map<String, String> emptyMap = Collections.emptyMap();
-        TestIdentifier testId;
+        TestDescription testId;
         start = System.currentTimeMillis();
         listener.testRunStarted(String.format("#%d device reboots", mNumDeviceReboots),
                                 mNumDeviceReboots);
         try {
             for (int testCount = 0; testCount < mNumDeviceReboots; testCount++) {
-                testId = new TestIdentifier("RebootTest",
+                testId = new TestDescription("RebootTest",
                                             String.format("RebootLoop #%d", testCount));
                 listener.testStarted(testId);
                 try {
diff --git a/src/com/android/media/tests/AdbScreenrecordTest.java b/src/com/android/media/tests/AdbScreenrecordTest.java
index 34ecbde..0ebf7a1 100644
--- a/src/com/android/media/tests/AdbScreenrecordTest.java
+++ b/src/com/android/media/tests/AdbScreenrecordTest.java
@@ -16,13 +16,13 @@
 package com.android.media.tests;
 
 import com.android.ddmlib.CollectingOutputReceiver;
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.Option;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.IFileEntry;
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.util.CommandResult;
@@ -354,7 +354,7 @@
     /** Performs test initialization steps */
     private void initializeTest(ITestInvocationListener listener)
             throws UnsupportedOperationException, DeviceNotAvailableException {
-        TestIdentifier testId = new TestIdentifier(getClass().getCanonicalName(), mRunKey);
+        TestDescription testId = new TestDescription(getClass().getCanonicalName(), mRunKey);
 
         // Allocate helpers
         mTestRunHelper = new TestRunHelper(listener, testId);
diff --git a/src/com/android/media/tests/AudioJitterTest.java b/src/com/android/media/tests/AudioJitterTest.java
index 7058cc7..36e5e89 100644
--- a/src/com/android/media/tests/AudioJitterTest.java
+++ b/src/com/android/media/tests/AudioJitterTest.java
@@ -17,11 +17,11 @@
 package com.android.media.tests;
 
 import com.android.ddmlib.CollectingOutputReceiver;
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 
@@ -88,7 +88,7 @@
      */
     @Override
     public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
-        TestIdentifier testId = new TestIdentifier(getClass().getCanonicalName(), RUN_KEY);
+        TestDescription testId = new TestDescription(getClass().getCanonicalName(), RUN_KEY);
         ITestDevice device = getDevice();
 
         listener.testRunStarted(RUN_KEY, 0);
diff --git a/src/com/android/media/tests/AudioLoopbackTest.java b/src/com/android/media/tests/AudioLoopbackTest.java
index 8835b65..863e9aa 100644
--- a/src/com/android/media/tests/AudioLoopbackTest.java
+++ b/src/com/android/media/tests/AudioLoopbackTest.java
@@ -18,7 +18,6 @@
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
 import com.android.ddmlib.NullOutputReceiver;
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.media.tests.AudioLoopbackImageAnalyzer.Result;
 import com.android.media.tests.AudioLoopbackTestHelper.LogFileType;
 import com.android.media.tests.AudioLoopbackTestHelper.ResultData;
@@ -30,6 +29,7 @@
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.InputStreamSource;
 import com.android.tradefed.result.LogDataType;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.util.FileUtil;
@@ -492,7 +492,7 @@
             throws UnsupportedOperationException, DeviceNotAvailableException {
 
         mFileDataKeyMap = getLogFileDataKeyMap();
-        TestIdentifier testId = new TestIdentifier(getClass().getCanonicalName(), mRunKey);
+        TestDescription testId = new TestDescription(getClass().getCanonicalName(), mRunKey);
 
         // Allocate helpers
         mTestRunHelper = new TestRunHelper(listener, testId);
diff --git a/src/com/android/media/tests/Camera2FrameworkStressTest.java b/src/com/android/media/tests/Camera2FrameworkStressTest.java
index 8d62595..a6fb7ad 100644
--- a/src/com/android/media/tests/Camera2FrameworkStressTest.java
+++ b/src/com/android/media/tests/Camera2FrameworkStressTest.java
@@ -16,12 +16,12 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.IFileEntry;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.util.FileUtil;
 
 import java.io.BufferedReader;
@@ -80,7 +80,7 @@
         }
 
         @Override
-        public void handleMetricsOnTestEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        public void handleMetricsOnTestEnded(TestDescription test, Map<String, String> testMetrics) {
             if (testMetrics == null) {
                 return; // No-op if there is nothing to post.
             }
@@ -90,7 +90,7 @@
         }
 
         @Override
-        public void testEnded(TestIdentifier test, long endTime, Map<String, String> testMetrics) {
+        public void testEnded(TestDescription test, long endTime, Map<String, String> testMetrics) {
             if (hasTestRunFatalError()) {
                 CLog.v("The instrumentation result not found. Fall back to get the metrics from a "
                         + "log file. errorMsg: %s", getCollectingListener().getErrorMessage());
diff --git a/src/com/android/media/tests/Camera2LatencyTest.java b/src/com/android/media/tests/Camera2LatencyTest.java
index 5a06822..b405ece 100644
--- a/src/com/android/media/tests/Camera2LatencyTest.java
+++ b/src/com/android/media/tests/Camera2LatencyTest.java
@@ -16,11 +16,11 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -61,7 +61,7 @@
         }
 
         @Override
-        public void handleMetricsOnTestEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        public void handleMetricsOnTestEnded(TestDescription test, Map<String, String> testMetrics) {
             // Test metrics accumulated will be posted at the end of test run.
             getAggregatedMetrics().putAll(parseResults(test.getTestName(), testMetrics));
         }
diff --git a/src/com/android/media/tests/Camera2StressTest.java b/src/com/android/media/tests/Camera2StressTest.java
index 77868d9..b7e88b0 100644
--- a/src/com/android/media/tests/Camera2StressTest.java
+++ b/src/com/android/media/tests/Camera2StressTest.java
@@ -16,7 +16,6 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.IFileEntry;
@@ -24,6 +23,7 @@
 import com.android.tradefed.result.FileInputStreamSource;
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.LogDataType;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.util.FileUtil;
 
 import java.io.BufferedReader;
@@ -75,7 +75,7 @@
         }
 
         @Override
-        public void testEnded(TestIdentifier test, long endTime, Map<String, String> testMetrics) {
+        public void testEnded(TestDescription test, long endTime, Map<String, String> testMetrics) {
             if (hasTestRunFatalError()) {
                 CLog.v("The instrumentation result not found. Fall back to get the metrics from a "
                         + "log file. errorMsg: %s", getCollectingListener().getErrorMessage());
@@ -100,7 +100,7 @@
             super.testEnded(test, endTime, namedTestMetrics);
         }
 
-        private void postScreenshotOnFailure(TestIdentifier test) {
+        private void postScreenshotOnFailure(TestDescription test) {
             File tmpDir = null;
             try {
                 IFileEntry screenshotDir = getDevice().getFileEntry(FAILURE_SCREENSHOT_DIR);
diff --git a/src/com/android/media/tests/CameraBurstStartupTest.java b/src/com/android/media/tests/CameraBurstStartupTest.java
index 74d7e87..0065d1b 100644
--- a/src/com/android/media/tests/CameraBurstStartupTest.java
+++ b/src/com/android/media/tests/CameraBurstStartupTest.java
@@ -16,11 +16,11 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -59,7 +59,7 @@
         }
 
         @Override
-        public void handleMetricsOnTestEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        public void handleMetricsOnTestEnded(TestDescription test, Map<String, String> testMetrics) {
             // Test metrics accumulated will be posted at the end of test run.
             getAggregatedMetrics().putAll(parseResults(test.getTestName(), testMetrics));
         }
diff --git a/src/com/android/media/tests/CameraPerformanceTest.java b/src/com/android/media/tests/CameraPerformanceTest.java
index ebaad68..8e3855c 100644
--- a/src/com/android/media/tests/CameraPerformanceTest.java
+++ b/src/com/android/media/tests/CameraPerformanceTest.java
@@ -16,11 +16,11 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.util.FileUtil;
 
 import com.google.common.collect.ImmutableMap;
@@ -117,7 +117,7 @@
         }
 
         @Override
-        public void handleMetricsOnTestEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        public void handleMetricsOnTestEnded(TestDescription test, Map<String, String> testMetrics) {
             // Pass the test name for a key in the aggregated metrics, because
             // it is used to generate the key of the final metrics to post at the end of test run.
             for (Map.Entry<String, String> metric : testMetrics.entrySet()) {
diff --git a/src/com/android/media/tests/CameraShotLatencyTest.java b/src/com/android/media/tests/CameraShotLatencyTest.java
index f72ded7..f631878 100644
--- a/src/com/android/media/tests/CameraShotLatencyTest.java
+++ b/src/com/android/media/tests/CameraShotLatencyTest.java
@@ -16,11 +16,11 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -65,7 +65,7 @@
         }
 
         @Override
-        public void handleMetricsOnTestEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        public void handleMetricsOnTestEnded(TestDescription test, Map<String, String> testMetrics) {
             // Test metrics accumulated will be posted at the end of test run.
             getAggregatedMetrics().putAll(parseResults(test.getTestName(), testMetrics));
         }
diff --git a/src/com/android/media/tests/CameraStartupTest.java b/src/com/android/media/tests/CameraStartupTest.java
index c19cd2f..cda1bb3 100644
--- a/src/com/android/media/tests/CameraStartupTest.java
+++ b/src/com/android/media/tests/CameraStartupTest.java
@@ -16,12 +16,12 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.Option;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.targetprep.BuildError;
 import com.android.tradefed.targetprep.ITargetPreparer;
 import com.android.tradefed.targetprep.TargetSetupError;
@@ -190,7 +190,7 @@
         }
 
         @Override
-        public void handleMetricsOnTestEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        public void handleMetricsOnTestEnded(TestDescription test, Map<String, String> testMetrics) {
             // Test metrics accumulated will be posted at the end of test run.
             getAggregatedMetrics().putAll(parseResults(testMetrics));
         }
diff --git a/src/com/android/media/tests/CameraTestBase.java b/src/com/android/media/tests/CameraTestBase.java
index 8714a22..cd5c940 100644
--- a/src/com/android/media/tests/CameraTestBase.java
+++ b/src/com/android/media/tests/CameraTestBase.java
@@ -17,7 +17,6 @@
 package com.android.media.tests;
 
 import com.android.ddmlib.CollectingOutputReceiver;
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.IConfiguration;
 import com.android.tradefed.config.IConfigurationReceiver;
 import com.android.tradefed.config.Option;
@@ -30,6 +29,7 @@
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.InputStreamSource;
 import com.android.tradefed.result.LogDataType;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.testtype.InstrumentationTest;
@@ -251,7 +251,7 @@
          * @param test identifies the test
          * @param testMetrics a {@link Map} of the metrics emitted
          */
-        abstract public void handleMetricsOnTestEnded(TestIdentifier test,
+        abstract public void handleMetricsOnTestEnded(TestDescription test,
                 Map<String, String> testMetrics);
 
         /**
@@ -280,7 +280,7 @@
          * @param testMetrics a {@link Map} of the metrics emitted
          */
         @Override
-        public void testEnded(TestIdentifier test, long endTime, Map<String, String> testMetrics) {
+        public void testEnded(TestDescription test, long endTime, Map<String, String> testMetrics) {
             super.testEnded(test, endTime, testMetrics);
             handleMetricsOnTestEnded(test, testMetrics);
             stopDumping(test);
@@ -288,14 +288,14 @@
         }
 
         @Override
-        public void testStarted(TestIdentifier test, long startTime) {
+        public void testStarted(TestDescription test, long startTime) {
             super.testStarted(test, startTime);
             startDumping(test);
             mListener.testStarted(test, startTime);
         }
 
         @Override
-        public void testFailed(TestIdentifier test, String trace) {
+        public void testFailed(TestDescription test, String trace) {
             super.testFailed(test, trace);
             // If the test failed to run to complete, this is an exceptional case.
             // Let this test run fail so that it can rerun.
@@ -338,7 +338,7 @@
             mListener.testLog(dataName, dataType, dataStream);
         }
 
-        protected void startDumping(TestIdentifier test) {
+        protected void startDumping(TestDescription test) {
             if (shouldDumpMeminfo()) {
                 mMeminfoTimer.start(test);
             }
@@ -347,7 +347,7 @@
             }
         }
 
-        protected void stopDumping(TestIdentifier test) {
+        protected void stopDumping(TestDescription test) {
             InputStreamSource outputSource = null;
             File outputFile = null;
             if (shouldDumpMeminfo()) {
@@ -415,7 +415,7 @@
         }
 
         @Override
-        public void handleMetricsOnTestEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        public void handleMetricsOnTestEnded(TestDescription test, Map<String, String> testMetrics) {
             if (testMetrics == null) {
                 return; // No-op if there is nothing to post.
             }
@@ -460,7 +460,7 @@
             }
         }
 
-        synchronized void start(TestIdentifier test) {
+        synchronized void start(TestDescription test) {
             if (isRunning()) {
                 stop();
             }
@@ -493,7 +493,7 @@
             return mOutputFile;
         }
 
-        private File createOutputFile(TestIdentifier test) {
+        private File createOutputFile(TestDescription test) {
             try {
                 mOutputFile = FileUtil.createTempFile(
                         String.format("meminfo_%s", test.getTestName()), "csv");
@@ -608,7 +608,7 @@
             mPeriodMs = periodMs;
         }
 
-        synchronized void start(TestIdentifier test) {
+        synchronized void start(TestDescription test) {
             if (isRunning()) {
                 stop();
             }
@@ -641,7 +641,7 @@
             return mOutputFile;
         }
 
-        File createOutputFile(TestIdentifier test) {
+        File createOutputFile(TestDescription test) {
             try {
                 mOutputFile = FileUtil.createTempFile(
                         String.format("ps_%s", test.getTestName()), "txt");
diff --git a/src/com/android/media/tests/TestRunHelper.java b/src/com/android/media/tests/TestRunHelper.java
index f619772..168a130 100644
--- a/src/com/android/media/tests/TestRunHelper.java
+++ b/src/com/android/media/tests/TestRunHelper.java
@@ -15,9 +15,9 @@
  */
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -28,9 +28,9 @@
     private long mTestStartTime = -1;
     private long mTestStopTime = -1;
     private ITestInvocationListener mListener;
-    private TestIdentifier mTestId;
+    private TestDescription mTestId;
 
-    public TestRunHelper(ITestInvocationListener listener, TestIdentifier testId) {
+    public TestRunHelper(ITestInvocationListener listener, TestDescription testId) {
         mListener = listener;
         mTestId = testId;
     }
diff --git a/src/com/android/media/tests/VideoMultimeterRunner.java b/src/com/android/media/tests/VideoMultimeterRunner.java
index 13fd4d1..8dd0825 100644
--- a/src/com/android/media/tests/VideoMultimeterRunner.java
+++ b/src/com/android/media/tests/VideoMultimeterRunner.java
@@ -16,12 +16,12 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.Option;
 import com.android.tradefed.config.Option.Importance;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.util.CommandResult;
@@ -61,7 +61,7 @@
     public void run(ITestInvocationListener listener)
             throws DeviceNotAvailableException {
         long durationMs = 0;
-        TestIdentifier testId = new TestIdentifier(getClass()
+        TestDescription testId = new TestDescription(getClass()
                 .getCanonicalName(), RUN_KEY);
 
         listener.testRunStarted(RUN_KEY, 0);
diff --git a/src/com/android/media/tests/VideoMultimeterTest.java b/src/com/android/media/tests/VideoMultimeterTest.java
index 038803f..1a0f23e 100644
--- a/src/com/android/media/tests/VideoMultimeterTest.java
+++ b/src/com/android/media/tests/VideoMultimeterTest.java
@@ -16,7 +16,6 @@
 
 package com.android.media.tests;
 
-import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.Option;
 import com.android.tradefed.config.Option.Importance;
 import com.android.tradefed.device.CollectingOutputReceiver;
@@ -26,6 +25,7 @@
 import com.android.tradefed.result.ByteArrayInputStreamSource;
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.LogDataType;
+import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.util.CommandResult;
@@ -333,7 +333,7 @@
     @Override
     public void run(ITestInvocationListener listener)
             throws DeviceNotAvailableException {
-        TestIdentifier testId = new TestIdentifier(getClass()
+        TestDescription testId = new TestDescription(getClass()
                 .getCanonicalName(), RUN_KEY);
 
         listener.testRunStarted(RUN_KEY, 0);
