| /* |
| * Copyright (C) 2007 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* |
| Initial: |
| test001: 2039901us (4079ns per call) |
| test049: 3346619us (6693ns per call) |
| test099: 4687402us (9374ns per call) |
| testInst001: 1327216us (2654ns per use) |
| testInst049: 1326995us (2653ns per use) |
| testInst099: 1327735us (2655ns per use) |
| |
| After refactoring cache code: 2871ns per use |
| After re-refactoring cache code: 2797ns per use |
| |
| After de-inlining invoke-interface: |
| test001: 2164873us (4329ns per call) |
| test049: 3303884us (6607ns per call) |
| test099: 4656718us (9313ns per call) |
| testInst001: 1401731us (2803ns per use) |
| testInst049: 1401120us (2802ns per use) |
| testInst099: 1401298us (2802ns per use) |
| |
| After adding caching for invoke-interface: |
| testIface001: 1909330us (3818ns per call) |
| testIface049: 1905204us (3810ns per call) |
| testIface099: 1899012us (3798ns per call) |
| testVirt001: 1825001us (3650ns per call) |
| testVirt049: 1826161us (3652ns per call) |
| testVirt099: 1823915us (3647ns per call) |
| testInst001: 1393963us (2787ns per use) |
| testInst049: 1393163us (2786ns per use) |
| testInst099: 1390496us (2780ns per use) |
| |
| After repeating each operation 16 times inside the inner loop: |
| testIface001: 1429472us (2726ns per call) * 2382ns |
| testIface049: 1427847us (2723ns per call) * 2396ns |
| testIface099: 1423707us (2715ns per call) * 2387ns |
| testVirt001: 1277790us (2437ns per call) * 2118ns |
| testVirt049: 1280276us (2441ns per call) * 2119ns |
| testVirt099: 1272640us (2427ns per call) * 2118ns |
| testInst001: 844694us (1611ns per use) * 1396ns |
| testInst049: 845619us (1612ns per use) * 1395ns |
| testInst099: 845526us (1612ns per use) * 1394ns |
| ('*' is with dx optimizations enabled) |
| */ |
| |
| /** |
| * Semi-generated class with many interfaces. |
| */ |
| public class ManyInterfaces |
| implements |
| Interface000, |
| Interface001, |
| Interface002, |
| Interface003, |
| Interface004, |
| Interface005, |
| Interface006, |
| Interface007, |
| Interface008, |
| Interface009, |
| Interface010, |
| Interface011, |
| Interface012, |
| Interface013, |
| Interface014, |
| Interface015, |
| Interface016, |
| Interface017, |
| Interface018, |
| Interface019, |
| Interface020, |
| Interface021, |
| Interface022, |
| Interface023, |
| Interface024, |
| Interface025, |
| Interface026, |
| Interface027, |
| Interface028, |
| Interface029, |
| Interface030, |
| Interface031, |
| Interface032, |
| Interface033, |
| Interface034, |
| Interface035, |
| Interface036, |
| Interface037, |
| Interface038, |
| Interface039, |
| Interface040, |
| Interface041, |
| Interface042, |
| Interface043, |
| Interface044, |
| Interface045, |
| Interface046, |
| Interface047, |
| Interface048, |
| Interface049, |
| Interface050, |
| Interface051, |
| Interface052, |
| Interface053, |
| Interface054, |
| Interface055, |
| Interface056, |
| Interface057, |
| Interface058, |
| Interface059, |
| Interface060, |
| Interface061, |
| Interface062, |
| Interface063, |
| Interface064, |
| Interface065, |
| Interface066, |
| Interface067, |
| Interface068, |
| Interface069, |
| Interface070, |
| Interface071, |
| Interface072, |
| Interface073, |
| Interface074, |
| Interface075, |
| Interface076, |
| Interface077, |
| Interface078, |
| Interface079, |
| Interface080, |
| Interface081, |
| Interface082, |
| Interface083, |
| Interface084, |
| Interface085, |
| Interface086, |
| Interface087, |
| Interface088, |
| Interface089, |
| Interface090, |
| Interface091, |
| Interface092, |
| Interface093, |
| Interface094, |
| Interface095, |
| Interface096, |
| Interface097, |
| Interface098, |
| Interface099 |
| { |
| /** whether to report timing information */ |
| private static boolean timing = false; |
| |
| /** |
| * Report on a section. |
| */ |
| private static void report(String label, long start, long end, int iter, |
| int rept) { |
| if (timing) { |
| System.out.println(label + ": " + (end - start) / 1000 + "us" |
| + " (" + (end - start) / (iter*rept) + "ns per call)"); |
| } else { |
| System.out.println(label + ": done"); |
| } |
| } |
| |
| /** |
| * Run tests. |
| * |
| * @param timing whether to print out timing info |
| */ |
| public static void run(boolean timing) { |
| ManyInterfaces.timing = timing; |
| ManyInterfaces obj = new ManyInterfaces(); |
| Interface001 one; |
| Interface049 forty; |
| Interface099 ninety; |
| long start, end; |
| int iter = 32768; |
| int rept = 16; |
| int i; |
| |
| /* |
| * Clear the heap. The various classes involved should already |
| * be loaded and ready as a result of instantiating ManyInterfaces. |
| */ |
| Runtime.getRuntime().gc(); |
| |
| start = System.nanoTime(); |
| testIface001(obj, iter); |
| end = System.nanoTime(); |
| report("testIface001", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testIface049(obj, iter); |
| end = System.nanoTime(); |
| report("testIface049", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testIface099(obj, iter); |
| end = System.nanoTime(); |
| report("testIface099", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testVirt001(obj, iter); |
| end = System.nanoTime(); |
| report("testVirt001", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testVirt049(obj, iter); |
| end = System.nanoTime(); |
| report("testVirt049", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testVirt099(obj, iter); |
| end = System.nanoTime(); |
| report("testVirt099", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testInstance001(obj, iter); |
| end = System.nanoTime(); |
| report("testInst001", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testInstance049(obj, iter); |
| end = System.nanoTime(); |
| report("testInst049", start, end, iter, rept); |
| |
| start = System.nanoTime(); |
| testInstance099(obj, iter); |
| end = System.nanoTime(); |
| report("testInst099", start, end, iter, rept); |
| } |
| |
| public int func001() { return 1; } |
| public int func003() { return 3; } |
| public int func005() { return 5; } |
| public int func007() { return 7; } |
| public int func009() { return 9; } |
| public int func011() { return 11; } |
| public int func013() { return 13; } |
| public int func015() { return 15; } |
| public int func017() { return 17; } |
| public int func019() { return 19; } |
| public int func021() { return 21; } |
| public int func023() { return 23; } |
| public int func025() { return 25; } |
| public int func027() { return 27; } |
| public int func029() { return 29; } |
| public int func031() { return 31; } |
| public int func033() { return 33; } |
| public int func035() { return 35; } |
| public int func037() { return 37; } |
| public int func039() { return 39; } |
| public int func041() { return 41; } |
| public int func043() { return 43; } |
| public int func045() { return 45; } |
| public int func047() { return 47; } |
| public int func049() { return 49; } |
| public int func051() { return 51; } |
| public int func053() { return 53; } |
| public int func055() { return 55; } |
| public int func057() { return 57; } |
| public int func059() { return 59; } |
| public int func061() { return 61; } |
| public int func063() { return 63; } |
| public int func065() { return 65; } |
| public int func067() { return 67; } |
| public int func069() { return 69; } |
| public int func071() { return 71; } |
| public int func073() { return 73; } |
| public int func075() { return 75; } |
| public int func077() { return 77; } |
| public int func079() { return 79; } |
| public int func081() { return 81; } |
| public int func083() { return 83; } |
| public int func085() { return 85; } |
| public int func087() { return 87; } |
| public int func089() { return 89; } |
| public int func091() { return 91; } |
| public int func093() { return 93; } |
| public int func095() { return 95; } |
| public int func097() { return 97; } |
| public int func099() { return 99; } |
| |
| static void testIface001(Interface001 iface, int count) { |
| while (count-- != 0) { |
| iface.func001(); iface.func001(); iface.func001(); iface.func001(); |
| iface.func001(); iface.func001(); iface.func001(); iface.func001(); |
| iface.func001(); iface.func001(); iface.func001(); iface.func001(); |
| iface.func001(); iface.func001(); iface.func001(); iface.func001(); |
| } |
| } |
| |
| static void testIface049(Interface049 iface, int count) { |
| while (count-- != 0) { |
| iface.func049(); iface.func049(); iface.func049(); iface.func049(); |
| iface.func049(); iface.func049(); iface.func049(); iface.func049(); |
| iface.func049(); iface.func049(); iface.func049(); iface.func049(); |
| iface.func049(); iface.func049(); iface.func049(); iface.func049(); |
| } |
| } |
| |
| static void testIface099(Interface099 iface, int count) { |
| while (count-- != 0) { |
| iface.func099(); iface.func099(); iface.func099(); iface.func099(); |
| iface.func099(); iface.func099(); iface.func099(); iface.func099(); |
| iface.func099(); iface.func099(); iface.func099(); iface.func099(); |
| iface.func099(); iface.func099(); iface.func099(); iface.func099(); |
| } |
| } |
| |
| static void testVirt001(ManyInterfaces obj, int count) { |
| while (count-- != 0) { |
| obj.func001(); obj.func001(); obj.func001(); obj.func001(); |
| obj.func001(); obj.func001(); obj.func001(); obj.func001(); |
| obj.func001(); obj.func001(); obj.func001(); obj.func001(); |
| obj.func001(); obj.func001(); obj.func001(); obj.func001(); |
| } |
| } |
| |
| static void testVirt049(ManyInterfaces obj, int count) { |
| while (count-- != 0) { |
| obj.func049(); obj.func049(); obj.func049(); obj.func049(); |
| obj.func049(); obj.func049(); obj.func049(); obj.func049(); |
| obj.func049(); obj.func049(); obj.func049(); obj.func049(); |
| obj.func049(); obj.func049(); obj.func049(); obj.func049(); |
| } |
| } |
| |
| static void testVirt099(ManyInterfaces obj, int count) { |
| while (count-- != 0) { |
| obj.func099(); obj.func099(); obj.func099(); obj.func099(); |
| obj.func099(); obj.func099(); obj.func099(); obj.func099(); |
| obj.func099(); obj.func099(); obj.func099(); obj.func099(); |
| obj.func099(); obj.func099(); obj.func099(); obj.func099(); |
| } |
| } |
| |
| static void testInstance001(Object obj, int count) { |
| if (!(obj instanceof Interface001)) |
| System.out.println("BAD"); |
| while (count-- != 0) { |
| boolean is; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| is = obj instanceof Interface001; |
| } |
| } |
| |
| static void testInstance049(Object obj, int count) { |
| if (!(obj instanceof Interface049)) |
| System.out.println("BAD"); |
| while (count-- != 0) { |
| boolean is; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| is = obj instanceof Interface049; |
| } |
| } |
| |
| static void testInstance099(Object obj, int count) { |
| if (!(obj instanceof Interface099)) |
| System.out.println("BAD"); |
| while (count-- != 0) { |
| boolean is; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| is = obj instanceof Interface099; |
| } |
| } |
| } |