Merge "Update tilebenchmark to work with current drawing infrastructure"
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index a284a17..ac8693d 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -4538,7 +4538,7 @@
             boolean isPictureAfterFirstLayout, boolean registerPageSwapCallback) {
         if (mNativeClass == 0)
             return;
-        nativeSetBaseLayer(layer, invalRegion, showVisualIndicator,
+        nativeSetBaseLayer(mNativeClass, layer, invalRegion, showVisualIndicator,
                 isPictureAfterFirstLayout, registerPageSwapCallback);
         if (mHTML5VideoViewProxy != null) {
             mHTML5VideoViewProxy.setBaseLayer(layer);
@@ -9493,7 +9493,12 @@
 
     /** @hide call pageSwapCallback upon next page swap */
     protected void registerPageSwapCallback() {
-        nativeRegisterPageSwapCallback();
+        nativeRegisterPageSwapCallback(mNativeClass);
+    }
+
+    /** @hide discard all textures from tiles */
+    protected void discardAllTextures() {
+        nativeDiscardAllTextures();
     }
 
     /**
@@ -9643,7 +9648,8 @@
     private native void     nativeSetFindIsEmpty();
     private native void     nativeSetFindIsUp(boolean isUp);
     private native void     nativeSetHeightCanMeasure(boolean measure);
-    private native void     nativeSetBaseLayer(int layer, Region invalRegion,
+    private native void     nativeSetBaseLayer(int nativeInstance,
+            int layer, Region invalRegion,
             boolean showVisualIndicator, boolean isPictureAfterFirstLayout,
             boolean registerPageSwapCallback);
     private native int      nativeGetBaseLayer();
@@ -9657,7 +9663,8 @@
     private native void     nativeStopGL();
     private native Rect     nativeSubtractLayers(Rect content);
     private native int      nativeTextGeneration();
-    private native void     nativeRegisterPageSwapCallback();
+    private native void     nativeRegisterPageSwapCallback(int nativeInstance);
+    private native void     nativeDiscardAllTextures();
     private native void     nativeTileProfilingStart();
     private native float    nativeTileProfilingStop();
     private native void     nativeTileProfilingClear();
diff --git a/tests/TileBenchmark/res/layout/main.xml b/tests/TileBenchmark/res/layout/main.xml
index 577c466..1b39d5d 100644
--- a/tests/TileBenchmark/res/layout/main.xml
+++ b/tests/TileBenchmark/res/layout/main.xml
@@ -18,46 +18,52 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     >
-    <LinearLayout
-        android:id="@+id/top"
-        android:layout_width="match_parent"
+    <HorizontalScrollView
+        android:id="@+id/horizontalScrollView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         >
-        <Spinner
-            android:id="@+id/movement"
-            android:layout_width="wrap_content"
+        <LinearLayout
+            android:id="@+id/top"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:prompt="@string/movement_method"
-            />
-        <Spinner
-            android:id="@+id/velocity"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center_horizontal"
-            android:prompt="@string/desired_scroll_velocity"
-            />
-        <ToggleButton
-            android:id="@+id/capture"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textOn="@string/capture_stop"
-            android:textOff="@string/capture_start"
-            />
-        <EditText
-            android:id="@+id/url"
-            android:layout_width="0dip"
-            android:layout_height="wrap_content"
-            android:inputType="textUri"
-            android:imeOptions="actionGo"
-            android:layout_weight="1"
-            />
-        <Button
-            android:id="@+id/inspect"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/inspect_log"
-            />
-    </LinearLayout>
+            >
+            <Spinner
+                android:id="@+id/movement"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:prompt="@string/movement_method"
+                />
+            <Spinner
+                android:id="@+id/velocity"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_horizontal"
+                android:prompt="@string/desired_scroll_velocity"
+                />
+            <ToggleButton
+                android:id="@+id/capture"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textOn="@string/capture_stop"
+                android:textOff="@string/capture_start"
+                />
+            <EditText
+                android:id="@+id/url"
+                android:layout_width="400dp"
+                android:layout_height="wrap_content"
+                android:inputType="textUri"
+                android:imeOptions="actionGo|flagNoExtractUi"
+                android:layout_weight="1"
+                />
+            <Button
+                android:id="@+id/inspect"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/inspect_log"
+                />
+        </LinearLayout>
+    </HorizontalScrollView>
     <com.test.tilebenchmark.ProfiledWebView
         android:id="@+id/web"
         android:layout_width="match_parent"
diff --git a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java
index e7a21ad..d38d006 100644
--- a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java
+++ b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java
@@ -276,6 +276,7 @@
         settings.setEnableSmoothTransition(true);
         settings.setBuiltInZoomControls(true);
         settings.setLoadWithOverviewMode(true);
+        settings.setProperty("use_minimal_memory", "false"); // prefetch tiles, as browser does
         mWeb.setWebViewClient(new LoggingWebViewClient());
 
         // URL text entry
diff --git a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java
index 10802b4..83f1668 100644
--- a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java
+++ b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java
@@ -33,8 +33,7 @@
     private ProfileCallback mCallback;
     private long mContentInvalMillis;
     private boolean mHadToBeForced = false;
-    private int mTestCount = 0;
-    private static final int LOAD_STALL_MILLIS = 5000; // nr of millis after load,
+    private static final int LOAD_STALL_MILLIS = 2000; // nr of millis after load,
                                                        // before test is forced
 
     public ProfiledWebView(Context context) {
@@ -76,13 +75,6 @@
         mIsScrolling = autoScrolling;
         mCallback = callback;
         mIsTesting = false;
-        mContentInvalMillis = System.currentTimeMillis();
-        registerPageSwapCallback();
-        contentInvalidateAll();
-        invalidate();
-
-        mTestCount++;
-        final int testCount = mTestCount;
 
         if (autoScrolling) {
             // after a while, force it to start even if the pages haven't swapped
@@ -93,13 +85,12 @@
 
                 @Override
                 public void onFinish() {
-                    if (testCount == mTestCount && !mIsTesting) {
-                        mHadToBeForced = true;
-                        Log.d("ProfiledWebView", "num " + testCount
-                                + " forcing a page swap with a scroll...");
-                        scrollBy(0, 1);
-                        invalidate(); // ensure a redraw so that auto-scrolling can occur
-                    }
+                    // invalidate all content, and kick off redraw
+                    registerPageSwapCallback();
+                    discardAllTextures();
+                    invalidate();
+
+                    mContentInvalMillis = System.currentTimeMillis();
                 }
             }.start();
         }