1/* 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; 20import android.util.AttributeSet; 21import android.util.Log; 22import android.util.Xml; 23import android.widget.TextView; 24import android.widget.Button; 25import android.widget.GridLayout; 26import android.widget.ScrollView; 27 28import org.xmlpull.v1.XmlPullParser; 29import org.xmlpull.v1.XmlPullParserException; 30 31import java.io.IOException; 32import java.text.DecimalFormat; 33 34@SuppressWarnings({"UnusedDeclaration"}) 35public class VectorDrawablePerformance extends Activity { 36 private static final String LOGCAT = "VectorDrawable1"; 37 protected int[] icon = { 38 R.drawable.vector_icon_filltype_nonzero, 39 R.drawable.vector_icon_filltype_evenodd, 40 R.drawable.vector_icon_gradient_1, 41 R.drawable.vector_icon_gradient_2, 42 R.drawable.vector_icon_gradient_3, 43 R.drawable.vector_icon_gradient_1_clamp, 44 R.drawable.vector_icon_gradient_2_repeat, 45 R.drawable.vector_icon_gradient_3_mirror, 46 R.drawable.vector_icon_state_list_simple, 47 R.drawable.vector_icon_state_list_theme, 48 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, 67 R.drawable.vector_drawable20, 68 R.drawable.vector_drawable21, 69 R.drawable.vector_drawable22, 70 R.drawable.vector_drawable23, 71 R.drawable.vector_drawable24, 72 R.drawable.vector_drawable25, 73 R.drawable.vector_drawable26, 74 R.drawable.vector_drawable27, 75 R.drawable.vector_drawable28, 76 R.drawable.vector_drawable29, 77 R.drawable.vector_drawable30, 78 R.drawable.vector_drawable_group_clip, 79 R.drawable.vector_drawable_scale0, 80 R.drawable.vector_drawable_scale1, 81 R.drawable.vector_drawable_scale2, 82 R.drawable.vector_drawable_scale3, 83 }; 84 85 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 110 @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); 116 container.setColumnCount(4); 117 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++) { 122 d[i] = create(res,icon[i]); 123 } 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"); 128 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); 133 button.setBackgroundResource(icon[i]); 134 container.addView(button); 135 } 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"); 140 container.addView(t); 141 } 142} 143