Jank benchmark tests for APIDemos

Change-Id: I64dfe784fee36d195d65f5c9252ff2d6342cdc83
diff --git a/jank/jankmicrobenchmark/src/com/android/jankmicrobenchmark/janktests/ApiDemoJankTests.java b/jank/jankmicrobenchmark/src/com/android/jankmicrobenchmark/janktests/ApiDemoJankTests.java
index 3df44c3..07492f3 100644
--- a/jank/jankmicrobenchmark/src/com/android/jankmicrobenchmark/janktests/ApiDemoJankTests.java
+++ b/jank/jankmicrobenchmark/src/com/android/jankmicrobenchmark/janktests/ApiDemoJankTests.java
@@ -16,13 +16,16 @@
 
 package com.android.jankmicrobenchmark.janktests;
 
+import android.os.Bundle;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.support.test.jank.GfxMonitor;
 import android.support.test.jank.JankTest;
 import android.support.test.jank.JankTestBase;
 import android.support.test.launcherhelper.ILauncherStrategy;
 import android.support.test.launcherhelper.LauncherStrategyFactory;
 import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.Direction;
 import android.support.test.uiautomator.UiDevice;
 import android.support.test.uiautomator.UiObject2;
 import android.support.test.uiautomator.UiObjectNotFoundException;
@@ -69,21 +72,85 @@
             throws UiObjectNotFoundException {
         mLauncherStrategy.launch(APP_NAME, PACKAGE_NAME);
         UiObject2 animation = mDevice.wait(Until.findObject(
-                By.res(RES_PACKAGE_NAME).text("Animation")), LONG_TIMEOUT);
+                By.res(RES_PACKAGE_NAME, "text1").text("Animation")), LONG_TIMEOUT);
         Assert.assertNotNull("Animation is null", animation);
         animation.click();
         UiObject2 option = mDevice.wait(Until.findObject(
-                By.res(RES_PACKAGE_NAME).text(optionName)), LONG_TIMEOUT);
+                By.res(RES_PACKAGE_NAME, "text1").text(optionName)), LONG_TIMEOUT);
+        int maxAttempt = 3;
+        while (option == null && maxAttempt > 0) {
+            mDevice.wait(Until.findObject(By.res(RES_PACKAGE_NAME, "content")), LONG_TIMEOUT)
+                    .scroll(Direction.DOWN, 1.0f);
+            option = mDevice.wait(Until.findObject(By.res(RES_PACKAGE_NAME, "text1")
+                    .text(optionName)), LONG_TIMEOUT);
+            --maxAttempt;
+        }
         Assert.assertNotNull("Option is null", option);
         option.click();
     }
 
-    private void selectLoadingOption() {
-        // To do
+    // Since the app doesn't start at the first page when reloaded after the first time,
+    // ensuring that we head back to the first screen before going Home so we're always
+    // on screen one.
+    public void goBackHome(Bundle metrics) throws UiObjectNotFoundException {
+        String launcherPackage = mDevice.getLauncherPackageName();
+        UiObject2 homeScreen = mDevice.findObject(By.res(launcherPackage,"workspace"));
+        while (homeScreen == null) {
+            mDevice.pressBack();
+            homeScreen = mDevice.findObject(By.res(launcherPackage,"workspace"));
+        }
+        super.afterTest(metrics);
     }
-    @JankTest(beforeTest="selectLoadingOption", expectedFrames=EXPECTED_FRAMES)
+
+    // Loads the 'activity transition' animation
+    public void selectActivityTransitionAnimation() throws UiObjectNotFoundException {
+         launchApiDemosAndSelectAnimation("Activity Transition");
+    }
+
+    // Measures jank for activity transition animation
+    @JankTest(beforeTest="selectActivityTransitionAnimation", afterTest="goBackHome",
+        expectedFrames=EXPECTED_FRAMES)
     @GfxMonitor(processName=PACKAGE_NAME)
-    public void testLoadingJank() {
-        // To do
+    public void testActivityTransitionAnimation() {
+        for (int i = 0; i < INNER_LOOP; i++) {
+            UiObject2 redBallTile = mDevice.findObject(By.res(PACKAGE_NAME, "ball"));
+            redBallTile.click();
+            SystemClock.sleep(LONG_TIMEOUT);
+            mDevice.pressBack();
+        }
+    }
+
+    // Loads the 'view flip' animation
+    public void selectViewFlipAnimation() throws UiObjectNotFoundException {
+        launchApiDemosAndSelectAnimation("View Flip");
+    }
+
+    // Measures jank for view flip animation
+    @JankTest(beforeTest="selectViewFlipAnimation", afterTest="goBackHome",
+        expectedFrames=EXPECTED_FRAMES)
+    @GfxMonitor(processName=PACKAGE_NAME)
+    public void testViewFlipAnimation() {
+        for (int i = 0; i < INNER_LOOP; i++) {
+            UiObject2 flipButton = mDevice.findObject(By.res(PACKAGE_NAME, "button"));
+            flipButton.click();
+            SystemClock.sleep(LONG_TIMEOUT);
+        }
+    }
+
+    // Loads the 'cloning' animation
+    public void selectCloningAnimation() throws UiObjectNotFoundException {
+        launchApiDemosAndSelectAnimation("Cloning");    
+    }
+
+    // Measures jank for cloning animation
+    @JankTest(beforeTest="selectCloningAnimation", afterTest="goBackHome",
+        expectedFrames=EXPECTED_FRAMES)
+    @GfxMonitor(processName=PACKAGE_NAME)
+    public void testCloningAnimation() {
+        for (int i = 0; i < INNER_LOOP; i++) {
+            UiObject2 runCloningButton = mDevice.findObject(By.res(PACKAGE_NAME, "startButton"));
+            runCloningButton.click();
+            SystemClock.sleep(LONG_TIMEOUT);
+        }
     }
 }