Add perf test for Korean phrase line break

Here is an example of minimum score (ns) on the Pixel 5
  Short Text,     Regular line break:   131,025
  Short Text,     Phrase line break :   132,650
  Long Text,      Regular line break: 1,145,408
  Long Text,      Phrase line break : 1,083,803
  Long Long Text, Regular line break: 3,957,686
  Long Long Text, Phrase line break : 3,520,376

Bug: 266152097
Test: atest

Change-Id: Id3f789a75eb11c50e144e1fbd4b8ceff24924a27
This commit is contained in:
Seigo Nonaka
2023-01-20 13:23:42 +09:00
parent 184ace379f
commit 656e8fcac4

View File

@@ -58,6 +58,19 @@ public class StaticLayoutPerfTest {
+ "180℃で揚げ、衣がきつね色になったら引き上げて、油を切る。"
+ "盛り付けて出来上がり。";
public static final String KO_TEXT_SHORT = "모든 인류 구성원의 천부의 존엄성과 동등하고 양도할 수 없는 권리를";
// About 530 chars
public static final String KO_TEXT_LONG = "모든 인류 구성원의 천부의 존엄성과 동등하고 양도할 수 없는 권리를"
+ " 인정하는 것이 세계의 자유, 정의 및 평화의 기초이며, 인권에 대한 무시와 경멸이 인류의 양심을 격분시키는"
+ " 만행을 초래하였으며, 인간이 언론과 신앙의 자유, 그리고 공포와 결핍으로부터의 자유를 누릴 수 있는 세계의"
+ " 도래가 모든 사람들의 지고한 열망으로서 천명되어 왔으며, 인간이 폭정과 억압에 대항하는 마지막 수단으로서"
+ " 반란을 일으키도록 강요받지 않으려면, 법에 의한 통치에 의하여 인권이 보호되어야 하는 것이 필수적이며,"
+ "국가간에 우호관계의 발전을 증진하는 것이 필수적이며, 국제연합의 모든 사람들은 그 헌장에서 기본적 인권,"
+ " 인간의 존엄과 가치, 그리고 남녀의 동등한 권리에 대한 신념을 재확인하였으며, 보다 폭넓은 "
+ "자유속에서 사회적 진보와 보다 나은 생활수준을 증진하기로 다짐하였고, 회원국들은 국제연합과 협력하여 인권과"
+ " 기본적 자유의 보편적 존중과 준수를 증진할 것을 스스로 서약하였으며, 이러한 권리와 자유에 대한 공통의"
+ " 이해가 이 서약의 완전한 이행을 위하여 가장 중요하므로,";
@Rule
public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
@@ -560,4 +573,118 @@ public class StaticLayoutPerfTest {
.build();
}
}
@Test
public void testCreate_KOText_Phrase_Short() {
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
final String text = KO_TEXT_SHORT;
final LineBreakConfig config = new LineBreakConfig.Builder()
.setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
.build();
final TextPaint paint = new TextPaint(PAINT);
paint.setTextLocales(LocaleList.forLanguageTags("ko-KR"));
while (state.keepRunning()) {
state.pauseTiming();
Canvas.freeTextLayoutCaches();
state.resumeTiming();
StaticLayout.Builder.obtain(text, 0, text.length(), paint, TEXT_WIDTH)
.setLineBreakConfig(config)
.build();
}
}
@Test
public void testCreate_KOText_Phrase_Long() {
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
final String text = KO_TEXT_LONG;
final LineBreakConfig config = new LineBreakConfig.Builder()
.setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
.build();
final TextPaint paint = new TextPaint(PAINT);
paint.setTextLocales(LocaleList.forLanguageTags("ko-KR"));
while (state.keepRunning()) {
state.pauseTiming();
Canvas.freeTextLayoutCaches();
state.resumeTiming();
StaticLayout.Builder.obtain(text, 0, text.length(), paint, TEXT_WIDTH)
.setLineBreakConfig(config)
.build();
}
}
@Test
public void testCreate_KOText_Phrase_LongLong() {
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
final String text = KO_TEXT_LONG.repeat(20); // 250 * 20 = 7000 chars
final LineBreakConfig config = new LineBreakConfig.Builder()
.setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
.build();
final TextPaint paint = new TextPaint(PAINT);
paint.setTextLocales(LocaleList.forLanguageTags("ko-KR"));
while (state.keepRunning()) {
state.pauseTiming();
Canvas.freeTextLayoutCaches();
state.resumeTiming();
StaticLayout.Builder.obtain(text, 0, text.length(), paint, TEXT_WIDTH)
.setLineBreakConfig(config)
.build();
}
}
@Test
public void testCreate_KOText_NoPhrase_Short() {
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
final String text = KO_TEXT_SHORT;
final LineBreakConfig config = new LineBreakConfig.Builder()
.setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE)
.build();
final TextPaint paint = new TextPaint(PAINT);
paint.setTextLocales(LocaleList.forLanguageTags("ko-KR"));
while (state.keepRunning()) {
state.pauseTiming();
Canvas.freeTextLayoutCaches();
state.resumeTiming();
StaticLayout.Builder.obtain(text, 0, text.length(), paint, TEXT_WIDTH)
.setLineBreakConfig(config)
.build();
}
}
@Test
public void testCreate_KOText_NoPhrase_Long() {
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
final String text = KO_TEXT_LONG;
final LineBreakConfig config = new LineBreakConfig.Builder()
.setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE)
.build();
final TextPaint paint = new TextPaint(PAINT);
paint.setTextLocales(LocaleList.forLanguageTags("ko-KR"));
while (state.keepRunning()) {
state.pauseTiming();
Canvas.freeTextLayoutCaches();
state.resumeTiming();
StaticLayout.Builder.obtain(text, 0, text.length(), paint, TEXT_WIDTH)
.setLineBreakConfig(config)
.build();
}
}
@Test
public void testCreate_KOText_NoPhrase_LongLong() {
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
final String text = KO_TEXT_LONG.repeat(20); // 520 * 20 = 10400 chars
final LineBreakConfig config = new LineBreakConfig.Builder()
.setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE)
.build();
final TextPaint paint = new TextPaint(PAINT);
paint.setTextLocales(LocaleList.forLanguageTags("ko-KR"));
while (state.keepRunning()) {
state.pauseTiming();
Canvas.freeTextLayoutCaches();
state.resumeTiming();
StaticLayout.Builder.obtain(text, 0, text.length(), paint, TEXT_WIDTH)
.setLineBreakConfig(config)
.build();
}
}
}