14b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers/*
24b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * Copyright (C) 2010 Google Inc.
34b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers *
44b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * Licensed under the Apache License, Version 2.0 (the "License");
54b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * you may not use this file except in compliance with the License.
64b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * You may obtain a copy of the License at
74b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers *
84b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * http://www.apache.org/licenses/LICENSE-2.0
94b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers *
104b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * Unless required by applicable law or agreed to in writing, software
114b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * distributed under the License is distributed on an "AS IS" BASIS,
124b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * See the License for the specific language governing permissions and
144b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * limitations under the License.
154b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers */
164b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers
174b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers/**
184b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers * Test code generation for field accesses, based on libcore's FieldAccessBenchmark.
194b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers */
204b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogerspublic class Main {
214b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    private static class Inner {
224b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        public int publicInnerIntVal;
234b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        protected int protectedInnerIntVal;
244b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        private int privateInnerIntVal;
254b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int packageInnerIntVal;
264b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
274b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    int intVal = 42;
284b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    final int finalIntVal = 42;
294b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    static int staticIntVal = 42;
304b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    static final int staticFinalIntVal = 42;
314b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers
324b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeField(int reps) {
334b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
344b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
354b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = intVal;
364b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
374b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
384b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
394b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldFinal(int reps) {
404b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
414b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
424b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = finalIntVal;
434b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
444b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
454b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
464b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldStatic(int reps) {
474b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
484b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
494b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = staticIntVal;
504b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
514b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
524b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
534b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldStaticFinal(int reps) {
544b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
554b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
564b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = staticFinalIntVal;
574b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
584b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
594b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
604b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldCached(int reps) {
614b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
624b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int cachedIntVal = this.intVal;
634b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
644b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = cachedIntVal;
654b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
664b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
674b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
684b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldPrivateInnerClassPublicField(int reps) {
694b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
704b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        Inner inner = new Inner();
714b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
724b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = inner.publicInnerIntVal;
734b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
744b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
754b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
764b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldPrivateInnerClassProtectedField(int reps) {
774b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
784b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        Inner inner = new Inner();
794b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
804b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = inner.protectedInnerIntVal;
814b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
824b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
834b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
844b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldPrivateInnerClassPrivateField(int reps) {
854b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
864b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        Inner inner = new Inner();
874b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
884b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = inner.privateInnerIntVal;
894b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
904b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
914b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
924b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public int timeFieldPrivateInnerClassPackageField(int reps) {
934b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        int result = 0;
944b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        Inner inner = new Inner();
954b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        for (int rep = 0; rep < reps; ++rep) {
964b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers            result = inner.packageInnerIntVal;
974b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        }
984b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        return result;
994b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
1004b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers
1014b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    public static void main(String args[]) {
1024b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        System.out.println("Starting test");
1034b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        Main i = new Main();
1044b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeField(100);
1054b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldFinal(100);
1064b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldStatic(100);
1074b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldStaticFinal(100);
1084b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldCached(100);
1094b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldPrivateInnerClassPublicField(100);
1104b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldPrivateInnerClassProtectedField(100);
1114b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldPrivateInnerClassPrivateField(100);
1124b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        i.timeFieldPrivateInnerClassPackageField(100);
1134b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers        System.out.println("Test complete");
1144b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers    }
1154b3bc371024ef9f4d50846bc5181d684304e6e6dIan Rogers}
116