diff --git a/tests/tests/uirendering/src/android/uirendering/cts/bitmapcomparers/MSSIMComparer.java b/tests/tests/uirendering/src/android/uirendering/cts/bitmapcomparers/MSSIMComparer.java
index e766f63..56d9cf5 100644
--- a/tests/tests/uirendering/src/android/uirendering/cts/bitmapcomparers/MSSIMComparer.java
+++ b/tests/tests/uirendering/src/android/uirendering/cts/bitmapcomparers/MSSIMComparer.java
@@ -15,7 +15,6 @@
  */
 package android.uirendering.cts.bitmapcomparers;
 
-import com.android.cts.uirendering.R;
 import com.android.cts.uirendering.ScriptC_MSSIMComparer;
 
 import android.content.res.Resources;
diff --git a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/InfrastructureTests.java b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/InfrastructureTests.java
index c17e106..c86ff76 100644
--- a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/InfrastructureTests.java
+++ b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/InfrastructureTests.java
@@ -15,6 +15,7 @@
  */
 package android.uirendering.cts.testclasses;
 
+import android.graphics.Point;
 import com.android.cts.uirendering.R;
 
 import android.graphics.Canvas;
@@ -22,7 +23,6 @@
 import android.graphics.Rect;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.uirendering.cts.bitmapcomparers.BitmapComparer;
-import android.uirendering.cts.bitmapcomparers.ExactComparer;
 import android.uirendering.cts.bitmapcomparers.MSSIMComparer;
 import android.uirendering.cts.bitmapverifiers.RectVerifier;
 import android.uirendering.cts.testinfrastructure.ActivityTestBase;
@@ -35,7 +35,7 @@
     @SmallTest
     public void testScreenshot() {
         for (int i = 0 ; i < 500 ; i ++) {
-            takeScreenshot();
+            takeScreenshot(new Point());
             System.gc();
         }
     }
diff --git a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/view/UnclippedBlueView.java b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/view/UnclippedBlueView.java
index 7a16e3c..b8935fb 100644
--- a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/view/UnclippedBlueView.java
+++ b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/view/UnclippedBlueView.java
@@ -4,7 +4,6 @@
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.util.AttributeSet;
-import android.view.View;
 import android.widget.FrameLayout;
 
 public class UnclippedBlueView extends FrameLayout {
diff --git a/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/ActivityTestBase.java b/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/ActivityTestBase.java
index e3ad5a6..e1c09f5 100644
--- a/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/ActivityTestBase.java
+++ b/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/ActivityTestBase.java
@@ -17,6 +17,7 @@
 
 import android.annotation.Nullable;
 import android.graphics.Bitmap;
+import android.graphics.Point;
 import android.renderscript.Allocation;
 import android.renderscript.RenderScript;
 import android.test.ActivityInstrumentationTestCase2;
@@ -123,21 +124,19 @@
         return pixels;
     }
 
-    private Bitmap takeScreenshotImpl() {
+    private Bitmap takeScreenshotImpl(Point testOffset) {
         Bitmap source = getInstrumentation().getUiAutomation().takeScreenshot();
-        int x = (source.getWidth() - TEST_WIDTH) / 2;
-        int y = (source.getHeight() - TEST_HEIGHT) / 2;
-        return Bitmap.createBitmap(source, x, y, TEST_WIDTH, TEST_HEIGHT);
+        return Bitmap.createBitmap(source, testOffset.x, testOffset.y, TEST_WIDTH, TEST_HEIGHT);
     }
 
-    public Bitmap takeScreenshot() {
+    public Bitmap takeScreenshot(Point testOffset) {
         getInstrumentation().waitForIdleSync();
-        Bitmap bitmap1 = takeScreenshotImpl();
+        Bitmap bitmap1 = takeScreenshotImpl(testOffset);
         Bitmap bitmap2;
         int count = 0;
         do  {
             bitmap2 = bitmap1;
-            bitmap1 = takeScreenshotImpl();
+            bitmap1 = takeScreenshotImpl(testOffset);
             count++;
         } while (count < MAX_SCREEN_SHOTS &&
                 !Arrays.equals(getBitmapPixels(bitmap2), getBitmapPixels(bitmap1)));
@@ -155,10 +154,11 @@
      * Used to execute a specific part of a test and get the resultant bitmap
      */
     protected Bitmap captureRenderSpec(TestCase testCase) {
-        getActivity().enqueueRenderSpecAndWait(testCase.layoutID, testCase.canvasClient,
+        Point testOffset = getActivity().enqueueRenderSpecAndWait(
+                testCase.layoutID, testCase.canvasClient,
                 testCase.webViewUrl, testCase.viewInitializer, testCase.useHardware);
         testCase.wasTestRan = true;
-        return takeScreenshot();
+        return takeScreenshot(testOffset);
     }
 
     /**
@@ -229,11 +229,6 @@
          * every test case is tested against it.
          */
         public void runWithComparer(BitmapComparer bitmapComparer) {
-            if (getActivity().getOnWatch()) {
-                Log.d(TAG, getName() + "skipped");
-                return;
-            }
-
             if (mTestCases.size() == 0) {
                 throw new IllegalStateException("Need at least one test to run");
             }
@@ -252,11 +247,6 @@
          * the verifier given.
          */
         public void runWithVerifier(BitmapVerifier bitmapVerifier) {
-            if (getActivity().getOnWatch()) {
-                Log.d(TAG, getName() + "skipped");
-                return;
-            }
-
             if (mTestCases.size() == 0) {
                 throw new IllegalStateException("Need at least one test to run");
             }
diff --git a/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/DrawActivity.java b/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/DrawActivity.java
index 65ed7ee..4bd513a 100644
--- a/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/DrawActivity.java
+++ b/tests/tests/uirendering/src/android/uirendering/cts/testinfrastructure/DrawActivity.java
@@ -17,7 +17,7 @@
 
 import android.annotation.Nullable;
 import android.app.Activity;
-import android.content.res.Configuration;
+import android.graphics.Point;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -32,28 +32,21 @@
  * A generic activity that uses a view specified by the user.
  */
 public class DrawActivity extends Activity {
-    private final static long TIME_OUT = 10000;
-    private final Object mLock = new Object();
+    private final static long TIME_OUT_MS = 10000;
+    private final Point mLock = new Point();
     public static final int MIN_NUMBER_OF_DRAWS = 20;
 
     private Handler mHandler;
     private View mView;
-    private boolean mOnWatch;
 
     public void onCreate(Bundle bundle){
         super.onCreate(bundle);
         getWindow().getDecorView().setSystemUiVisibility(
                 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);
         mHandler = new RenderSpecHandler();
-        int uiMode = getResources().getConfiguration().uiMode;
-        mOnWatch = (uiMode & Configuration.UI_MODE_TYPE_WATCH) == Configuration.UI_MODE_TYPE_WATCH;
     }
 
-    public boolean getOnWatch() {
-        return mOnWatch;
-    }
-
-    public void enqueueRenderSpecAndWait(int layoutId, CanvasClient canvasClient, String webViewUrl,
+    public Point enqueueRenderSpecAndWait(int layoutId, CanvasClient canvasClient, String webViewUrl,
             @Nullable ViewInitializer viewInitializer, boolean useHardware) {
         ((RenderSpecHandler) mHandler).setViewInitializer(viewInitializer);
         int arg2 = (useHardware ? View.LAYER_TYPE_NONE : View.LAYER_TYPE_SOFTWARE);
@@ -65,13 +58,16 @@
             mHandler.obtainMessage(RenderSpecHandler.LAYOUT_MSG, layoutId, arg2).sendToTarget();
         }
 
+        Point point = new Point();
         synchronized (mLock) {
             try {
-                mLock.wait(TIME_OUT);
+                mLock.wait(TIME_OUT_MS);
+                point.set(mLock.x, mLock.y);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
+        return point;
     }
 
     private class RenderSpecHandler extends Handler {
@@ -137,11 +133,13 @@
 
         @Override
         public boolean onPreDraw() {
+
             mCurrentDraws++;
             if (mCurrentDraws < MIN_NUMBER_OF_DRAWS + mExtraDraws) {
                 mView.postInvalidate();
             } else {
                 synchronized (mLock) {
+                    mLock.set(mView.getLeft(), mView.getTop());
                     mLock.notify();
                 }
                 mView.getViewTreeObserver().removeOnPreDrawListener(this);
