xref: /aosp_15_r20/art/test/133-static-invoke-super/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker 
2*795d594fSAndroid Build Coastguard Worker public class Main {
3*795d594fSAndroid Build Coastguard Worker     static class SuperClass {
getVar(int w)4*795d594fSAndroid Build Coastguard Worker       protected static int getVar(int w) {
5*795d594fSAndroid Build Coastguard Worker           return w & 0xF;
6*795d594fSAndroid Build Coastguard Worker       }
7*795d594fSAndroid Build Coastguard Worker     }
8*795d594fSAndroid Build Coastguard Worker     static class SubClass extends SuperClass {
getVarDirect(int w)9*795d594fSAndroid Build Coastguard Worker       final int getVarDirect(int w) {
10*795d594fSAndroid Build Coastguard Worker         return w & 0xF;
11*795d594fSAndroid Build Coastguard Worker       }
testDirect(int max)12*795d594fSAndroid Build Coastguard Worker       public void testDirect(int max) {
13*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < max; ++i) {
14*795d594fSAndroid Build Coastguard Worker           getVarDirect(max);
15*795d594fSAndroid Build Coastguard Worker         }
16*795d594fSAndroid Build Coastguard Worker       }
testStatic(int max)17*795d594fSAndroid Build Coastguard Worker       public void testStatic(int max) {
18*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < max; ++i) {
19*795d594fSAndroid Build Coastguard Worker           getVar(max);
20*795d594fSAndroid Build Coastguard Worker         }
21*795d594fSAndroid Build Coastguard Worker       }
22*795d594fSAndroid Build Coastguard Worker     }
23*795d594fSAndroid Build Coastguard Worker 
main(String[] args)24*795d594fSAndroid Build Coastguard Worker     static public void main(String[] args) throws Exception {
25*795d594fSAndroid Build Coastguard Worker         boolean timing = (args.length >= 1) && args[0].equals("--timing");
26*795d594fSAndroid Build Coastguard Worker         run(timing);
27*795d594fSAndroid Build Coastguard Worker     }
28*795d594fSAndroid Build Coastguard Worker 
testBasis(int iterations)29*795d594fSAndroid Build Coastguard Worker     static int testBasis(int iterations) {
30*795d594fSAndroid Build Coastguard Worker       (new SubClass()).testDirect(iterations);
31*795d594fSAndroid Build Coastguard Worker       return iterations;
32*795d594fSAndroid Build Coastguard Worker     }
33*795d594fSAndroid Build Coastguard Worker 
testStatic(int iterations)34*795d594fSAndroid Build Coastguard Worker     static int testStatic(int iterations) {
35*795d594fSAndroid Build Coastguard Worker       (new SubClass()).testStatic(iterations);
36*795d594fSAndroid Build Coastguard Worker       return iterations;
37*795d594fSAndroid Build Coastguard Worker     }
38*795d594fSAndroid Build Coastguard Worker 
run(boolean timing)39*795d594fSAndroid Build Coastguard Worker     static public void run(boolean timing) {
40*795d594fSAndroid Build Coastguard Worker         long time0 = System.nanoTime();
41*795d594fSAndroid Build Coastguard Worker         int count1 = testBasis(50000000);
42*795d594fSAndroid Build Coastguard Worker         long time1 = System.nanoTime();
43*795d594fSAndroid Build Coastguard Worker         int count2 = testStatic(50000000);
44*795d594fSAndroid Build Coastguard Worker         long time2 = System.nanoTime();
45*795d594fSAndroid Build Coastguard Worker 
46*795d594fSAndroid Build Coastguard Worker         System.out.println("basis: performed " + count1 + " iterations");
47*795d594fSAndroid Build Coastguard Worker         System.out.println("test1: performed " + count2 + " iterations");
48*795d594fSAndroid Build Coastguard Worker 
49*795d594fSAndroid Build Coastguard Worker         double basisMsec = (time1 - time0) / (double) count1 / 1000000;
50*795d594fSAndroid Build Coastguard Worker         double msec1 = (time2 - time1) / (double) count2 / 1000000;
51*795d594fSAndroid Build Coastguard Worker 
52*795d594fSAndroid Build Coastguard Worker         if (msec1 < basisMsec * 5) {
53*795d594fSAndroid Build Coastguard Worker             System.out.println("Timing is acceptable.");
54*795d594fSAndroid Build Coastguard Worker         } else {
55*795d594fSAndroid Build Coastguard Worker             System.out.println("Iterations are taking too long!");
56*795d594fSAndroid Build Coastguard Worker             timing = true;
57*795d594fSAndroid Build Coastguard Worker         }
58*795d594fSAndroid Build Coastguard Worker         if (timing) {
59*795d594fSAndroid Build Coastguard Worker             System.out.printf("basis time: %.3g msec\n", basisMsec);
60*795d594fSAndroid Build Coastguard Worker             System.out.printf("test1: %.3g msec per iteration\n", msec1);
61*795d594fSAndroid Build Coastguard Worker         }
62*795d594fSAndroid Build Coastguard Worker     }
63*795d594fSAndroid Build Coastguard Worker }
64