blob: 6a2ce5847daad3cd27dfd20efa7ef29339ceff70 [file] [log] [blame]
/*
* 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 android.libcore.regression;
import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
import android.test.suitebuilder.annotation.LargeTest;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.text.BreakIterator;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
@RunWith(JUnitParamsRunner.class)
@LargeTest
public final class BreakIteratorPerfTest {
@Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
public enum Text {
LIPSUM(
Locale.US,
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi mollis consequat"
+ " nisl non pharetra. Praesent pretium vehicula odio sed ultrices. Aenean a"
+ " felis libero. Vivamus sed commodo nibh. Pellentesque turpis lectus,"
+ " euismod vel ante nec, cursus posuere orci. Suspendisse velit neque,"
+ " fermentum luctus ultrices in, ultrices vitae arcu. Duis tincidunt cursus"
+ " lorem. Nam ultricies accumsan quam vitae imperdiet. Pellentesque habitant"
+ " morbi tristique senectus et netus et malesuada fames ac turpis egestas."
+ " Quisque aliquet pretium nisi, eget laoreet enim molestie sit amet. Class"
+ " aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos"
+ " himenaeos.\n"
+ "Nam dapibus aliquam lacus ac suscipit. Proin in nibh sit amet purus congue"
+ " laoreet eget quis nisl. Morbi gravida dignissim justo, a venenatis ante"
+ " pulvinar at. Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+ " Proin ultrices vestibulum dui, vel aliquam lacus aliquam quis. Duis"
+ " fringilla sapien ac lacus egestas, vel adipiscing elit euismod. Donec non"
+ " tellus odio. Donec gravida eu massa ac feugiat. Aliquam erat volutpat."
+ " Praesent id adipiscing metus, nec laoreet enim. Aliquam vitae posuere"
+ " turpis. Mauris ac pharetra sem. In at placerat tortor. Vivamus ac vehicula"
+ " neque. Cras volutpat ullamcorper massa et varius. Praesent sagittis neque"
+ " vitae nulla euismod pharetra.\n"
+ "Sed placerat sapien non molestie sollicitudin. Nullam sit amet dictum quam."
+ " Etiam tincidunt tortor vel pretium vehicula. Praesent fringilla ipsum vel"
+ " velit luctus dignissim. Nulla massa ligula, mattis in enim et, mattis"
+ " lacinia odio. Suspendisse tristique urna a orci commodo tempor. Duis"
+ " lacinia egestas arcu a sollicitudin.\n"
+ "In ac feugiat lacus. Nunc fermentum eu est at tristique. Pellentesque quis"
+ " ligula et orci placerat lacinia. Maecenas quis mauris diam. Etiam mi"
+ " ipsum, tempus in purus quis, euismod faucibus orci. Nulla facilisi."
+ " Praesent sit amet sapien vel elit porta adipiscing. Phasellus sit amet"
+ " volutpat diam.\n"
+ "Proin bibendum elit non lacus pharetra, quis eleifend tellus placerat."
+ " Nulla facilisi. Maecenas ante diam, pellentesque mattis mattis in, porta"
+ " ut lorem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices"
+ " posuere cubilia Curae; Nunc interdum tristique metus, in scelerisque odio"
+ " fermentum eget. Cras nec venenatis lacus. Aenean euismod eget metus quis"
+ " molestie. Cras tincidunt dolor ut massa ornare, in elementum lacus auctor."
+ " Cras sodales nisl lacus, id ultrices ligula varius at. Sed tristique sit"
+ " amet tellus vel mollis. Sed sed sollicitudin quam. Sed sed adipiscing"
+ " risus, et dictum orci. Cras tempor pellentesque turpis et tempus."),
LONGPARA(
Locale.US,
"During dinner, Mr. Bennet scarcely spoke at all; but when the servants were"
+ " withdrawn, he thought it time to have some conversation with his guest,"
+ " and therefore started a subject in which he expected him to shine, by"
+ " observing that he seemed very fortunate in his patroness. Lady Catherine"
+ " de Bourgh's attention to his wishes, and consideration for his comfort,"
+ " appeared very remarkable. Mr. Bennet could not have chosen better. Mr."
+ " Collins was eloquent in her praise. The subject elevated him to more than"
+ " usual solemnity of manner, and with a most important aspect he protested"
+ " that \"he had never in his life witnessed such behaviour in a person of"
+ " rank--such affability and condescension, as he had himself experienced"
+ " from Lady Catherine. She had been graciously pleased to approve of both of"
+ " the discourses which he had already had the honour of preaching before"
+ " her. She had also asked him twice to dine at Rosings, and had sent for him"
+ " only the Saturday before, to make up her pool of quadrille in the evening."
+ " Lady Catherine was reckoned proud by many people he knew, but _he_ had"
+ " never seen anything but affability in her. She had always spoken to him as"
+ " she would to any other gentleman; she made not the smallest objection to"
+ " his joining in the society of the neighbourhood nor to his leaving the"
+ " parish occasionally for a week or two, to visit his relations. She had"
+ " even condescended to advise him to marry as soon as he could, provided he"
+ " chose with discretion; and had once paid him a visit in his humble"
+ " parsonage, where she had perfectly approved all the alterations he had"
+ " been making, and had even vouchsafed to suggest some herself--some shelves"
+ " in the closet up stairs.\""),
GERMAN(
Locale.GERMANY,
"Aber dieser Freiheit setzte endlich der Winter ein Ziel. Draußen auf den Feldern"
+ " und den hohen Bergen lag der Schnee und Peter wäre in seinem dünnen"
+ " Leinwandjäckchen bald erfroren. Es war also seine einzige Freude, hinaus"
+ " vor die Hütte zu treten und den Sperlingen Brotkrümchen zu streuen, was er"
+ " sich jedesmal an seinem Frühstück absparte. Wenn nun die Vögel so lustig"
+ " zwitscherten und um ihn herumflogen, da klopfte ihm das Herz vor Lust, und"
+ " oft gab er ihnen sein ganzes Stück Schwarzbrot, ohne daran zu denken, daß"
+ " er dafür alsdann selbst hungern müsse."),
THAI(
Locale.forLanguageTag("th-TH"),
"เป็นสำเนียงทางการของภาษาไทย"
+ " เดิมทีเป็นการผสมผสานกันระหว่างสำเนียงอยุธยาและชาวไทยเชื้อสายจีนรุ่นหลังที่"
+ "พูดไทยแทนกลุ่มภาษาจีน"
+ " ลักษณะเด่นคือมีการออกเสียงที่ชัดเจนและแข็งกระด้างซึ่งได้รับอิทธิพลจากภาษาแต"
+ "้จิ๋ว การออกเสียงพยัญชนะ สระ การผันวรรณยุกต์ที่ในภาษาไทยมาตรฐาน"
+ " มาจากสำเนียงถิ่นนี้ในขณะที่ภาษาไทยสำเนียงอื่นล้วนเหน่อทั้งสิ้น"
+ " คำศัพท์ที่ใช้ในสำเนียงกรุงเทพจำนวนมากได้รับมาจากกลุ่มภาษาจีนเช่นคำว่า โป๊,"
+ " เฮ็ง, อาหมวย, อาซิ่ม ซึ่งมาจากภาษาแต้จิ๋ว และจากภาษาจีนเช่น ถู(涂), ชิ่ว(去"
+ " อ่านว่า\"ชู่\") และคำว่า ทาย(猜 อ่านว่า \"ชาย\") เป็นต้น"
+ " เนื่องจากสำเนียงกรุงเทพได้รับอิทธิพลมาจากภาษาจีนดังนั้นตัวอักษร \"ร\""
+ " มักออกเสียงเหมารวมเป็น \"ล\" หรือคำควบกล่ำบางคำถูกละทิ้งไปด้วยเช่น รู้"
+ " เป็น ลู้, เรื่อง เป็น เลื่อง หรือ ประเทศ เป็น ปะเทศ"
+ " เป็นต้นสร้างความลำบากให้แก่ต่างชาติที่ต้องการเรียนภาษาไทย"
+ " แต่อย่างไรก็ตามผู้ที่พูดสำเนียงถิ่นนี้ก็สามารถออกอักขระภาษาไทยตามมาตรฐานได"
+ "้อย่างถูกต้องเพียงแต่มักเผลอไม่ค่อยออกเสียง"),
THAI2(Locale.forLanguageTag("th-TH"), "this is the word browser in Thai: เบราว์เซอร์"),
TABS(Locale.US, "one\t\t\t\t\t\t\t\t\t\t\t\t\t\ttwo\n"),
ACCENT(Locale.US, "e\u0301\u00e9\nwhich is:\n\"e\\u0301\\u00e9\""),
EMOJI(Locale.US, ">>\ud83d\ude01<<\nwhich is:\n\">>\\ud83d\\ude01<<\""),
SPACES(Locale.US, " leading spaces and trailing ones too "),
EMPTY(Locale.US, ""),
NEWLINE(Locale.US, "\\n:\n"),
BIDI(
Locale.forLanguageTag("he-IL"),
"Sarah שרה is spelled sin ש resh ר heh ה from right to left.");
final Locale mLocale;
final String mText;
Text(Locale locale, String text) {
this.mText = text;
this.mLocale = locale;
}
}
public static Collection<Object[]> getData() {
return Arrays.asList(
new Object[][] {
{Text.ACCENT}, {Text.BIDI}, {Text.EMOJI}, {Text.EMPTY}, {Text.GERMAN},
{Text.LIPSUM}, {Text.LONGPARA}, {Text.NEWLINE}, {Text.SPACES}, {Text.TABS},
{Text.THAI}, {Text.THAI2}
});
}
@Test
@Parameters(method = "getData")
public void timeBreakIterator(Text text) {
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
while (state.keepRunning()) {
BreakIterator it = BreakIterator.getLineInstance(text.mLocale);
it.setText(text.mText);
while (it.next() != BreakIterator.DONE) {
// Keep iterating
}
}
}
@Test
@Parameters(method = "getData")
public void timeIcuBreakIterator(Text text) {
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
while (state.keepRunning()) {
android.icu.text.BreakIterator it =
android.icu.text.BreakIterator.getLineInstance(text.mLocale);
it.setText(text.mText);
while (it.next() != android.icu.text.BreakIterator.DONE) {
// Keep iterating
}
}
}
}