diff --git a/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java b/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java index 1cd5d964e36fb..a976de3932633 100644 --- a/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java @@ -19,6 +19,8 @@ package android.text; import android.graphics.Canvas; import android.graphics.RecordingCanvas; import android.graphics.RenderNode; +import android.graphics.text.LineBreakConfig; +import android.os.LocaleList; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; @@ -43,6 +45,19 @@ public class StaticLayoutPerfTest { public StaticLayoutPerfTest() {} + public static final String JP_TEXT_SHORT = "日本語でのパフォーマンス計測のための例文です。"; + // About 350 chars + public static final String JP_TEXT_LONG = "日本語でのパフォーマンス計測のための文章ですが、長いです。" + + "長い文章が必要なのですが、特に書くことが思いつかないので、コロッケの作り方でも書こうと思います。" + + "じゃがいもを茹でて潰しておきます。私は少し形が残っているほうが好きなので、ある程度のところで潰すのを" + + "やめます。別のフライパンで軽く塩をして玉ねぎのみじん切りを炒め、透き通ったら、一度取り出します。" + + "きれいにしたフライパンに、豚ひき肉を入れてあまりイジらずに豚肉を炒めます。" + + "しっかり火が通ったら炒めた玉ねぎを戻し入れ、塩コショウで味を決めます。" + + "炒めた肉玉ねぎとじゃがいもをよく混ぜて、1個あたり100gになるように整形します。" + + "整形したタネに小麦粉、卵、パン粉をつけて揚げます。" + + "180℃で揚げ、衣がきつね色になったら引き上げて、油を切る。" + + "盛り付けて出来上がり。"; + @Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); @@ -432,4 +447,117 @@ public class StaticLayoutPerfTest { } } + @Test + public void testCreate_JPText_Phrase_Short() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + final String text = JP_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("ja-JP")); + 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_JPText_Phrase_Long() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + final String text = JP_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("ja-JP")); + 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_JPText_Phrase_LongLong() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + final String text = JP_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("ja-JP")); + 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_JPText_NoPhrase_Short() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + final String text = JP_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("ja-JP")); + 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_JPText_NoPhrase_Long() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + final String text = JP_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("ja-JP")); + 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_JPText_NoPhrase_LongLong() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + final String text = JP_TEXT_LONG.repeat(20); // 250 * 20 = 7000 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("ja-JP")); + while (state.keepRunning()) { + state.pauseTiming(); + Canvas.freeTextLayoutCaches(); + state.resumeTiming(); + StaticLayout.Builder.obtain(text, 0, text.length(), paint, TEXT_WIDTH) + .setLineBreakConfig(config) + .build(); + } + } }