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