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