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