Loading tests/UiBench/AndroidManifest.xml +30 −0 Original line number Diff line number Diff line Loading @@ -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" Loading tests/UiBench/src/com/android/test/uibench/InflatingListActivity.java +26 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading tests/UiBench/src/com/android/test/uibench/TextUtils.java +73 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); Loading @@ -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[] { Loading Loading
tests/UiBench/AndroidManifest.xml +30 −0 Original line number Diff line number Diff line Loading @@ -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" Loading
tests/UiBench/src/com/android/test/uibench/InflatingListActivity.java +26 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading
tests/UiBench/src/com/android/test/uibench/TextUtils.java +73 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); Loading @@ -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[] { Loading