Home | History | Annotate | Download | only in dynamic
      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  */
     14 package com.android.test.dynamic;
     15 
     16 import android.app.Activity;
     17 import android.content.res.Resources;
     18 import android.graphics.drawable.VectorDrawable;
     19 import android.os.Bundle;
     20 import android.util.AttributeSet;
     21 import android.util.Log;
     22 import android.util.Xml;
     23 import android.widget.TextView;
     24 import android.widget.Button;
     25 import android.widget.GridLayout;
     26 import android.widget.ScrollView;
     27 
     28 import org.xmlpull.v1.XmlPullParser;
     29 import org.xmlpull.v1.XmlPullParserException;
     30 
     31 import java.io.IOException;
     32 import java.text.DecimalFormat;
     33 
     34 @SuppressWarnings({"UnusedDeclaration"})
     35 public 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