Merge "Add an IMT conflict benchmark"
diff --git a/benchmarks/src/benchmarks/ImtConflictBenchmark.java b/benchmarks/src/benchmarks/ImtConflictBenchmark.java
new file mode 100644
index 0000000..faff03d
--- /dev/null
+++ b/benchmarks/src/benchmarks/ImtConflictBenchmark.java
@@ -0,0 +1,1706 @@
+/*
+ * 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;
+import com.google.caliper.BeforeExperiment;
+
+/**
+ * This file is script-generated by ImtConflictBenchmarkGen.py.
+ * It measures the performance impact of conflicts in interface method tables.
+ * Run `python ImtConflictBenchmarkGen.py > ImtConflictBenchmark.java` to regenerate.
+ *
+ * Each interface has 64 methods, which is the current size of an IMT. C0 implements
+ * one interface, C1 implements two, C2 implements three, and so on. The intent
+ * is that C0 has no conflicts in its IMT, C1 has depth-2 conflicts in
+ * its IMT, C2 has depth-3 conflicts, etc. This is currently guaranteed by
+ * the fact that we hash interface methods by taking their method index modulo 64.
+ * (Note that a "conflict depth" of 1 means no conflict at all.)
+ */
+public class ImtConflictBenchmark {
+ @BeforeExperiment
+ public void setup() {
+ C0 c0 = new C0();
+ callF0(c0);
+ C1 c1 = new C1();
+ callF0(c1);
+ callF43(c1);
+ C2 c2 = new C2();
+ callF0(c2);
+ callF43(c2);
+ callF86(c2);
+ C3 c3 = new C3();
+ callF0(c3);
+ callF43(c3);
+ callF86(c3);
+ callF129(c3);
+ C4 c4 = new C4();
+ callF0(c4);
+ callF43(c4);
+ callF86(c4);
+ callF129(c4);
+ callF172(c4);
+ C5 c5 = new C5();
+ callF0(c5);
+ callF43(c5);
+ callF86(c5);
+ callF129(c5);
+ callF172(c5);
+ callF215(c5);
+ C6 c6 = new C6();
+ callF0(c6);
+ callF43(c6);
+ callF86(c6);
+ callF129(c6);
+ callF172(c6);
+ callF215(c6);
+ callF258(c6);
+ C7 c7 = new C7();
+ callF0(c7);
+ callF43(c7);
+ callF86(c7);
+ callF129(c7);
+ callF172(c7);
+ callF215(c7);
+ callF258(c7);
+ callF301(c7);
+ C8 c8 = new C8();
+ callF0(c8);
+ callF43(c8);
+ callF86(c8);
+ callF129(c8);
+ callF172(c8);
+ callF215(c8);
+ callF258(c8);
+ callF301(c8);
+ callF344(c8);
+ C9 c9 = new C9();
+ callF0(c9);
+ callF43(c9);
+ callF86(c9);
+ callF129(c9);
+ callF172(c9);
+ callF215(c9);
+ callF258(c9);
+ callF301(c9);
+ callF344(c9);
+ callF387(c9);
+ C10 c10 = new C10();
+ callF0(c10);
+ callF43(c10);
+ callF86(c10);
+ callF129(c10);
+ callF172(c10);
+ callF215(c10);
+ callF258(c10);
+ callF301(c10);
+ callF344(c10);
+ callF387(c10);
+ callF430(c10);
+ C11 c11 = new C11();
+ callF0(c11);
+ callF43(c11);
+ callF86(c11);
+ callF129(c11);
+ callF172(c11);
+ callF215(c11);
+ callF258(c11);
+ callF301(c11);
+ callF344(c11);
+ callF387(c11);
+ callF430(c11);
+ callF473(c11);
+ C12 c12 = new C12();
+ callF0(c12);
+ callF43(c12);
+ callF86(c12);
+ callF129(c12);
+ callF172(c12);
+ callF215(c12);
+ callF258(c12);
+ callF301(c12);
+ callF344(c12);
+ callF387(c12);
+ callF430(c12);
+ callF473(c12);
+ callF516(c12);
+ C13 c13 = new C13();
+ callF0(c13);
+ callF43(c13);
+ callF86(c13);
+ callF129(c13);
+ callF172(c13);
+ callF215(c13);
+ callF258(c13);
+ callF301(c13);
+ callF344(c13);
+ callF387(c13);
+ callF430(c13);
+ callF473(c13);
+ callF516(c13);
+ callF559(c13);
+ C14 c14 = new C14();
+ callF0(c14);
+ callF43(c14);
+ callF86(c14);
+ callF129(c14);
+ callF172(c14);
+ callF215(c14);
+ callF258(c14);
+ callF301(c14);
+ callF344(c14);
+ callF387(c14);
+ callF430(c14);
+ callF473(c14);
+ callF516(c14);
+ callF559(c14);
+ callF602(c14);
+ C15 c15 = new C15();
+ callF0(c15);
+ callF43(c15);
+ callF86(c15);
+ callF129(c15);
+ callF172(c15);
+ callF215(c15);
+ callF258(c15);
+ callF301(c15);
+ callF344(c15);
+ callF387(c15);
+ callF430(c15);
+ callF473(c15);
+ callF516(c15);
+ callF559(c15);
+ callF602(c15);
+ callF645(c15);
+ C16 c16 = new C16();
+ callF0(c16);
+ callF43(c16);
+ callF86(c16);
+ callF129(c16);
+ callF172(c16);
+ callF215(c16);
+ callF258(c16);
+ callF301(c16);
+ callF344(c16);
+ callF387(c16);
+ callF430(c16);
+ callF473(c16);
+ callF516(c16);
+ callF559(c16);
+ callF602(c16);
+ callF645(c16);
+ callF688(c16);
+ C17 c17 = new C17();
+ callF0(c17);
+ callF43(c17);
+ callF86(c17);
+ callF129(c17);
+ callF172(c17);
+ callF215(c17);
+ callF258(c17);
+ callF301(c17);
+ callF344(c17);
+ callF387(c17);
+ callF430(c17);
+ callF473(c17);
+ callF516(c17);
+ callF559(c17);
+ callF602(c17);
+ callF645(c17);
+ callF688(c17);
+ callF731(c17);
+ C18 c18 = new C18();
+ callF0(c18);
+ callF43(c18);
+ callF86(c18);
+ callF129(c18);
+ callF172(c18);
+ callF215(c18);
+ callF258(c18);
+ callF301(c18);
+ callF344(c18);
+ callF387(c18);
+ callF430(c18);
+ callF473(c18);
+ callF516(c18);
+ callF559(c18);
+ callF602(c18);
+ callF645(c18);
+ callF688(c18);
+ callF731(c18);
+ callF774(c18);
+ C19 c19 = new C19();
+ callF0(c19);
+ callF43(c19);
+ callF86(c19);
+ callF129(c19);
+ callF172(c19);
+ callF215(c19);
+ callF258(c19);
+ callF301(c19);
+ callF344(c19);
+ callF387(c19);
+ callF430(c19);
+ callF473(c19);
+ callF516(c19);
+ callF559(c19);
+ callF602(c19);
+ callF645(c19);
+ callF688(c19);
+ callF731(c19);
+ callF774(c19);
+ callF817(c19);
+ }
+ public void timeConflictDepth01(int nreps) {
+ C0 c0 = new C0();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ callF0(c0);
+ }
+ }
+ public void timeConflictDepth02(int nreps) {
+ C1 c1 = new C1();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ callF0(c1);
+ callF43(c1);
+ }
+ }
+ public void timeConflictDepth03(int nreps) {
+ C2 c2 = new C2();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c2);
+ callF43(c2);
+ callF86(c2);
+ callF0(c2);
+ callF43(c2);
+ callF86(c2);
+ callF0(c2);
+ callF43(c2);
+ callF86(c2);
+ callF0(c2);
+ callF43(c2);
+ callF86(c2);
+ callF0(c2);
+ callF43(c2);
+ callF86(c2);
+ callF0(c2);
+ callF43(c2);
+ callF86(c2);
+ callF0(c2);
+ callF43(c2);
+ }
+ }
+ public void timeConflictDepth04(int nreps) {
+ C3 c3 = new C3();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c3);
+ callF43(c3);
+ callF86(c3);
+ callF129(c3);
+ callF0(c3);
+ callF43(c3);
+ callF86(c3);
+ callF129(c3);
+ callF0(c3);
+ callF43(c3);
+ callF86(c3);
+ callF129(c3);
+ callF0(c3);
+ callF43(c3);
+ callF86(c3);
+ callF129(c3);
+ callF0(c3);
+ callF43(c3);
+ callF86(c3);
+ callF129(c3);
+ }
+ }
+ public void timeConflictDepth05(int nreps) {
+ C4 c4 = new C4();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c4);
+ callF43(c4);
+ callF86(c4);
+ callF129(c4);
+ callF172(c4);
+ callF0(c4);
+ callF43(c4);
+ callF86(c4);
+ callF129(c4);
+ callF172(c4);
+ callF0(c4);
+ callF43(c4);
+ callF86(c4);
+ callF129(c4);
+ callF172(c4);
+ callF0(c4);
+ callF43(c4);
+ callF86(c4);
+ callF129(c4);
+ callF172(c4);
+ }
+ }
+ public void timeConflictDepth06(int nreps) {
+ C5 c5 = new C5();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c5);
+ callF43(c5);
+ callF86(c5);
+ callF129(c5);
+ callF172(c5);
+ callF215(c5);
+ callF0(c5);
+ callF43(c5);
+ callF86(c5);
+ callF129(c5);
+ callF172(c5);
+ callF215(c5);
+ callF0(c5);
+ callF43(c5);
+ callF86(c5);
+ callF129(c5);
+ callF172(c5);
+ callF215(c5);
+ callF0(c5);
+ callF43(c5);
+ }
+ }
+ public void timeConflictDepth07(int nreps) {
+ C6 c6 = new C6();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c6);
+ callF43(c6);
+ callF86(c6);
+ callF129(c6);
+ callF172(c6);
+ callF215(c6);
+ callF258(c6);
+ callF0(c6);
+ callF43(c6);
+ callF86(c6);
+ callF129(c6);
+ callF172(c6);
+ callF215(c6);
+ callF258(c6);
+ callF0(c6);
+ callF43(c6);
+ callF86(c6);
+ callF129(c6);
+ callF172(c6);
+ callF215(c6);
+ }
+ }
+ public void timeConflictDepth08(int nreps) {
+ C7 c7 = new C7();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c7);
+ callF43(c7);
+ callF86(c7);
+ callF129(c7);
+ callF172(c7);
+ callF215(c7);
+ callF258(c7);
+ callF301(c7);
+ callF0(c7);
+ callF43(c7);
+ callF86(c7);
+ callF129(c7);
+ callF172(c7);
+ callF215(c7);
+ callF258(c7);
+ callF301(c7);
+ callF0(c7);
+ callF43(c7);
+ callF86(c7);
+ callF129(c7);
+ }
+ }
+ public void timeConflictDepth09(int nreps) {
+ C8 c8 = new C8();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c8);
+ callF43(c8);
+ callF86(c8);
+ callF129(c8);
+ callF172(c8);
+ callF215(c8);
+ callF258(c8);
+ callF301(c8);
+ callF344(c8);
+ callF0(c8);
+ callF43(c8);
+ callF86(c8);
+ callF129(c8);
+ callF172(c8);
+ callF215(c8);
+ callF258(c8);
+ callF301(c8);
+ callF344(c8);
+ callF0(c8);
+ callF43(c8);
+ }
+ }
+ public void timeConflictDepth10(int nreps) {
+ C9 c9 = new C9();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c9);
+ callF43(c9);
+ callF86(c9);
+ callF129(c9);
+ callF172(c9);
+ callF215(c9);
+ callF258(c9);
+ callF301(c9);
+ callF344(c9);
+ callF387(c9);
+ callF0(c9);
+ callF43(c9);
+ callF86(c9);
+ callF129(c9);
+ callF172(c9);
+ callF215(c9);
+ callF258(c9);
+ callF301(c9);
+ callF344(c9);
+ callF387(c9);
+ }
+ }
+ public void timeConflictDepth11(int nreps) {
+ C10 c10 = new C10();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c10);
+ callF43(c10);
+ callF86(c10);
+ callF129(c10);
+ callF172(c10);
+ callF215(c10);
+ callF258(c10);
+ callF301(c10);
+ callF344(c10);
+ callF387(c10);
+ callF430(c10);
+ callF0(c10);
+ callF43(c10);
+ callF86(c10);
+ callF129(c10);
+ callF172(c10);
+ callF215(c10);
+ callF258(c10);
+ callF301(c10);
+ callF344(c10);
+ }
+ }
+ public void timeConflictDepth12(int nreps) {
+ C11 c11 = new C11();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c11);
+ callF43(c11);
+ callF86(c11);
+ callF129(c11);
+ callF172(c11);
+ callF215(c11);
+ callF258(c11);
+ callF301(c11);
+ callF344(c11);
+ callF387(c11);
+ callF430(c11);
+ callF473(c11);
+ callF0(c11);
+ callF43(c11);
+ callF86(c11);
+ callF129(c11);
+ callF172(c11);
+ callF215(c11);
+ callF258(c11);
+ callF301(c11);
+ }
+ }
+ public void timeConflictDepth13(int nreps) {
+ C12 c12 = new C12();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c12);
+ callF43(c12);
+ callF86(c12);
+ callF129(c12);
+ callF172(c12);
+ callF215(c12);
+ callF258(c12);
+ callF301(c12);
+ callF344(c12);
+ callF387(c12);
+ callF430(c12);
+ callF473(c12);
+ callF516(c12);
+ callF0(c12);
+ callF43(c12);
+ callF86(c12);
+ callF129(c12);
+ callF172(c12);
+ callF215(c12);
+ callF258(c12);
+ }
+ }
+ public void timeConflictDepth14(int nreps) {
+ C13 c13 = new C13();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c13);
+ callF43(c13);
+ callF86(c13);
+ callF129(c13);
+ callF172(c13);
+ callF215(c13);
+ callF258(c13);
+ callF301(c13);
+ callF344(c13);
+ callF387(c13);
+ callF430(c13);
+ callF473(c13);
+ callF516(c13);
+ callF559(c13);
+ callF0(c13);
+ callF43(c13);
+ callF86(c13);
+ callF129(c13);
+ callF172(c13);
+ callF215(c13);
+ }
+ }
+ public void timeConflictDepth15(int nreps) {
+ C14 c14 = new C14();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c14);
+ callF43(c14);
+ callF86(c14);
+ callF129(c14);
+ callF172(c14);
+ callF215(c14);
+ callF258(c14);
+ callF301(c14);
+ callF344(c14);
+ callF387(c14);
+ callF430(c14);
+ callF473(c14);
+ callF516(c14);
+ callF559(c14);
+ callF602(c14);
+ callF0(c14);
+ callF43(c14);
+ callF86(c14);
+ callF129(c14);
+ callF172(c14);
+ }
+ }
+ public void timeConflictDepth16(int nreps) {
+ C15 c15 = new C15();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c15);
+ callF43(c15);
+ callF86(c15);
+ callF129(c15);
+ callF172(c15);
+ callF215(c15);
+ callF258(c15);
+ callF301(c15);
+ callF344(c15);
+ callF387(c15);
+ callF430(c15);
+ callF473(c15);
+ callF516(c15);
+ callF559(c15);
+ callF602(c15);
+ callF645(c15);
+ callF0(c15);
+ callF43(c15);
+ callF86(c15);
+ callF129(c15);
+ }
+ }
+ public void timeConflictDepth17(int nreps) {
+ C16 c16 = new C16();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c16);
+ callF43(c16);
+ callF86(c16);
+ callF129(c16);
+ callF172(c16);
+ callF215(c16);
+ callF258(c16);
+ callF301(c16);
+ callF344(c16);
+ callF387(c16);
+ callF430(c16);
+ callF473(c16);
+ callF516(c16);
+ callF559(c16);
+ callF602(c16);
+ callF645(c16);
+ callF688(c16);
+ callF0(c16);
+ callF43(c16);
+ callF86(c16);
+ }
+ }
+ public void timeConflictDepth18(int nreps) {
+ C17 c17 = new C17();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c17);
+ callF43(c17);
+ callF86(c17);
+ callF129(c17);
+ callF172(c17);
+ callF215(c17);
+ callF258(c17);
+ callF301(c17);
+ callF344(c17);
+ callF387(c17);
+ callF430(c17);
+ callF473(c17);
+ callF516(c17);
+ callF559(c17);
+ callF602(c17);
+ callF645(c17);
+ callF688(c17);
+ callF731(c17);
+ callF0(c17);
+ callF43(c17);
+ }
+ }
+ public void timeConflictDepth19(int nreps) {
+ C18 c18 = new C18();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c18);
+ callF43(c18);
+ callF86(c18);
+ callF129(c18);
+ callF172(c18);
+ callF215(c18);
+ callF258(c18);
+ callF301(c18);
+ callF344(c18);
+ callF387(c18);
+ callF430(c18);
+ callF473(c18);
+ callF516(c18);
+ callF559(c18);
+ callF602(c18);
+ callF645(c18);
+ callF688(c18);
+ callF731(c18);
+ callF774(c18);
+ callF0(c18);
+ }
+ }
+ public void timeConflictDepth20(int nreps) {
+ C19 c19 = new C19();
+ for (int i = 0; i < nreps; i++) {
+ callF0(c19);
+ callF43(c19);
+ callF86(c19);
+ callF129(c19);
+ callF172(c19);
+ callF215(c19);
+ callF258(c19);
+ callF301(c19);
+ callF344(c19);
+ callF387(c19);
+ callF430(c19);
+ callF473(c19);
+ callF516(c19);
+ callF559(c19);
+ callF602(c19);
+ callF645(c19);
+ callF688(c19);
+ callF731(c19);
+ callF774(c19);
+ callF817(c19);
+ }
+ }
+ public void callF0(I0 i) { i.f0(); }
+ public void callF43(I1 i) { i.f43(); }
+ public void callF86(I2 i) { i.f86(); }
+ public void callF129(I3 i) { i.f129(); }
+ public void callF172(I4 i) { i.f172(); }
+ public void callF215(I5 i) { i.f215(); }
+ public void callF258(I6 i) { i.f258(); }
+ public void callF301(I7 i) { i.f301(); }
+ public void callF344(I8 i) { i.f344(); }
+ public void callF387(I9 i) { i.f387(); }
+ public void callF430(I10 i) { i.f430(); }
+ public void callF473(I11 i) { i.f473(); }
+ public void callF516(I12 i) { i.f516(); }
+ public void callF559(I13 i) { i.f559(); }
+ public void callF602(I14 i) { i.f602(); }
+ public void callF645(I15 i) { i.f645(); }
+ public void callF688(I16 i) { i.f688(); }
+ public void callF731(I17 i) { i.f731(); }
+ public void callF774(I18 i) { i.f774(); }
+ public void callF817(I19 i) { i.f817(); }
+ static class C0 implements I0 {}
+ static class C1 implements I0, I1 {}
+ static class C2 implements I0, I1, I2 {}
+ static class C3 implements I0, I1, I2, I3 {}
+ static class C4 implements I0, I1, I2, I3, I4 {}
+ static class C5 implements I0, I1, I2, I3, I4, I5 {}
+ static class C6 implements I0, I1, I2, I3, I4, I5, I6 {}
+ static class C7 implements I0, I1, I2, I3, I4, I5, I6, I7 {}
+ static class C8 implements I0, I1, I2, I3, I4, I5, I6, I7, I8 {}
+ static class C9 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9 {}
+ static class C10 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10 {}
+ static class C11 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11 {}
+ static class C12 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12 {}
+ static class C13 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13 {}
+ static class C14 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14 {}
+ static class C15 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15 {}
+ static class C16 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16 {}
+ static class C17 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17 {}
+ static class C18 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18 {}
+ static class C19 implements I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19 {}
+ static interface I0 {
+ default void f0() {}
+ default void f1() {}
+ default void f2() {}
+ default void f3() {}
+ default void f4() {}
+ default void f5() {}
+ default void f6() {}
+ default void f7() {}
+ default void f8() {}
+ default void f9() {}
+ default void f10() {}
+ default void f11() {}
+ default void f12() {}
+ default void f13() {}
+ default void f14() {}
+ default void f15() {}
+ default void f16() {}
+ default void f17() {}
+ default void f18() {}
+ default void f19() {}
+ default void f20() {}
+ default void f21() {}
+ default void f22() {}
+ default void f23() {}
+ default void f24() {}
+ default void f25() {}
+ default void f26() {}
+ default void f27() {}
+ default void f28() {}
+ default void f29() {}
+ default void f30() {}
+ default void f31() {}
+ default void f32() {}
+ default void f33() {}
+ default void f34() {}
+ default void f35() {}
+ default void f36() {}
+ default void f37() {}
+ default void f38() {}
+ default void f39() {}
+ default void f40() {}
+ default void f41() {}
+ default void f42() {}
+ }
+ static interface I1 {
+ default void f43() {}
+ default void f44() {}
+ default void f45() {}
+ default void f46() {}
+ default void f47() {}
+ default void f48() {}
+ default void f49() {}
+ default void f50() {}
+ default void f51() {}
+ default void f52() {}
+ default void f53() {}
+ default void f54() {}
+ default void f55() {}
+ default void f56() {}
+ default void f57() {}
+ default void f58() {}
+ default void f59() {}
+ default void f60() {}
+ default void f61() {}
+ default void f62() {}
+ default void f63() {}
+ default void f64() {}
+ default void f65() {}
+ default void f66() {}
+ default void f67() {}
+ default void f68() {}
+ default void f69() {}
+ default void f70() {}
+ default void f71() {}
+ default void f72() {}
+ default void f73() {}
+ default void f74() {}
+ default void f75() {}
+ default void f76() {}
+ default void f77() {}
+ default void f78() {}
+ default void f79() {}
+ default void f80() {}
+ default void f81() {}
+ default void f82() {}
+ default void f83() {}
+ default void f84() {}
+ default void f85() {}
+ }
+ static interface I2 {
+ default void f86() {}
+ default void f87() {}
+ default void f88() {}
+ default void f89() {}
+ default void f90() {}
+ default void f91() {}
+ default void f92() {}
+ default void f93() {}
+ default void f94() {}
+ default void f95() {}
+ default void f96() {}
+ default void f97() {}
+ default void f98() {}
+ default void f99() {}
+ default void f100() {}
+ default void f101() {}
+ default void f102() {}
+ default void f103() {}
+ default void f104() {}
+ default void f105() {}
+ default void f106() {}
+ default void f107() {}
+ default void f108() {}
+ default void f109() {}
+ default void f110() {}
+ default void f111() {}
+ default void f112() {}
+ default void f113() {}
+ default void f114() {}
+ default void f115() {}
+ default void f116() {}
+ default void f117() {}
+ default void f118() {}
+ default void f119() {}
+ default void f120() {}
+ default void f121() {}
+ default void f122() {}
+ default void f123() {}
+ default void f124() {}
+ default void f125() {}
+ default void f126() {}
+ default void f127() {}
+ default void f128() {}
+ }
+ static interface I3 {
+ default void f129() {}
+ default void f130() {}
+ default void f131() {}
+ default void f132() {}
+ default void f133() {}
+ default void f134() {}
+ default void f135() {}
+ default void f136() {}
+ default void f137() {}
+ default void f138() {}
+ default void f139() {}
+ default void f140() {}
+ default void f141() {}
+ default void f142() {}
+ default void f143() {}
+ default void f144() {}
+ default void f145() {}
+ default void f146() {}
+ default void f147() {}
+ default void f148() {}
+ default void f149() {}
+ default void f150() {}
+ default void f151() {}
+ default void f152() {}
+ default void f153() {}
+ default void f154() {}
+ default void f155() {}
+ default void f156() {}
+ default void f157() {}
+ default void f158() {}
+ default void f159() {}
+ default void f160() {}
+ default void f161() {}
+ default void f162() {}
+ default void f163() {}
+ default void f164() {}
+ default void f165() {}
+ default void f166() {}
+ default void f167() {}
+ default void f168() {}
+ default void f169() {}
+ default void f170() {}
+ default void f171() {}
+ }
+ static interface I4 {
+ default void f172() {}
+ default void f173() {}
+ default void f174() {}
+ default void f175() {}
+ default void f176() {}
+ default void f177() {}
+ default void f178() {}
+ default void f179() {}
+ default void f180() {}
+ default void f181() {}
+ default void f182() {}
+ default void f183() {}
+ default void f184() {}
+ default void f185() {}
+ default void f186() {}
+ default void f187() {}
+ default void f188() {}
+ default void f189() {}
+ default void f190() {}
+ default void f191() {}
+ default void f192() {}
+ default void f193() {}
+ default void f194() {}
+ default void f195() {}
+ default void f196() {}
+ default void f197() {}
+ default void f198() {}
+ default void f199() {}
+ default void f200() {}
+ default void f201() {}
+ default void f202() {}
+ default void f203() {}
+ default void f204() {}
+ default void f205() {}
+ default void f206() {}
+ default void f207() {}
+ default void f208() {}
+ default void f209() {}
+ default void f210() {}
+ default void f211() {}
+ default void f212() {}
+ default void f213() {}
+ default void f214() {}
+ }
+ static interface I5 {
+ default void f215() {}
+ default void f216() {}
+ default void f217() {}
+ default void f218() {}
+ default void f219() {}
+ default void f220() {}
+ default void f221() {}
+ default void f222() {}
+ default void f223() {}
+ default void f224() {}
+ default void f225() {}
+ default void f226() {}
+ default void f227() {}
+ default void f228() {}
+ default void f229() {}
+ default void f230() {}
+ default void f231() {}
+ default void f232() {}
+ default void f233() {}
+ default void f234() {}
+ default void f235() {}
+ default void f236() {}
+ default void f237() {}
+ default void f238() {}
+ default void f239() {}
+ default void f240() {}
+ default void f241() {}
+ default void f242() {}
+ default void f243() {}
+ default void f244() {}
+ default void f245() {}
+ default void f246() {}
+ default void f247() {}
+ default void f248() {}
+ default void f249() {}
+ default void f250() {}
+ default void f251() {}
+ default void f252() {}
+ default void f253() {}
+ default void f254() {}
+ default void f255() {}
+ default void f256() {}
+ default void f257() {}
+ }
+ static interface I6 {
+ default void f258() {}
+ default void f259() {}
+ default void f260() {}
+ default void f261() {}
+ default void f262() {}
+ default void f263() {}
+ default void f264() {}
+ default void f265() {}
+ default void f266() {}
+ default void f267() {}
+ default void f268() {}
+ default void f269() {}
+ default void f270() {}
+ default void f271() {}
+ default void f272() {}
+ default void f273() {}
+ default void f274() {}
+ default void f275() {}
+ default void f276() {}
+ default void f277() {}
+ default void f278() {}
+ default void f279() {}
+ default void f280() {}
+ default void f281() {}
+ default void f282() {}
+ default void f283() {}
+ default void f284() {}
+ default void f285() {}
+ default void f286() {}
+ default void f287() {}
+ default void f288() {}
+ default void f289() {}
+ default void f290() {}
+ default void f291() {}
+ default void f292() {}
+ default void f293() {}
+ default void f294() {}
+ default void f295() {}
+ default void f296() {}
+ default void f297() {}
+ default void f298() {}
+ default void f299() {}
+ default void f300() {}
+ }
+ static interface I7 {
+ default void f301() {}
+ default void f302() {}
+ default void f303() {}
+ default void f304() {}
+ default void f305() {}
+ default void f306() {}
+ default void f307() {}
+ default void f308() {}
+ default void f309() {}
+ default void f310() {}
+ default void f311() {}
+ default void f312() {}
+ default void f313() {}
+ default void f314() {}
+ default void f315() {}
+ default void f316() {}
+ default void f317() {}
+ default void f318() {}
+ default void f319() {}
+ default void f320() {}
+ default void f321() {}
+ default void f322() {}
+ default void f323() {}
+ default void f324() {}
+ default void f325() {}
+ default void f326() {}
+ default void f327() {}
+ default void f328() {}
+ default void f329() {}
+ default void f330() {}
+ default void f331() {}
+ default void f332() {}
+ default void f333() {}
+ default void f334() {}
+ default void f335() {}
+ default void f336() {}
+ default void f337() {}
+ default void f338() {}
+ default void f339() {}
+ default void f340() {}
+ default void f341() {}
+ default void f342() {}
+ default void f343() {}
+ }
+ static interface I8 {
+ default void f344() {}
+ default void f345() {}
+ default void f346() {}
+ default void f347() {}
+ default void f348() {}
+ default void f349() {}
+ default void f350() {}
+ default void f351() {}
+ default void f352() {}
+ default void f353() {}
+ default void f354() {}
+ default void f355() {}
+ default void f356() {}
+ default void f357() {}
+ default void f358() {}
+ default void f359() {}
+ default void f360() {}
+ default void f361() {}
+ default void f362() {}
+ default void f363() {}
+ default void f364() {}
+ default void f365() {}
+ default void f366() {}
+ default void f367() {}
+ default void f368() {}
+ default void f369() {}
+ default void f370() {}
+ default void f371() {}
+ default void f372() {}
+ default void f373() {}
+ default void f374() {}
+ default void f375() {}
+ default void f376() {}
+ default void f377() {}
+ default void f378() {}
+ default void f379() {}
+ default void f380() {}
+ default void f381() {}
+ default void f382() {}
+ default void f383() {}
+ default void f384() {}
+ default void f385() {}
+ default void f386() {}
+ }
+ static interface I9 {
+ default void f387() {}
+ default void f388() {}
+ default void f389() {}
+ default void f390() {}
+ default void f391() {}
+ default void f392() {}
+ default void f393() {}
+ default void f394() {}
+ default void f395() {}
+ default void f396() {}
+ default void f397() {}
+ default void f398() {}
+ default void f399() {}
+ default void f400() {}
+ default void f401() {}
+ default void f402() {}
+ default void f403() {}
+ default void f404() {}
+ default void f405() {}
+ default void f406() {}
+ default void f407() {}
+ default void f408() {}
+ default void f409() {}
+ default void f410() {}
+ default void f411() {}
+ default void f412() {}
+ default void f413() {}
+ default void f414() {}
+ default void f415() {}
+ default void f416() {}
+ default void f417() {}
+ default void f418() {}
+ default void f419() {}
+ default void f420() {}
+ default void f421() {}
+ default void f422() {}
+ default void f423() {}
+ default void f424() {}
+ default void f425() {}
+ default void f426() {}
+ default void f427() {}
+ default void f428() {}
+ default void f429() {}
+ }
+ static interface I10 {
+ default void f430() {}
+ default void f431() {}
+ default void f432() {}
+ default void f433() {}
+ default void f434() {}
+ default void f435() {}
+ default void f436() {}
+ default void f437() {}
+ default void f438() {}
+ default void f439() {}
+ default void f440() {}
+ default void f441() {}
+ default void f442() {}
+ default void f443() {}
+ default void f444() {}
+ default void f445() {}
+ default void f446() {}
+ default void f447() {}
+ default void f448() {}
+ default void f449() {}
+ default void f450() {}
+ default void f451() {}
+ default void f452() {}
+ default void f453() {}
+ default void f454() {}
+ default void f455() {}
+ default void f456() {}
+ default void f457() {}
+ default void f458() {}
+ default void f459() {}
+ default void f460() {}
+ default void f461() {}
+ default void f462() {}
+ default void f463() {}
+ default void f464() {}
+ default void f465() {}
+ default void f466() {}
+ default void f467() {}
+ default void f468() {}
+ default void f469() {}
+ default void f470() {}
+ default void f471() {}
+ default void f472() {}
+ }
+ static interface I11 {
+ default void f473() {}
+ default void f474() {}
+ default void f475() {}
+ default void f476() {}
+ default void f477() {}
+ default void f478() {}
+ default void f479() {}
+ default void f480() {}
+ default void f481() {}
+ default void f482() {}
+ default void f483() {}
+ default void f484() {}
+ default void f485() {}
+ default void f486() {}
+ default void f487() {}
+ default void f488() {}
+ default void f489() {}
+ default void f490() {}
+ default void f491() {}
+ default void f492() {}
+ default void f493() {}
+ default void f494() {}
+ default void f495() {}
+ default void f496() {}
+ default void f497() {}
+ default void f498() {}
+ default void f499() {}
+ default void f500() {}
+ default void f501() {}
+ default void f502() {}
+ default void f503() {}
+ default void f504() {}
+ default void f505() {}
+ default void f506() {}
+ default void f507() {}
+ default void f508() {}
+ default void f509() {}
+ default void f510() {}
+ default void f511() {}
+ default void f512() {}
+ default void f513() {}
+ default void f514() {}
+ default void f515() {}
+ }
+ static interface I12 {
+ default void f516() {}
+ default void f517() {}
+ default void f518() {}
+ default void f519() {}
+ default void f520() {}
+ default void f521() {}
+ default void f522() {}
+ default void f523() {}
+ default void f524() {}
+ default void f525() {}
+ default void f526() {}
+ default void f527() {}
+ default void f528() {}
+ default void f529() {}
+ default void f530() {}
+ default void f531() {}
+ default void f532() {}
+ default void f533() {}
+ default void f534() {}
+ default void f535() {}
+ default void f536() {}
+ default void f537() {}
+ default void f538() {}
+ default void f539() {}
+ default void f540() {}
+ default void f541() {}
+ default void f542() {}
+ default void f543() {}
+ default void f544() {}
+ default void f545() {}
+ default void f546() {}
+ default void f547() {}
+ default void f548() {}
+ default void f549() {}
+ default void f550() {}
+ default void f551() {}
+ default void f552() {}
+ default void f553() {}
+ default void f554() {}
+ default void f555() {}
+ default void f556() {}
+ default void f557() {}
+ default void f558() {}
+ }
+ static interface I13 {
+ default void f559() {}
+ default void f560() {}
+ default void f561() {}
+ default void f562() {}
+ default void f563() {}
+ default void f564() {}
+ default void f565() {}
+ default void f566() {}
+ default void f567() {}
+ default void f568() {}
+ default void f569() {}
+ default void f570() {}
+ default void f571() {}
+ default void f572() {}
+ default void f573() {}
+ default void f574() {}
+ default void f575() {}
+ default void f576() {}
+ default void f577() {}
+ default void f578() {}
+ default void f579() {}
+ default void f580() {}
+ default void f581() {}
+ default void f582() {}
+ default void f583() {}
+ default void f584() {}
+ default void f585() {}
+ default void f586() {}
+ default void f587() {}
+ default void f588() {}
+ default void f589() {}
+ default void f590() {}
+ default void f591() {}
+ default void f592() {}
+ default void f593() {}
+ default void f594() {}
+ default void f595() {}
+ default void f596() {}
+ default void f597() {}
+ default void f598() {}
+ default void f599() {}
+ default void f600() {}
+ default void f601() {}
+ }
+ static interface I14 {
+ default void f602() {}
+ default void f603() {}
+ default void f604() {}
+ default void f605() {}
+ default void f606() {}
+ default void f607() {}
+ default void f608() {}
+ default void f609() {}
+ default void f610() {}
+ default void f611() {}
+ default void f612() {}
+ default void f613() {}
+ default void f614() {}
+ default void f615() {}
+ default void f616() {}
+ default void f617() {}
+ default void f618() {}
+ default void f619() {}
+ default void f620() {}
+ default void f621() {}
+ default void f622() {}
+ default void f623() {}
+ default void f624() {}
+ default void f625() {}
+ default void f626() {}
+ default void f627() {}
+ default void f628() {}
+ default void f629() {}
+ default void f630() {}
+ default void f631() {}
+ default void f632() {}
+ default void f633() {}
+ default void f634() {}
+ default void f635() {}
+ default void f636() {}
+ default void f637() {}
+ default void f638() {}
+ default void f639() {}
+ default void f640() {}
+ default void f641() {}
+ default void f642() {}
+ default void f643() {}
+ default void f644() {}
+ }
+ static interface I15 {
+ default void f645() {}
+ default void f646() {}
+ default void f647() {}
+ default void f648() {}
+ default void f649() {}
+ default void f650() {}
+ default void f651() {}
+ default void f652() {}
+ default void f653() {}
+ default void f654() {}
+ default void f655() {}
+ default void f656() {}
+ default void f657() {}
+ default void f658() {}
+ default void f659() {}
+ default void f660() {}
+ default void f661() {}
+ default void f662() {}
+ default void f663() {}
+ default void f664() {}
+ default void f665() {}
+ default void f666() {}
+ default void f667() {}
+ default void f668() {}
+ default void f669() {}
+ default void f670() {}
+ default void f671() {}
+ default void f672() {}
+ default void f673() {}
+ default void f674() {}
+ default void f675() {}
+ default void f676() {}
+ default void f677() {}
+ default void f678() {}
+ default void f679() {}
+ default void f680() {}
+ default void f681() {}
+ default void f682() {}
+ default void f683() {}
+ default void f684() {}
+ default void f685() {}
+ default void f686() {}
+ default void f687() {}
+ }
+ static interface I16 {
+ default void f688() {}
+ default void f689() {}
+ default void f690() {}
+ default void f691() {}
+ default void f692() {}
+ default void f693() {}
+ default void f694() {}
+ default void f695() {}
+ default void f696() {}
+ default void f697() {}
+ default void f698() {}
+ default void f699() {}
+ default void f700() {}
+ default void f701() {}
+ default void f702() {}
+ default void f703() {}
+ default void f704() {}
+ default void f705() {}
+ default void f706() {}
+ default void f707() {}
+ default void f708() {}
+ default void f709() {}
+ default void f710() {}
+ default void f711() {}
+ default void f712() {}
+ default void f713() {}
+ default void f714() {}
+ default void f715() {}
+ default void f716() {}
+ default void f717() {}
+ default void f718() {}
+ default void f719() {}
+ default void f720() {}
+ default void f721() {}
+ default void f722() {}
+ default void f723() {}
+ default void f724() {}
+ default void f725() {}
+ default void f726() {}
+ default void f727() {}
+ default void f728() {}
+ default void f729() {}
+ default void f730() {}
+ }
+ static interface I17 {
+ default void f731() {}
+ default void f732() {}
+ default void f733() {}
+ default void f734() {}
+ default void f735() {}
+ default void f736() {}
+ default void f737() {}
+ default void f738() {}
+ default void f739() {}
+ default void f740() {}
+ default void f741() {}
+ default void f742() {}
+ default void f743() {}
+ default void f744() {}
+ default void f745() {}
+ default void f746() {}
+ default void f747() {}
+ default void f748() {}
+ default void f749() {}
+ default void f750() {}
+ default void f751() {}
+ default void f752() {}
+ default void f753() {}
+ default void f754() {}
+ default void f755() {}
+ default void f756() {}
+ default void f757() {}
+ default void f758() {}
+ default void f759() {}
+ default void f760() {}
+ default void f761() {}
+ default void f762() {}
+ default void f763() {}
+ default void f764() {}
+ default void f765() {}
+ default void f766() {}
+ default void f767() {}
+ default void f768() {}
+ default void f769() {}
+ default void f770() {}
+ default void f771() {}
+ default void f772() {}
+ default void f773() {}
+ }
+ static interface I18 {
+ default void f774() {}
+ default void f775() {}
+ default void f776() {}
+ default void f777() {}
+ default void f778() {}
+ default void f779() {}
+ default void f780() {}
+ default void f781() {}
+ default void f782() {}
+ default void f783() {}
+ default void f784() {}
+ default void f785() {}
+ default void f786() {}
+ default void f787() {}
+ default void f788() {}
+ default void f789() {}
+ default void f790() {}
+ default void f791() {}
+ default void f792() {}
+ default void f793() {}
+ default void f794() {}
+ default void f795() {}
+ default void f796() {}
+ default void f797() {}
+ default void f798() {}
+ default void f799() {}
+ default void f800() {}
+ default void f801() {}
+ default void f802() {}
+ default void f803() {}
+ default void f804() {}
+ default void f805() {}
+ default void f806() {}
+ default void f807() {}
+ default void f808() {}
+ default void f809() {}
+ default void f810() {}
+ default void f811() {}
+ default void f812() {}
+ default void f813() {}
+ default void f814() {}
+ default void f815() {}
+ default void f816() {}
+ }
+ static interface I19 {
+ default void f817() {}
+ default void f818() {}
+ default void f819() {}
+ default void f820() {}
+ default void f821() {}
+ default void f822() {}
+ default void f823() {}
+ default void f824() {}
+ default void f825() {}
+ default void f826() {}
+ default void f827() {}
+ default void f828() {}
+ default void f829() {}
+ default void f830() {}
+ default void f831() {}
+ default void f832() {}
+ default void f833() {}
+ default void f834() {}
+ default void f835() {}
+ default void f836() {}
+ default void f837() {}
+ default void f838() {}
+ default void f839() {}
+ default void f840() {}
+ default void f841() {}
+ default void f842() {}
+ default void f843() {}
+ default void f844() {}
+ default void f845() {}
+ default void f846() {}
+ default void f847() {}
+ default void f848() {}
+ default void f849() {}
+ default void f850() {}
+ default void f851() {}
+ default void f852() {}
+ default void f853() {}
+ default void f854() {}
+ default void f855() {}
+ default void f856() {}
+ default void f857() {}
+ default void f858() {}
+ default void f859() {}
+ }
+}
diff --git a/benchmarks/src/benchmarks/ImtConflictBenchmarkGen.py b/benchmarks/src/benchmarks/ImtConflictBenchmarkGen.py
new file mode 100644
index 0000000..8f1fd7e
--- /dev/null
+++ b/benchmarks/src/benchmarks/ImtConflictBenchmarkGen.py
@@ -0,0 +1,102 @@
+#
+# 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.
+#
+
+import sys
+
+max_conflict_depth = 20 # In practice does not go above 20 for reasonable IMT sizes
+try:
+ imt_size = int(sys.argv[1])
+except (IndexError, ValueError):
+ print("Usage: python ImtConflictBenchmarkGen.py <IMT_SIZE>")
+ sys.exit(1)
+
+license = """\
+/*
+ * 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.
+ */
+"""
+description = """
+/**
+ * This file is script-generated by ImtConflictBenchmarkGen.py.
+ * It measures the performance impact of conflicts in interface method tables.
+ * Run `python ImtConflictBenchmarkGen.py > ImtConflictBenchmark.java` to regenerate.
+ *
+ * Each interface has 64 methods, which is the current size of an IMT. C0 implements
+ * one interface, C1 implements two, C2 implements three, and so on. The intent
+ * is that C0 has no conflicts in its IMT, C1 has depth-2 conflicts in
+ * its IMT, C2 has depth-3 conflicts, etc. This is currently guaranteed by
+ * the fact that we hash interface methods by taking their method index modulo 64.
+ * (Note that a "conflict depth" of 1 means no conflict at all.)
+ */\
+"""
+
+print(license)
+print("package benchmarks;")
+print("import com.google.caliper.BeforeExperiment;")
+print(description)
+
+print("public class ImtConflictBenchmark {")
+
+# Warm up interface method tables
+print(" @BeforeExperiment")
+print(" public void setup() {")
+for i in xrange(max_conflict_depth):
+ print(" C{0} c{0} = new C{0}();".format(i))
+ for j in xrange(i+1):
+ print(" callF{}(c{});".format(imt_size * j, i))
+print(" }")
+
+# Print test cases--one for each conflict depth
+for i in xrange(max_conflict_depth):
+ print(" public void timeConflictDepth{:02d}(int nreps) {{".format(i+1))
+ print(" C{0} c{0} = new C{0}();".format(i))
+ print(" for (int i = 0; i < nreps; i++) {")
+ # Cycle through each interface method in an IMT entry in order
+ # to test all conflict resolution possibilities
+ for j in xrange(max_conflict_depth):
+ print(" callF{}(c{});".format(imt_size * (j % (i + 1)), i))
+ print(" }")
+ print(" }")
+
+# Make calls through the IMTs
+for i in xrange(max_conflict_depth):
+ print(" public void callF{0}(I{1} i) {{ i.f{0}(); }}".format(imt_size*i, i))
+
+# Class definitions, implementing varying amounts of interfaces
+for i in xrange(max_conflict_depth):
+ interfaces = ", ".join(["I{}".format(j) for j in xrange(i+1)])
+ print(" static class C{} implements {} {{}}".format(i, interfaces))
+
+# Interface definitions, each with enough methods to fill an entire IMT
+for i in xrange(max_conflict_depth):
+ print(" static interface I{} {{".format(i))
+ for j in xrange(imt_size):
+ print(" default void f{}() {{}}".format(i*imt_size + j))
+ print(" }")
+
+print "}"