1fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir/* 2fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * Copyright (C) 2013 The Android Open Source Project 3fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * 4fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * Licensed under the Apache License, Version 2.0 (the "License"); 5fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * you may not use this file except in compliance with the License. 6fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * You may obtain a copy of the License at 7fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * 8fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * http://www.apache.org/licenses/LICENSE-2.0 9fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * 10fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * Unless required by applicable law or agreed to in writing, software 11fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * distributed under the License is distributed on an "AS IS" BASIS, 12fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * See the License for the specific language governing permissions and 14fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * limitations under the License. 15fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir */ 16fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 17fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinirpackage android.text; 18fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 19fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinirimport com.google.caliper.AfterExperiment; 20fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinirimport com.google.caliper.BeforeExperiment; 21fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinirimport com.google.caliper.Benchmark; 22fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinirimport com.google.caliper.Param; 23fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 24fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinirpublic class SpannableStringInternalCopyBenchmark { 25fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 26fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @Param({"1", "4", "16"}) 27fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir private String paramStringMult; 28fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 29fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir private SpannedString spanned; 30fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 31fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @BeforeExperiment 32fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir protected void setUp() throws Exception { 33a09b4d2a611a7606e8fc8c73a24bd941b6fc173fNarayan Kamath int strSize = Integer.parseInt(paramStringMult); 34fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir StringBuilder strBuilder = new StringBuilder(); 35fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir for (int i = 0; i < strSize; i++) { 36fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir strBuilder.append(SpannableStringBuilderBenchmark.TEST_STRING); 37fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 38fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir Spanned source = Html.fromHtml(strBuilder.toString()); 39fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir spanned = new SpannedString(source); 40fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 41fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 42fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @AfterExperiment 43fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir protected void tearDown() { 44fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir spanned = null; 45fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 46fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 47fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @Benchmark 48fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir public void timeCopyConstructor(int reps) throws Exception { 49fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir for (int i = 0; i < reps; i++) { 50fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir new SpannedString(spanned); 51fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 52fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 53fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 54fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @Benchmark 55fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir public void timeSubsequence(int reps) throws Exception { 56fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir for (int i = 0; i < reps; i++) { 57fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir spanned.subSequence(1, spanned.length()-1); 58fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 59fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 60fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 61fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir} 62