package com.pascalwelsch.compositeandroid.performance; import com.pascalwelsch.compositeandroid.R; import android.annotation.SuppressLint; import android.content.res.Resources; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatDelegate; import android.util.Log; import android.view.View; import java.io.File; import java.util.ArrayList; import java.util.List; public class PerformanceTestActivity extends PerformanceTestActivity1 { private static final String TAG = PerformanceTestActivity.class.getSimpleName(); public static final int ITERATIONS = 50000; private final String mName = "0"; @Override public Resources getResources() { return super.getResources(); } @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_performance); final View start = findViewById(R.id.start); assert start != null; start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { runPerformanceTest(); } }); } @Override protected void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); outState.putString(mName, mName); } private void runPerformanceTest() { String number = "5 stages: "; System.gc(); final int iterations = 1; float duration = 0; duration = 0; for (int i = 0; i < iterations; i++) { duration += testGetCacheDir(); } duration /= iterations; Log.v(TAG, number + "getCacheDir() in " + duration + "ms"); duration = 0; for (int i = 0; i < iterations; i++) { duration += testGetResources(); } duration /= iterations; Log.v(TAG, number + "getResources() in " + duration + "ms"); duration = 0; for (int i = 0; i < iterations; i++) { duration += testGetDelegate(); } duration /= iterations; Log.v(TAG, number + "getDelegate() in " + duration + "ms"); duration = 0; for (int i = 0; i < iterations; i++) { duration += testGetFile(); } duration /= iterations; Log.v(TAG, number + "getFile() in " + duration + "ms"); duration = 0; for (int i = 0; i < iterations; i++) { duration += testOnSaveInstanceState(); } duration /= iterations; Log.v(TAG, number + "onSaveInstanceState() in " + duration + "ms"); } private long testGetCacheDir() { final List<File> results = new ArrayList<>(); final long start = System.currentTimeMillis(); for (long i = 0; i < ITERATIONS; i++) { final File file = getCacheDir(); results.add(file); } return System.currentTimeMillis() - start; } private long testGetDelegate() { final List<AppCompatDelegate> results = new ArrayList<>(); final long start = System.currentTimeMillis(); for (long i = 0; i < ITERATIONS; i++) { final AppCompatDelegate delegate = getDelegate(); results.add(delegate); } return System.currentTimeMillis() - start; } private long testGetFile() { final List<File> results = new ArrayList<>(); final long start = System.currentTimeMillis(); for (long i = 0; i < ITERATIONS; i++) { final File file = getFilesDir(); results.add(file); } return System.currentTimeMillis() - start; } private long testGetResources() { final List<Resources> results = new ArrayList<>(); final long start = System.currentTimeMillis(); for (long i = 0; i < ITERATIONS; i++) { final Resources resources = getResources(); results.add(resources); } return System.currentTimeMillis() - start; } @SuppressLint("Assert") private long testOnSaveInstanceState() { final List<Bundle> results = new ArrayList<>(); final long start = System.currentTimeMillis(); for (long i = 0; i < ITERATIONS; i++) { final Bundle outState = new Bundle(); onSaveInstanceState(outState); results.add(outState); } final long end = System.currentTimeMillis(); assert results.get(0).getString("1") == "1"; assert results.get(0).getString("20") == "20"; assert results.get(results.size()).getString("1") == "1"; assert results.get(results.size()).getString("20") == "20"; return end - start; } }