diff options
Diffstat (limited to 'chromium/tests')
-rw-r--r-- | chromium/tests/UbWebViewJankTests/Android.mk | 26 | ||||
-rw-r--r-- | chromium/tests/UbWebViewJankTests/AndroidManifest.xml | 29 | ||||
-rw-r--r-- | chromium/tests/UbWebViewJankTests/src/com/android/webview/chromium/tests/jank/WebViewFlingTest.java | 116 | ||||
-rwxr-xr-x | chromium/tests/data/heavy/index.html | 114 | ||||
-rwxr-xr-x | chromium/tests/data/light/index.html | 26 | ||||
-rw-r--r-- | chromium/tests/java/Android.mk | 32 | ||||
-rw-r--r-- | chromium/tests/java/src/com/android/uiautomator/platform/WebViewFlingTest.java | 123 | ||||
-rw-r--r-- | chromium/tests/prebuilts/android-janktesthelper.jar | bin | 0 -> 19705 bytes |
8 files changed, 466 insertions, 0 deletions
diff --git a/chromium/tests/UbWebViewJankTests/Android.mk b/chromium/tests/UbWebViewJankTests/Android.mk new file mode 100644 index 0000000..0c2d128 --- /dev/null +++ b/chromium/tests/UbWebViewJankTests/Android.mk @@ -0,0 +1,26 @@ +# Copyright 2014 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_PACKAGE_NAME := UbWebViewJankTests +LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_MODULE_TAGS := tests + +LOCAL_STATIC_JAVA_LIBRARIES := ub-uiautomator ub-janktesthelper + +LOCAK_SDK_VERSION := current + +include $(BUILD_PACKAGE) diff --git a/chromium/tests/UbWebViewJankTests/AndroidManifest.xml b/chromium/tests/UbWebViewJankTests/AndroidManifest.xml new file mode 100644 index 0000000..cf1adb6 --- /dev/null +++ b/chromium/tests/UbWebViewJankTests/AndroidManifest.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.webview.chromium.tests.jank"> + + <application> + <uses-library android:name="android.test.runner" /> + </application> + + <instrumentation + android:name="android.test.InstrumentationTestRunner" + android:targetPackage="com.android.webview.chromium.tests.jank" + android:label="Chromium Jank Tests" /> + +</manifest> diff --git a/chromium/tests/UbWebViewJankTests/src/com/android/webview/chromium/tests/jank/WebViewFlingTest.java b/chromium/tests/UbWebViewJankTests/src/com/android/webview/chromium/tests/jank/WebViewFlingTest.java new file mode 100644 index 0000000..efd9f27 --- /dev/null +++ b/chromium/tests/UbWebViewJankTests/src/com/android/webview/chromium/tests/jank/WebViewFlingTest.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.webview.chromium.tests.jank; + +import android.content.Intent; +import android.net.Uri; +import android.os.SystemClock; +import android.support.test.jank.JankTest; +import android.support.test.jank.JankTestBase; +import android.support.test.jank.JankType; +import android.support.test.uiautomator.UiDevice; +import android.support.test.uiautomator.UiObjectNotFoundException; +import android.support.test.uiautomator.UiScrollable; +import android.support.test.uiautomator.UiSelector; + +import java.io.File; +import java.io.IOException; + +/** + * Jank test for Android Webview. + * + * To run + * 1) Install the test application (com.android.webview.chromium.shell) + * 2) Place a directories containing the test pages on the test device in + * $EXTERNAL_STORAGE/AwJankPages. Each directory should contain an index.html + * file as the main file of the test page. + * 3) Build this test and install the resulting apk file + * 4) Run the test using the command: + * adb shell am instrument -e Url URL -w \ + * com.android.webview.chromium.tests.jank/android.test.InstrumentationTestRunner + * + */ +public class WebViewFlingTest extends JankTestBase { + + private static final long TEST_DELAY_TIME_MS = 2 * 1000; // 2 seconds + private static final long PAGE_LOAD_DELAY_TIMEOUT_MS = 10 * 1000; // 10 seconds + private static final long PAGE_LOAD_DELAY_TIME_MS = 20 * 1000; // 20 seconds + private static final int MIN_DATA_SIZE = 50; + private static final long DEFAULT_ANIMATION_TIME = 2 * 1000; + private static final String CHROMIUM_SHELL_APP = "com.android.webview.chromium.shell"; + private static final String CHROMIUM_SHELL_ACTIVITY = CHROMIUM_SHELL_APP + ".JankActivity"; + private static final String AW_CONTAINER = "com.android.webview.chromium.shell:id/container"; + + private UiDevice mDevice; + private UiScrollable mWebPageDisplay = null; + + + /** + * {@inheritDoc} + */ + @Override + protected void setUp() throws Exception { + super.setUp(); + + mDevice = UiDevice.getInstance(getInstrumentation()); + mDevice.setOrientationNatural(); + + // Get the URL argument + String url = getArguments().getString("Url"); + File webpage = new File(url); + assertNotNull("No test pages", webpage); + + // Launch the chromium shell + Intent intent = new Intent(Intent.ACTION_DEFAULT, + Uri.parse("file://" + webpage.getAbsolutePath())); + intent.setClassName(CHROMIUM_SHELL_APP, CHROMIUM_SHELL_ACTIVITY); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getInstrumentation().getContext().startActivity(intent); + SystemClock.sleep(PAGE_LOAD_DELAY_TIME_MS); + } + + @Override + public void beforeLoop() throws UiObjectNotFoundException { + getContainer().flingToBeginning(20); + SystemClock.sleep(TEST_DELAY_TIME_MS); + } + + @JankTest(type=JankType.CONTENT_FRAMES, expectedFrames=MIN_DATA_SIZE) + public void testBrowserPageFling() throws UiObjectNotFoundException, IOException { + getContainer().flingForward(); + SystemClock.sleep(DEFAULT_ANIMATION_TIME); + } + + /** + * {@inheritDoc} + */ + @Override + protected void tearDown() throws Exception { + mDevice.unfreezeRotation(); + super.tearDown(); + } + + private UiScrollable getContainer() { + if (mWebPageDisplay == null) { + mWebPageDisplay = + new UiScrollable(new UiSelector().resourceId(AW_CONTAINER).instance(0)); + assertTrue("Failed to get web container", + mWebPageDisplay.waitForExists(PAGE_LOAD_DELAY_TIMEOUT_MS)); + } + return mWebPageDisplay; + } +} diff --git a/chromium/tests/data/heavy/index.html b/chromium/tests/data/heavy/index.html new file mode 100755 index 0000000..6c47600 --- /dev/null +++ b/chromium/tests/data/heavy/index.html @@ -0,0 +1,114 @@ +<html> + <head> + <style> +@-webkit-keyframes transformations { + 0% {-webkit-transform: translate3d(0px,0,0);} + 50% {-webkit-transform: translate3d(30px,0,0);} +100% {-webkit-transform: translate3d(00px,0,0);} +} + + #fixed {background-color: red; position: fixed; width: 200px; height: 400px; z-index: -1;} + #layer {color: white; background-color: blue; -webkit-transform: translate3d(0,0,0); position: absolute; top: 40; left: 30; width: 500px; height: 15000px; +-webkit-animation-direction: normal; +-webkit-animation-duration: 1s; +-webkit-animation-iteration-count: infinite; +-webkit-animation-name: transformations; +-webkit-animation-timing-function: ease; +} + + #layer2 {color: white; background-color: green; -webkit-transform: translate3d(0,0,0) rotate3d(0,0,1,1deg); position: absolute; top: 40; left: 120; width: 1000px; height: 15000px;} + #layer3 {color: white; background-color: red; -webkit-transform: translate3d(0,0,0) rotate3d(0,0,1,181deg); position: absolute; top: 40; left: 150; width: 750px; height: 15000px;} + #layer4 {color: white; background-color: black; -webkit-transform: translate3d(0,0,0); position: absolute; top: 40; left: 200; width: 750px; height: 15000px; opacity: 0.5;} + </style> + </head> + + <body bgcolor=gray> + <div id="fixed"> fixed layer </div> + <div> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + </div> + <div id="layer"> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + </div> + <div id="layer2"> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + </div> + + <div id="layer3"> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + </div> + <div id="layer4"> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + </div> + </body> +</html> diff --git a/chromium/tests/data/light/index.html b/chromium/tests/data/light/index.html new file mode 100755 index 0000000..128950a --- /dev/null +++ b/chromium/tests/data/light/index.html @@ -0,0 +1,26 @@ +<html> + <body bgcolor=gray> + <div> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + 1lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 2lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 3lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 4lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 5lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> 6lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> lorem</br> + </div> + </body> +</html> diff --git a/chromium/tests/java/Android.mk b/chromium/tests/java/Android.mk new file mode 100644 index 0000000..36f94e7 --- /dev/null +++ b/chromium/tests/java/Android.mk @@ -0,0 +1,32 @@ +# Copyright 2014 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +local_target_dir := $(TARGET_OUT_DATA)/local/tmp +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_MODULE := WebViewJankTests + +LOCAL_JAVA_LIBRARIES := uiautomator +LOCAL_STATIC_JAVA_LIBRARIES := webview-janktesthelper +LOCAL_MODULE_TAGS := tests +include $(BUILD_JAVA_LIBRARY) + +#### +# TODO: remove our copy of JTH prebuilt (b/13743200) +include $(CLEAR_VARS) +LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := webview-janktesthelper:../prebuilts/android-janktesthelper.jar + +include $(BUILD_MULTI_PREBUILT) diff --git a/chromium/tests/java/src/com/android/uiautomator/platform/WebViewFlingTest.java b/chromium/tests/java/src/com/android/uiautomator/platform/WebViewFlingTest.java new file mode 100644 index 0000000..42303aa --- /dev/null +++ b/chromium/tests/java/src/com/android/uiautomator/platform/WebViewFlingTest.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.android.uiautomator.platform; + +import com.android.uiautomator.core.UiObjectNotFoundException; +import com.android.uiautomator.core.UiScrollable; +import com.android.uiautomator.core.UiSelector; +import com.android.uiautomator.janktesthelper.JankTestBase; +import java.io.File; +import java.io.IOException; + +/** + * Jank test for Android Webview. + * + * To run + * 1) Install the test application (com.android.webview.chromium.shell) + * 2) Place a directories containing the test pages on the test device in + * $EXTERNAL_STORAGE/AwJankPages. Each directory should contain an index.html + * file as the main file of the test page. + * 3) Build this test and push the resulting Jar file to /data/local/tmp/WebViewJankTests.jar + * 4) Run the test using the command: + * adb shell uiautomator runtest WebViewJankTests.jar + * + * The test will run for each of the test pages. The results will be saved on the device in + * /data/local/tmp/jankoutput.txt. + */ +public class WebViewFlingTest extends JankTestBase { + + private static final long TEST_DELAY_TIME_MS = 2 * 1000; // 2 seconds + private static final long PAGE_LOAD_DELAY_TIMEOUT_MS = 10 * 1000; // 10 seconds + private static final long PAGE_LOAD_DELAY_TIME_MS = 20 * 1000; // 20 seconds + private static final int MIN_DATA_SIZE = 50; + private static final String AW_WINDOW_NAME = + "com.android.webview.chromium.shell/com.android.webview.chromium.shell.JankActivity"; + private static final String AW_CONTAINER = "com.android.webview.chromium.shell:id/container"; + private static final String START_CMD = + "am start -n com.android.webview.chromium.shell/.JankActivity -d "; + private UiScrollable mWebPageDisplay = null; + + public void testBrowserPageFling() throws UiObjectNotFoundException, IOException { + String url = mParams.getString("Url"); + File webpage = new File(url); + assertNotNull("No test pages", webpage); + runBrowserPageFling(webpage); + } + + private void resetFlingTest() throws UiObjectNotFoundException { + getContainer().flingToBeginning(20); + } + + private void loadUrl(String url) throws IOException { + Runtime.getRuntime().exec(START_CMD + url); + // Need to find a good way of detecting when the page is loaded + sleep(PAGE_LOAD_DELAY_TIME_MS); + } + + private void flingForward() throws UiObjectNotFoundException { + getContainer().flingForward(); + } + + private UiScrollable getContainer() { + if (mWebPageDisplay == null) { + mWebPageDisplay = + new UiScrollable(new UiSelector().resourceId(AW_CONTAINER).instance(0)); + assertTrue("Failed to get web container", + mWebPageDisplay.waitForExists(PAGE_LOAD_DELAY_TIMEOUT_MS)); + } + return mWebPageDisplay; + } + + /** + * {@inheritDoc} + */ + @Override + protected void setUp() throws Exception { + super.setUp(); + getUiDevice().setOrientationNatural(); + } + + /** + * {@inheritDoc} + */ + @Override + protected void tearDown() throws Exception { + getUiDevice().unfreezeRotation(); + super.tearDown(); + } + + private void runBrowserPageFling(File testFile) throws UiObjectNotFoundException, IOException { + loadUrl("file://" + testFile.getAbsolutePath()); + for (int i = 0; i < getIteration(); i++) { + resetFlingTest(); + sleep(TEST_DELAY_TIME_MS); + startTrace(mTestCaseName, i); + getSurfaceFlingerHelper().clearBuffer(AW_WINDOW_NAME); + flingForward(); + sleep(DEFAULT_ANIMATION_TIME); + boolean result = + getSurfaceFlingerHelper().dumpFrameLatency(AW_WINDOW_NAME, true); + assertTrue("dump frame latency failed", result); + + waitForTrace(); + assertTrue(String.format("Sample size is less than expected: %d", MIN_DATA_SIZE), + validateResults(MIN_DATA_SIZE)); + // record the result in an array + recordResults(mTestCaseName, i); + } + // calculate average and save the results + saveResults(mTestCaseName); + } +} diff --git a/chromium/tests/prebuilts/android-janktesthelper.jar b/chromium/tests/prebuilts/android-janktesthelper.jar Binary files differnew file mode 100644 index 0000000..44e3af9 --- /dev/null +++ b/chromium/tests/prebuilts/android-janktesthelper.jar |