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