1fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir/* 2fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir * Copyright (C) 2015 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 SpannableStringBuilderBenchmark { 25fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 26fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @Param({"android.text.style.ImageSpan", 27fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "android.text.style.ParagraphStyle", 28fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "android.text.style.CharacterStyle", 29fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "java.lang.Object"}) 30fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir private String paramType; 31fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 32fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @Param({"1", "4", "16"}) 33fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir private String paramStringMult; 34fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 35fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir private Class clazz; 36fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir private SpannableStringBuilder builder; 37fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 38fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @BeforeExperiment 39fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir protected void setUp() throws Exception { 40fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir clazz = Class.forName(paramType); 41a09b4d2a611a7606e8fc8c73a24bd941b6fc173fNarayan Kamath int strSize = Integer.parseInt(paramStringMult); 42fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir StringBuilder strBuilder = new StringBuilder(); 43fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir for (int i = 0; i < strSize; i++) { 44fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir strBuilder.append(TEST_STRING); 45fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 46fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir builder = new SpannableStringBuilder(Html.fromHtml(strBuilder.toString())); 47fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 48fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 49fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @AfterExperiment 50fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir protected void tearDown() { 51fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir builder.clear(); 52fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir builder = null; 53fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 54fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 55fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir @Benchmark 56fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir public void timeGetSpans(int reps) throws Exception { 57fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir for (int i = 0; i < reps; i++) { 58fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir builder.getSpans(0, builder.length(), clazz); 59fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 60fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir } 61fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 62fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir //contains 0 ImageSpans, 2 ParagraphSpans, 53 CharacterStyleSpans 63fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir public static String TEST_STRING = 64fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span><a href=\"http://android.com\">some link</a></span></p>\n" + 65fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h1 style=\"margin: 0.0px 0.0px 10.0px 0.0px; line-height: 64.0px; font: 62.0px " + 66fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "'Helvetica Neue Light'; color: #000000; \"><span>some title</span></h1>\n" + 67fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span>by <a href=\"http://android.com\"><span>some name</span></a>\n" + 68fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <a href=\"https://android.com\"><span>some text</span></a></span></p>\n" + 69fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span>some date</span></p>\n" + 70fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<table cellspacing=\"0\" cellpadding=\"0\">\n" + 71fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <tbody><tr><td valign=\"bottom\">\n" + 72fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <p><span><blockquote>a paragraph</blockquote></span><br></p>\n" + 73fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " </tbody></tr></td>\n" + 74fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "</table>\n" + 75fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h2 style=\"margin: 0.0px 0.0px 0.0px 0.0px; line-height: 38.0px; font: 26.0px " + 76fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "'Helvetica Neue Light'; color: #262626; -webkit-text-stroke: #262626\">" + 77fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<span>some header two</span></h2>\n" + 78fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span>Lorem ipsum dolor concludaturque. </span></p>\n" + 79fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span></span><br></p>\n" + 80fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span>Vix te doctus</span></p>\n" + 81fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span><b>Error mel</b></span><span>, est ei. <a href=\"http://andorid.com\">" + 82fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<span>asda</span></a> ullamcorper eam.</span></p>\n" + 83fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span>adversarium <a href=\"http://android.com\"><span>efficiantur</span></a>, " + 84fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "mea te.</span></p>\n" + 85fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p><span></span><br></p>\n" + 86fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h1>Testing display of HTML elements</h1>\n" + 87fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h2>2nd level heading</h2>\n" + 88fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p>test paragraph.</p>\n" + 89fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h3>3rd level heading</h3>\n" + 90fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p>test paragraph.</p>\n" + 91fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h4>4th level heading</h4>\n" + 92fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p>test paragraph.</p>\n" + 93fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h5>5th level heading</h5>\n" + 94fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p>test paragraph.</p>\n" + 95fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h6>6th level heading</h6>\n" + 96fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p>test paragraph.</p>\n" + 97fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h2>level elements</h2>\n" + 98fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<p>a normap paragraph(<code>p</code> element).\n" + 99fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " with some <strong>strong</strong>.</p>\n" + 100fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<div>This is a <code>div</code> element. </div>\n" + 101fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<blockquote><p>This is a block quotation with some <em>style</em></p></blockquote>\n" + 102fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<address>an address element</address>\n" + 103fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<h2>Text-level markup</h2>\n" + 104fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "<ul>\n" + 105fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <abbr title=\"Cascading Style Sheets\">CSS</abbr> (an abbreviation;\n" + 106fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <code>abbr</code> markup used)\n" + 107fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <acronym title=\"radio detecting and ranging\">radar</acronym>\n" + 108fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <b>bolded</b>\n" + 109fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <big>big thing</big>\n" + 110fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <font size=6>large size</font>\n" + 111fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <font face=Courier>Courier font</font>\n" + 112fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <font color=red>red text</font>\n" + 113fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <cite>Origin of Species</cite>\n" + 114fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <code>a[i] = b[i] + c[i);</code>\n" + 115fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> some <del>deleted</del> text\n" + 116fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> an <dfn>octet</dfn> is an\n" + 117fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> this is <em>very</em> simple\n" + 118fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <i lang=\"la\">Homo sapiens</i>\n" + 119fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> some <ins>inserted</ins> text\n" + 120fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> type <kbd>yes</kbd> when\n" + 121fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <q>Hello!</q>\n" + 122fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <q>She said <q>Hello!</q></q>\n" + 123fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <samp>ccc</samp>\n" + 124fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <small>important</small>\n" + 125fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <strike>overstruck</strike>\n" + 126fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <strong>this is highlighted text</strong>\n" + 127fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <code>sub</code> and\n" + 128fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <code>sup</code> x<sub>1</sub> and H<sub>2</sub>O\n" + 129fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " M<sup>lle</sup>, 1<sup>st</sup>, e<sup>x</sup>, sin<sup>2</sup> <i>x</i>,\n" + 130fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " e<sup>x<sup>2</sup></sup> and f(x)<sup>g(x)<sup>a+b+c</sup></sup>\n" + 131fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " (where 2 and a+b+c should appear as exponents of exponents).\n" + 132fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <tt>text in monospace font</tt>\n" + 133fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <u>underlined</u> text\n" + 134fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " <li> <code>cat</code> <var>filename</var> displays the\n" + 135fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir " the <var>filename</var>.\n" + 136fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir "</ul>\n"; 137fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir 138fa05ba0b0d39fae1d2cb3d98fbee0aef6a9fed88Siyamed Sinir} 139