1eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka/*
2eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * Copyright (C) 2016 The Android Open Source Project
3eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka *
4eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License");
5eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * you may not use this file except in compliance with the License.
6eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * You may obtain a copy of the License at
7eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka *
8eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka *      http://www.apache.org/licenses/LICENSE-2.0
9eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka *
10eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * Unless required by applicable law or agreed to in writing, software
11eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS,
12eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * See the License for the specific language governing permissions and
14eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka * limitations under the License.
15eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka */
16eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
17eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakapackage android.graphics.perftests;
18eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
19eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.content.Context;
20eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.content.res.AssetManager;
21eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.graphics.Typeface;
22eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.perftests.utils.BenchmarkState;
23eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.perftests.utils.PerfStatusReporter;
24eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.support.test.InstrumentationRegistry;
25eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.support.test.filters.LargeTest;
26eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport android.support.test.runner.AndroidJUnit4;
27eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
28eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport java.io.File;
29eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport java.io.FileOutputStream;
30eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport java.io.IOException;
31eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport java.io.InputStream;
32eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport java.io.OutputStream;
33eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
34eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport org.junit.Rule;
35eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport org.junit.Test;
36eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakaimport org.junit.runner.RunWith;
37eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
38eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka@LargeTest
39eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka@RunWith(AndroidJUnit4.class)
40eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonakapublic class TypefaceCreatePerfTest {
41eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    // A font file name in asset directory.
42eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    private static final String TEST_FONT_NAME = "DancingScript-Regular.ttf";
43eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
44eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    @Rule
45eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
46eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
47eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    @Test
48eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    public void testCreate_fromFamily() {
49eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
50eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
51eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        while (state.keepRunning()) {
52eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            Typeface face = Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL);
53eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        }
54eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    }
55eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
56eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    @Test
57eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    public void testCreate_fromFamilyName() {
58eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
59eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
60eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        while (state.keepRunning()) {
61eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            Typeface face = Typeface.create("monospace", Typeface.NORMAL);
62eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        }
63eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    }
64eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
65eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    @Test
66eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    public void testCreate_fromAsset() {
67eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
68eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        final Context context = InstrumentationRegistry.getContext();
69eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        final AssetManager am = context.getAssets();
70eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
71eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        while (state.keepRunning()) {
72eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            Typeface face = Typeface.createFromAsset(am, TEST_FONT_NAME);
73eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        }
74eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    }
75eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
76eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    @Test
77eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    public void testCreate_fromFile() {
78eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
79eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        final Context context = InstrumentationRegistry.getContext();
80eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        final AssetManager am = context.getAssets();
81eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
82eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        File outFile = null;
83eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        try {
84eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            outFile = File.createTempFile("example", "ttf", context.getCacheDir());
85eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        } catch (IOException e) {
86eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            throw new RuntimeException(e);
87eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        }
88eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
89eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        try (InputStream in = am.open(TEST_FONT_NAME);
90eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka                OutputStream out = new FileOutputStream(outFile)) {
91eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            byte[] buf = new byte[1024];
92eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            int n = 0;
93eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            while ((n = in.read(buf)) != -1) {
94eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka                out.write(buf, 0, n);
95eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            }
96eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        } catch (IOException e) {
97eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            throw new RuntimeException(e);
98eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        }
99eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
100eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        while (state.keepRunning()) {
101eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka            Typeface face = Typeface.createFromFile(outFile);
102eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        }
103eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka
104eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka        outFile.delete();
105eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka    }
106eb22e31f7f372af423de6cdfa2be878ddcdb2264Seigo Nonaka}
107