/*
|
* Copyright 2016 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.
|
*/
|
|
package benchmarks;
|
|
public class InvokeInterface {
|
static MultiClass multi;
|
|
static {
|
multi = new MultiClass();
|
}
|
|
public void timeCall0Concrete(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall0Concrete(m);
|
}
|
}
|
|
public void timeCall0Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall0Interface(m);
|
}
|
}
|
|
public void timeCall1Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall1Interface(m);
|
}
|
}
|
|
public void timeCall2Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall2Interface(m);
|
}
|
}
|
|
public void timeCall3Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall3Interface(m);
|
}
|
}
|
|
public void timeCall4Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall4Interface(m);
|
}
|
}
|
|
public void timeCall5Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall5Interface(m);
|
}
|
}
|
|
public void timeCall6Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall6Interface(m);
|
}
|
}
|
|
public void timeCall7Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall7Interface(m);
|
}
|
}
|
|
public void timeCall8Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall8Interface(m);
|
}
|
}
|
|
public void timeCall9Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall9Interface(m);
|
}
|
}
|
|
public void timeCall10Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall10Interface(m);
|
}
|
}
|
|
public void timeCall11Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall11Interface(m);
|
}
|
}
|
|
public void timeCall12Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall12Interface(m);
|
}
|
}
|
|
public void timeCall13Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall13Interface(m);
|
}
|
}
|
|
public void timeCall14Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall14Interface(m);
|
}
|
}
|
|
public void timeCall15Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall15Interface(m);
|
}
|
}
|
|
public void timeCall16Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall16Interface(m);
|
}
|
}
|
|
public void timeCall17Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall17Interface(m);
|
}
|
}
|
|
public void timeCall18Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall18Interface(m);
|
}
|
}
|
|
public void timeCall19Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall19Interface(m);
|
}
|
}
|
|
public void timeCall20Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall20Interface(m);
|
}
|
}
|
|
public void timeCall21Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall21Interface(m);
|
}
|
}
|
|
public void timeCall22Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall22Interface(m);
|
}
|
}
|
|
public void timeCall23Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall23Interface(m);
|
}
|
}
|
|
public void timeCall24Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall24Interface(m);
|
}
|
}
|
|
public void timeCall25Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall25Interface(m);
|
}
|
}
|
|
public void timeCall26Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall26Interface(m);
|
}
|
}
|
|
public void timeCall27Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall27Interface(m);
|
}
|
}
|
|
public void timeCall28Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall28Interface(m);
|
}
|
}
|
|
public void timeCall29Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall29Interface(m);
|
}
|
}
|
|
public void timeCall30Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall30Interface(m);
|
}
|
}
|
|
public void timeCall31Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall31Interface(m);
|
}
|
}
|
|
public void timeCall32Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall32Interface(m);
|
}
|
}
|
|
public void timeCall33Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall33Interface(m);
|
}
|
}
|
|
public void timeCall34Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall34Interface(m);
|
}
|
}
|
|
public void timeCall35Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall35Interface(m);
|
}
|
}
|
|
public void timeCall36Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall36Interface(m);
|
}
|
}
|
|
public void timeCall37Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall37Interface(m);
|
}
|
}
|
|
public void timeCall38Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall38Interface(m);
|
}
|
}
|
|
public void timeCall39Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall39Interface(m);
|
}
|
}
|
|
public void timeCall40Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall40Interface(m);
|
}
|
}
|
|
public void timeCall41Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall41Interface(m);
|
}
|
}
|
|
public void timeCall42Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall42Interface(m);
|
}
|
}
|
|
public void timeCall43Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall43Interface(m);
|
}
|
}
|
|
public void timeCall44Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall44Interface(m);
|
}
|
}
|
|
public void timeCall45Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall45Interface(m);
|
}
|
}
|
|
public void timeCall46Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall46Interface(m);
|
}
|
}
|
|
public void timeCall47Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall47Interface(m);
|
}
|
}
|
|
public void timeCall48Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall48Interface(m);
|
}
|
}
|
|
public void timeCall49Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall49Interface(m);
|
}
|
}
|
|
public void timeCall50Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall50Interface(m);
|
}
|
}
|
|
public void timeCall51Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall51Interface(m);
|
}
|
}
|
|
public void timeCall52Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall52Interface(m);
|
}
|
}
|
|
public void timeCall53Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall53Interface(m);
|
}
|
}
|
|
public void timeCall54Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall54Interface(m);
|
}
|
}
|
|
public void timeCall55Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall55Interface(m);
|
}
|
}
|
|
public void timeCall56Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall56Interface(m);
|
}
|
}
|
|
public void timeCall57Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall57Interface(m);
|
}
|
}
|
|
public void timeCall58Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall58Interface(m);
|
}
|
}
|
|
public void timeCall59Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall59Interface(m);
|
}
|
}
|
|
public void timeCall60Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall60Interface(m);
|
}
|
}
|
|
public void timeCall61Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall61Interface(m);
|
}
|
}
|
|
public void timeCall62Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall62Interface(m);
|
}
|
}
|
|
public void timeCall63Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall63Interface(m);
|
}
|
}
|
|
public void timeCall64Interface(int nreps) {
|
MultiClass m = multi;
|
for (int i = 0; i < nreps; i++) {
|
doCall64Interface(m);
|
}
|
}
|
|
// Try calling these through the IMT/IfTable
|
public void doCall0Interface(Iface0 i) { i.callIface0(); }
|
public void doCall1Interface(Iface1 i) { i.callIface1(); }
|
public void doCall2Interface(Iface2 i) { i.callIface2(); }
|
public void doCall3Interface(Iface3 i) { i.callIface3(); }
|
public void doCall4Interface(Iface4 i) { i.callIface4(); }
|
public void doCall5Interface(Iface5 i) { i.callIface5(); }
|
public void doCall6Interface(Iface6 i) { i.callIface6(); }
|
public void doCall7Interface(Iface7 i) { i.callIface7(); }
|
public void doCall8Interface(Iface8 i) { i.callIface8(); }
|
public void doCall9Interface(Iface9 i) { i.callIface9(); }
|
public void doCall10Interface(Iface10 i) { i.callIface10(); }
|
public void doCall11Interface(Iface11 i) { i.callIface11(); }
|
public void doCall12Interface(Iface12 i) { i.callIface12(); }
|
public void doCall13Interface(Iface13 i) { i.callIface13(); }
|
public void doCall14Interface(Iface14 i) { i.callIface14(); }
|
public void doCall15Interface(Iface15 i) { i.callIface15(); }
|
public void doCall16Interface(Iface16 i) { i.callIface16(); }
|
public void doCall17Interface(Iface17 i) { i.callIface17(); }
|
public void doCall18Interface(Iface18 i) { i.callIface18(); }
|
public void doCall19Interface(Iface19 i) { i.callIface19(); }
|
public void doCall20Interface(Iface20 i) { i.callIface20(); }
|
public void doCall21Interface(Iface21 i) { i.callIface21(); }
|
public void doCall22Interface(Iface22 i) { i.callIface22(); }
|
public void doCall23Interface(Iface23 i) { i.callIface23(); }
|
public void doCall24Interface(Iface24 i) { i.callIface24(); }
|
public void doCall25Interface(Iface25 i) { i.callIface25(); }
|
public void doCall26Interface(Iface26 i) { i.callIface26(); }
|
public void doCall27Interface(Iface27 i) { i.callIface27(); }
|
public void doCall28Interface(Iface28 i) { i.callIface28(); }
|
public void doCall29Interface(Iface29 i) { i.callIface29(); }
|
public void doCall30Interface(Iface30 i) { i.callIface30(); }
|
public void doCall31Interface(Iface31 i) { i.callIface31(); }
|
public void doCall32Interface(Iface32 i) { i.callIface32(); }
|
public void doCall33Interface(Iface33 i) { i.callIface33(); }
|
public void doCall34Interface(Iface34 i) { i.callIface34(); }
|
public void doCall35Interface(Iface35 i) { i.callIface35(); }
|
public void doCall36Interface(Iface36 i) { i.callIface36(); }
|
public void doCall37Interface(Iface37 i) { i.callIface37(); }
|
public void doCall38Interface(Iface38 i) { i.callIface38(); }
|
public void doCall39Interface(Iface39 i) { i.callIface39(); }
|
public void doCall40Interface(Iface40 i) { i.callIface40(); }
|
public void doCall41Interface(Iface41 i) { i.callIface41(); }
|
public void doCall42Interface(Iface42 i) { i.callIface42(); }
|
public void doCall43Interface(Iface43 i) { i.callIface43(); }
|
public void doCall44Interface(Iface44 i) { i.callIface44(); }
|
public void doCall45Interface(Iface45 i) { i.callIface45(); }
|
public void doCall46Interface(Iface46 i) { i.callIface46(); }
|
public void doCall47Interface(Iface47 i) { i.callIface47(); }
|
public void doCall48Interface(Iface48 i) { i.callIface48(); }
|
public void doCall49Interface(Iface49 i) { i.callIface49(); }
|
public void doCall50Interface(Iface50 i) { i.callIface50(); }
|
public void doCall51Interface(Iface51 i) { i.callIface51(); }
|
public void doCall52Interface(Iface52 i) { i.callIface52(); }
|
public void doCall53Interface(Iface53 i) { i.callIface53(); }
|
public void doCall54Interface(Iface54 i) { i.callIface54(); }
|
public void doCall55Interface(Iface55 i) { i.callIface55(); }
|
public void doCall56Interface(Iface56 i) { i.callIface56(); }
|
public void doCall57Interface(Iface57 i) { i.callIface57(); }
|
public void doCall58Interface(Iface58 i) { i.callIface58(); }
|
public void doCall59Interface(Iface59 i) { i.callIface59(); }
|
public void doCall60Interface(Iface60 i) { i.callIface60(); }
|
public void doCall61Interface(Iface61 i) { i.callIface61(); }
|
public void doCall62Interface(Iface62 i) { i.callIface62(); }
|
public void doCall63Interface(Iface63 i) { i.callIface63(); }
|
public void doCall64Interface(Iface64 i) { i.callIface64(); }
|
|
// Try calling this through the vtable for comparison.
|
public void doCall0Concrete(MultiClass m) { m.callIface0(); }
|
|
// IMTs are 64 entries in length. By making this 65 interfaces we guarantee that we will have a
|
// collision.
|
static class MultiClass implements Iface0, Iface1, Iface2, Iface3, Iface4,
|
Iface5, Iface6, Iface7, Iface8, Iface9,
|
Iface10, Iface11, Iface12, Iface13, Iface14,
|
Iface15, Iface16, Iface17, Iface18, Iface19,
|
Iface20, Iface21, Iface22, Iface23, Iface24,
|
Iface25, Iface26, Iface27, Iface28, Iface29,
|
Iface30, Iface31, Iface32, Iface33, Iface34,
|
Iface35, Iface36, Iface37, Iface38, Iface39,
|
Iface40, Iface41, Iface42, Iface43, Iface44,
|
Iface45, Iface46, Iface47, Iface48, Iface49,
|
Iface50, Iface51, Iface52, Iface53, Iface54,
|
Iface55, Iface56, Iface57, Iface58, Iface59,
|
Iface60, Iface61, Iface62, Iface63, Iface64 { }
|
|
// The declaration of the 64 interfaces. We give them all default methods to avoid having to
|
// repeat ourselves.
|
static interface Iface0 { default void callIface0() {} }
|
static interface Iface1 { default void callIface1() {} }
|
static interface Iface2 { default void callIface2() {} }
|
static interface Iface3 { default void callIface3() {} }
|
static interface Iface4 { default void callIface4() {} }
|
static interface Iface5 { default void callIface5() {} }
|
static interface Iface6 { default void callIface6() {} }
|
static interface Iface7 { default void callIface7() {} }
|
static interface Iface8 { default void callIface8() {} }
|
static interface Iface9 { default void callIface9() {} }
|
static interface Iface10 { default void callIface10() {} }
|
static interface Iface11 { default void callIface11() {} }
|
static interface Iface12 { default void callIface12() {} }
|
static interface Iface13 { default void callIface13() {} }
|
static interface Iface14 { default void callIface14() {} }
|
static interface Iface15 { default void callIface15() {} }
|
static interface Iface16 { default void callIface16() {} }
|
static interface Iface17 { default void callIface17() {} }
|
static interface Iface18 { default void callIface18() {} }
|
static interface Iface19 { default void callIface19() {} }
|
static interface Iface20 { default void callIface20() {} }
|
static interface Iface21 { default void callIface21() {} }
|
static interface Iface22 { default void callIface22() {} }
|
static interface Iface23 { default void callIface23() {} }
|
static interface Iface24 { default void callIface24() {} }
|
static interface Iface25 { default void callIface25() {} }
|
static interface Iface26 { default void callIface26() {} }
|
static interface Iface27 { default void callIface27() {} }
|
static interface Iface28 { default void callIface28() {} }
|
static interface Iface29 { default void callIface29() {} }
|
static interface Iface30 { default void callIface30() {} }
|
static interface Iface31 { default void callIface31() {} }
|
static interface Iface32 { default void callIface32() {} }
|
static interface Iface33 { default void callIface33() {} }
|
static interface Iface34 { default void callIface34() {} }
|
static interface Iface35 { default void callIface35() {} }
|
static interface Iface36 { default void callIface36() {} }
|
static interface Iface37 { default void callIface37() {} }
|
static interface Iface38 { default void callIface38() {} }
|
static interface Iface39 { default void callIface39() {} }
|
static interface Iface40 { default void callIface40() {} }
|
static interface Iface41 { default void callIface41() {} }
|
static interface Iface42 { default void callIface42() {} }
|
static interface Iface43 { default void callIface43() {} }
|
static interface Iface44 { default void callIface44() {} }
|
static interface Iface45 { default void callIface45() {} }
|
static interface Iface46 { default void callIface46() {} }
|
static interface Iface47 { default void callIface47() {} }
|
static interface Iface48 { default void callIface48() {} }
|
static interface Iface49 { default void callIface49() {} }
|
static interface Iface50 { default void callIface50() {} }
|
static interface Iface51 { default void callIface51() {} }
|
static interface Iface52 { default void callIface52() {} }
|
static interface Iface53 { default void callIface53() {} }
|
static interface Iface54 { default void callIface54() {} }
|
static interface Iface55 { default void callIface55() {} }
|
static interface Iface56 { default void callIface56() {} }
|
static interface Iface57 { default void callIface57() {} }
|
static interface Iface58 { default void callIface58() {} }
|
static interface Iface59 { default void callIface59() {} }
|
static interface Iface60 { default void callIface60() {} }
|
static interface Iface61 { default void callIface61() {} }
|
static interface Iface62 { default void callIface62() {} }
|
static interface Iface63 { default void callIface63() {} }
|
static interface Iface64 { default void callIface64() {} }
|
}
|