146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey/* 246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * Copyright (C) 2015 The Android Open Source Project 346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * 446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * you may not use this file except in compliance with the License. 646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * You may obtain a copy of the License at 746cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * 846cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 946cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * 1046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * Unless required by applicable law or agreed to in writing, software 1146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 1246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * See the License for the specific language governing permissions and 1446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey * limitations under the License. 1546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey */ 1646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 1746cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkeypackage android.content.res; 1846cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 1946cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkeyimport android.util.AttributeSet; 2046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkeyimport android.util.Xml; 2146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 2246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkeyimport com.android.internal.R; 2346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 2446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkeyimport org.xmlpull.v1.XmlPullParser; 2546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 260fe2de958a7f15c6a277879f499a9be279be5b21Andreas Gampeimport com.google.caliper.AfterExperiment; 270fe2de958a7f15c6a277879f499a9be279be5b21Andreas Gampeimport com.google.caliper.BeforeExperiment; 280fe2de958a7f15c6a277879f499a9be279be5b21Andreas Gampe 290fe2de958a7f15c6a277879f499a9be279be5b21Andreas Gampepublic class ResourcesBenchmark { 3046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 3146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey private AssetManager mAsset; 3246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey private Resources mRes; 3346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 3446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey private int mTextId; 3546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey private int mColorId; 3646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey private int mIntegerId; 3746cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey private int mLayoutId; 3846cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 390fe2de958a7f15c6a277879f499a9be279be5b21Andreas Gampe @BeforeExperiment 4046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey protected void setUp() { 4146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mAsset = new AssetManager(); 4246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mAsset.addAssetPath("/system/framework/framework-res.apk"); 4346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mRes = new Resources(mAsset, null, null); 4446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 4546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mTextId = mRes.getIdentifier("cancel", "string", "android"); 4646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mColorId = mRes.getIdentifier("transparent", "color", "android"); 4746cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mIntegerId = mRes.getIdentifier("config_shortAnimTime", "integer", "android"); 4846cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mLayoutId = mRes.getIdentifier("two_line_list_item", "layout", "android"); 4946cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 5046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 510fe2de958a7f15c6a277879f499a9be279be5b21Andreas Gampe @AfterExperiment 5246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey protected void tearDown() { 5346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mAsset.close(); 5446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 5546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 5646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey public void timeGetString(int reps) { 5746cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey for (int i = 0; i < reps; i++) { 5846cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mRes.getText(mTextId); 5946cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 6046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 6146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 6246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey public void timeGetColor(int reps) { 6346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey for (int i = 0; i < reps; i++) { 6446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mRes.getColor(mColorId, null); 6546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 6646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 6746cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 6846cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey public void timeGetInteger(int reps) { 6946cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey for (int i = 0; i < reps; i++) { 7046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey mRes.getInteger(mIntegerId); 7146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 7246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 7346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey 7446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey public void timeGetLayoutAndTraverse(int reps) throws Exception { 7546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey for (int i = 0; i < reps; i++) { 7646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey final XmlResourceParser parser = mRes.getLayout(mLayoutId); 7746cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey try { 7846cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey while (parser.next() != XmlPullParser.END_DOCUMENT) { 7946cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey // Walk the entire tree 8046cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 8146cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } finally { 8246cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey parser.close(); 8346cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 8446cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 8546cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey } 8646cfd93aa22b5a4acab4626c140415eef922445cJeff Sharkey} 87