Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 656e8fca authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

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
parent 184ace37
Loading
Loading
Loading
Loading
+127 −0
Original line number Diff line number Diff line
@@ -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();
        }
    }
}