blob: 0d2d2e48e4c95de1543faf424fa95029383ef663 [file] [log] [blame]
John Hofordabb7d132014-02-24 15:21:42 -08001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14package com.android.test.dynamic;
15
16import android.app.Activity;
17import android.content.res.Resources;
18import android.graphics.drawable.VectorDrawable;
19import android.os.Bundle;
ztenghui996f22f2014-11-21 11:32:29 -080020import android.util.AttributeSet;
21import android.util.Log;
22import android.util.Xml;
John Hofordabb7d132014-02-24 15:21:42 -080023import android.widget.TextView;
24import android.widget.Button;
25import android.widget.GridLayout;
26import android.widget.ScrollView;
ztenghui4d24caf2014-05-28 15:02:35 -070027
ztenghui996f22f2014-11-21 11:32:29 -080028import org.xmlpull.v1.XmlPullParser;
29import org.xmlpull.v1.XmlPullParserException;
30
31import java.io.IOException;
John Hofordabb7d132014-02-24 15:21:42 -080032import java.text.DecimalFormat;
33
34@SuppressWarnings({"UnusedDeclaration"})
ztenghui498213a2014-05-05 16:26:22 -070035public class VectorDrawablePerformance extends Activity {
John Hofordabb7d132014-02-24 15:21:42 -080036 private static final String LOGCAT = "VectorDrawable1";
37 protected int[] icon = {
Teng-Hui Zhu46591f42016-03-15 14:32:16 -070038 R.drawable.vector_icon_filltype_nonzero,
39 R.drawable.vector_icon_filltype_evenodd,
Teng-Hui Zhudbee9bb2015-12-15 11:01:27 -080040 R.drawable.vector_icon_gradient_1,
41 R.drawable.vector_icon_gradient_2,
42 R.drawable.vector_icon_gradient_3,
Teng-Hui Zhu1664a822016-03-04 15:08:00 -080043 R.drawable.vector_icon_gradient_1_clamp,
44 R.drawable.vector_icon_gradient_2_repeat,
45 R.drawable.vector_icon_gradient_3_mirror,
Teng-Hui Zhu9b85c0b2016-01-28 11:04:48 -080046 R.drawable.vector_icon_state_list_simple,
47 R.drawable.vector_icon_state_list_theme,
John Hofordabb7d132014-02-24 15:21:42 -080048 R.drawable.vector_drawable01,
49 R.drawable.vector_drawable02,
50 R.drawable.vector_drawable03,
51 R.drawable.vector_drawable04,
52 R.drawable.vector_drawable05,
53 R.drawable.vector_drawable06,
54 R.drawable.vector_drawable07,
55 R.drawable.vector_drawable08,
56 R.drawable.vector_drawable09,
57 R.drawable.vector_drawable10,
58 R.drawable.vector_drawable11,
59 R.drawable.vector_drawable12,
60 R.drawable.vector_drawable13,
61 R.drawable.vector_drawable14,
62 R.drawable.vector_drawable15,
63 R.drawable.vector_drawable16,
64 R.drawable.vector_drawable17,
65 R.drawable.vector_drawable18,
66 R.drawable.vector_drawable19,
ztenghui452f6ec2014-05-28 09:48:36 -070067 R.drawable.vector_drawable20,
ztenghui4d24caf2014-05-28 15:02:35 -070068 R.drawable.vector_drawable21,
69 R.drawable.vector_drawable22,
ztenghui2af745b2014-05-30 16:23:47 -070070 R.drawable.vector_drawable23,
71 R.drawable.vector_drawable24,
ztenghui8d0d24f2014-07-09 10:49:44 -070072 R.drawable.vector_drawable25,
ztenghuid1c89b12014-08-06 10:42:21 -070073 R.drawable.vector_drawable26,
74 R.drawable.vector_drawable27,
75 R.drawable.vector_drawable28,
ztenghui4cc3e272014-10-07 13:11:22 -070076 R.drawable.vector_drawable29,
ztenghui5e7a29f2014-11-12 16:19:03 -080077 R.drawable.vector_drawable30,
Teng-Hui Zhu2196d562016-07-01 11:34:25 -070078 R.drawable.vector_drawable_group_clip,
ztenghui9af77a4c2015-04-01 16:38:44 -070079 R.drawable.vector_drawable_scale0,
80 R.drawable.vector_drawable_scale1,
81 R.drawable.vector_drawable_scale2,
82 R.drawable.vector_drawable_scale3,
John Hofordabb7d132014-02-24 15:21:42 -080083 };
84
ztenghui996f22f2014-11-21 11:32:29 -080085 public static VectorDrawable create(Resources resources, int rid) {
86 try {
87 final XmlPullParser parser = resources.getXml(rid);
88 final AttributeSet attrs = Xml.asAttributeSet(parser);
89 int type;
90 while ((type=parser.next()) != XmlPullParser.START_TAG &&
91 type != XmlPullParser.END_DOCUMENT) {
92 // Empty loop
93 }
94 if (type != XmlPullParser.START_TAG) {
95 throw new XmlPullParserException("No start tag found");
96 }
97
98 final VectorDrawable drawable = new VectorDrawable();
99 drawable.inflate(resources, parser, attrs);
100
101 return drawable;
102 } catch (XmlPullParserException e) {
103 Log.e(LOGCAT, "parser error", e);
104 } catch (IOException e) {
105 Log.e(LOGCAT, "parser error", e);
106 }
107 return null;
108 }
109
John Hofordabb7d132014-02-24 15:21:42 -0800110 @Override
111 protected void onCreate(Bundle savedInstanceState) {
112 super.onCreate(savedInstanceState);
113 ScrollView scrollView = new ScrollView(this);
114 GridLayout container = new GridLayout(this);
115 scrollView.addView(container);
Teng-Hui Zhudbee9bb2015-12-15 11:01:27 -0800116 container.setColumnCount(4);
John Hofordabb7d132014-02-24 15:21:42 -0800117 Resources res = this.getResources();
118 container.setBackgroundColor(0xFF888888);
119 VectorDrawable []d = new VectorDrawable[icon.length];
120 long time = android.os.SystemClock.elapsedRealtimeNanos();
121 for (int i = 0; i < icon.length; i++) {
ztenghui996f22f2014-11-21 11:32:29 -0800122 d[i] = create(res,icon[i]);
John Hofordabb7d132014-02-24 15:21:42 -0800123 }
124 time = android.os.SystemClock.elapsedRealtimeNanos()-time;
125 TextView t = new TextView(this);
126 DecimalFormat df = new DecimalFormat("#.##");
127 t.setText("avgL=" + df.format(time / (icon.length * 1000000.)) + " ms");
John Hofordabb7d132014-02-24 15:21:42 -0800128 container.addView(t);
129 time = android.os.SystemClock.elapsedRealtimeNanos();
130 for (int i = 0; i < icon.length; i++) {
131 Button button = new Button(this);
132 button.setWidth(200);
John Hofordabb7d132014-02-24 15:21:42 -0800133 button.setBackgroundResource(icon[i]);
134 container.addView(button);
John Hofordabb7d132014-02-24 15:21:42 -0800135 }
136 setContentView(scrollView);
137 time = android.os.SystemClock.elapsedRealtimeNanos()-time;
138 t = new TextView(this);
139 t.setText("avgS=" + df.format(time / (icon.length * 1000000.)) + " ms");
John Hofordabb7d132014-02-24 15:21:42 -0800140 container.addView(t);
141 }
John Hofordabb7d132014-02-24 15:21:42 -0800142}