diff options
author | Seigo Nonaka <nona@google.com> | 2017-06-16 09:56:18 -0700 |
---|---|---|
committer | Seigo Nonaka <nona@google.com> | 2017-07-28 13:23:33 -0700 |
commit | 47bc948efe4ec800dcda636f7faa2baa0c113868 (patch) | |
tree | f80eeb7aa23cbdbe9038a93cfcac014c85422cb8 | |
parent | 218e3b75faf0c469ed5f43d6b665d9cdbbaaa431 (diff) |
Introduce new InflatingEmojiListActivity for JankTest.
Bug: N/A
Test: ran testInflatingEmojiListViewFling
Change-Id: Ia46db9ce0ee500907e68d374d5b4a6f22e7b708b
-rw-r--r-- | tests/UiBench/AndroidManifest.xml | 30 | ||||
-rw-r--r-- | tests/UiBench/src/com/android/test/uibench/InflatingListActivity.java | 28 | ||||
-rw-r--r-- | tests/UiBench/src/com/android/test/uibench/TextUtils.java | 74 |
3 files changed, 129 insertions, 3 deletions
diff --git a/tests/UiBench/AndroidManifest.xml b/tests/UiBench/AndroidManifest.xml index 2521dc9f82ae..f2de7db936e1 100644 --- a/tests/UiBench/AndroidManifest.xml +++ b/tests/UiBench/AndroidManifest.xml @@ -201,6 +201,36 @@ </intent-filter> </activity> + <activity-alias + android:name=".InflatingEmojiListActivity" + android:label="Inflation/Inflating ListView with Emoji" + android:targetActivity=".InflatingListActivity"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="com.android.test.uibench.TEST" /> + </intent-filter> + </activity-alias> + + <activity-alias + android:name=".InflatingHanListActivity" + android:label="Inflation/Inflating ListView with Han Characters" + android:targetActivity=".InflatingListActivity"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="com.android.test.uibench.TEST" /> + </intent-filter> + </activity-alias> + + <activity-alias + android:name=".InflatingLongStringListActivity" + android:label="Inflation/Inflating ListView with long string" + android:targetActivity=".InflatingListActivity"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="com.android.test.uibench.TEST" /> + </intent-filter> + </activity-alias> + <!-- Text --> <activity android:name=".EditTextTypeActivity" diff --git a/tests/UiBench/src/com/android/test/uibench/InflatingListActivity.java b/tests/UiBench/src/com/android/test/uibench/InflatingListActivity.java index 603244eb2a43..2b84f2c49e67 100644 --- a/tests/UiBench/src/com/android/test/uibench/InflatingListActivity.java +++ b/tests/UiBench/src/com/android/test/uibench/InflatingListActivity.java @@ -15,6 +15,7 @@ */ package com.android.test.uibench; +import android.content.ComponentName; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; @@ -23,10 +24,33 @@ import android.widget.ListAdapter; import com.android.test.uibench.listview.CompatListActivity; public class InflatingListActivity extends CompatListActivity { + private static final String PACKAGE_NAME = "com.android.test.uibench"; + private static final ComponentName LATIN_WORDS = + ComponentName.createRelative(PACKAGE_NAME, ".InflatingListActivity"); + private static final ComponentName EMOJI = + ComponentName.createRelative(PACKAGE_NAME, ".InflatingEmojiListActivity"); + private static final ComponentName HAN = + ComponentName.createRelative(PACKAGE_NAME, ".InflatingHanListActivity"); + private static final ComponentName LONG_STRING = + ComponentName.createRelative(PACKAGE_NAME, ".InflatingLongStringListActivity"); @Override protected ListAdapter createListAdapter() { - return new ArrayAdapter<String>(this, - android.R.layout.simple_list_item_1, TextUtils.buildSimpleStringList()) { + final ComponentName targetComponent = getIntent().getComponent(); + + final String[] testStrings; + if (targetComponent.equals(LATIN_WORDS)) { + testStrings = TextUtils.buildSimpleStringList(); + } else if (targetComponent.equals(EMOJI)) { + testStrings = TextUtils.buildEmojiStringList(); + } else if (targetComponent.equals(HAN)) { + testStrings = TextUtils.buildHanStringList(); + } else if (targetComponent.equals(LONG_STRING)) { + testStrings = TextUtils.buildLongStringList(); + } else { + throw new RuntimeException("Unknown Component: " + targetComponent); + } + + return new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, testStrings) { @Override public View getView(int position, View convertView, ViewGroup parent) { // pathological getView behavior: drop convertView on the floor to force inflation diff --git a/tests/UiBench/src/com/android/test/uibench/TextUtils.java b/tests/UiBench/src/com/android/test/uibench/TextUtils.java index 32a59868e6c0..2df91047cdf8 100644 --- a/tests/UiBench/src/com/android/test/uibench/TextUtils.java +++ b/tests/UiBench/src/com/android/test/uibench/TextUtils.java @@ -15,11 +15,24 @@ */ package com.android.test.uibench; +import android.icu.text.UnicodeSet; +import android.icu.text.UnicodeSetIterator; + +import java.util.ArrayList; import java.util.Random; public class TextUtils { private static final int STRING_COUNT = 200; - private static final int SIMPLE_STRING_LENGTH = 10; + private static final int SIMPLE_STRING_LENGTH = 10; // in code points + + private static String[] UnicodeSetToArray(UnicodeSet set) { + final UnicodeSetIterator iterator = new UnicodeSetIterator(set); + final ArrayList<String> out = new ArrayList<>(set.size()); + while (iterator.next()) { + out.add(iterator.getString()); + } + return out.toArray(new String[out.size()]); + } /** * Create word of random assortment of lower/upper case letters @@ -34,10 +47,34 @@ public class TextUtils { return result; } + /** + * Create word from a random assortment of a given set of codepoints, given as strings. + */ + private static String randomWordFromStringSet(Random random, int length, String[] stringSet) { + final StringBuilder sb = new StringBuilder(length); + final int setLength = stringSet.length; + for (int j = 0; j < length; j++) { + sb.append(stringSet[random.nextInt(setLength)]); + } + return sb.toString(); + } + public static String[] buildSimpleStringList() { return buildSimpleStringList(SIMPLE_STRING_LENGTH); } + public static String[] buildEmojiStringList() { + return buildEmojiStringList(SIMPLE_STRING_LENGTH); + } + + public static String[] buildHanStringList() { + return buildHanStringList(SIMPLE_STRING_LENGTH); + } + + public static String[] buildLongStringList() { + return buildLongStringList(SIMPLE_STRING_LENGTH); + } + public static String[] buildSimpleStringList(int stringLength) { String[] strings = new String[STRING_COUNT]; Random random = new Random(0); @@ -47,6 +84,41 @@ public class TextUtils { return strings; } + private static String[] buildStringListFromUnicodeSet(int stringLength, UnicodeSet set) { + final String[] strings = new String[STRING_COUNT]; + final Random random = new Random(0); + final String[] stringSet = UnicodeSetToArray(set); + for (int i = 0; i < strings.length; i++) { + strings[i] = randomWordFromStringSet(random, stringLength, stringSet); + } + return strings; + } + + public static String[] buildEmojiStringList(int stringLength) { + return buildStringListFromUnicodeSet(stringLength, new UnicodeSet("[:emoji:]")); + } + + public static String[] buildHanStringList(int stringLength) { + return buildStringListFromUnicodeSet(stringLength, new UnicodeSet("[\\u4E00-\\u9FA0]")); + } + + public static String[] buildLongStringList(int stringLength) { + final int WORD_COUNT = 100; + final String[] strings = new String[STRING_COUNT]; + final Random random = new Random(0); + for (int i = 0; i < strings.length; i++) { + final StringBuilder sb = new StringBuilder((stringLength + 1) * WORD_COUNT); + for (int j = 0; j < WORD_COUNT; ++j) { + if (j != 0) { + sb.append(' '); + } + sb.append(randomWord(random, stringLength)); + } + strings[i] = sb.toString(); + } + return strings; + } + // a small number of strings reused frequently, expected to hit // in the word-granularity text layout cache static final String[] CACHE_HIT_STRINGS = new String[] { |