test/hotspot/jtreg/vmTestbase/jit/graph/Globals.java
changeset 58564 218a1a642c6f
parent 50366 4d85990f9c4a
--- a/test/hotspot/jtreg/vmTestbase/jit/graph/Globals.java	Thu Oct 10 11:40:59 2019 -0700
+++ b/test/hotspot/jtreg/vmTestbase/jit/graph/Globals.java	Fri Oct 11 09:43:41 2019 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,263 +22,200 @@
  */
 
 package jit.graph;
-import java.io.*;
-import java.util.*;
-import java.lang.*;
-import java.lang.reflect.*;
+
+import jdk.test.lib.Utils;
 import nsk.share.TestFailure;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Random;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+public final class Globals {
+
 
-public final class Globals
-{
-    // Minimum and Maximum number of threads
-    public static int     NUM_THREADS      = 1;
-    public static long    RANDOM_SEED      = System.currentTimeMillis();
-    public static int     STATIC_LOOP      = 0;
-    public static int     NUM_TEST_CLASSES = 7;
-    public static long    RANDOM_LOOP      = 100;
-    public static boolean VERBOSE          = false;
-    private static Random indexGenerator   = null;
+    public static int STATIC_LOOP = 0;
+    public static int NUM_TEST_CLASSES = 7;
+    public static long RANDOM_LOOP = 100;
+    public static boolean VERBOSE = false;
 
-  //private static TestLoader CGTTestLoader = null;
-    private static String [] ClassArray = null;
-    private static Class [] ClassInstanceArray = null;
-    private static int       maxClassIndex    = 0;
+    private static final Random indexGenerator = Utils.getRandomInstance();
+    private static String[] ClassArray = null;
+    private static Class[] ClassInstanceArray = null;
+    private static int maxClassIndex = 0;
 
-    private static String [] MethodName_Array = null;
-    private static Method [] MethodInstance_Array = null;
+    private static String[] MethodName_Array = null;
+    private static Method[] MethodInstance_Array = null;
 
-    //Should be prime, so that odds of an incorrect verification reduced
-    public static  int    [] MethodID_Array   = null;
-
-
-    //Number of threads will be reduced as threads finish
-    public static synchronized void decNumThreads(){NUM_THREADS--;};
-
-    public static synchronized void initialize(String testListPath)
-    {
+    // Should be prime, so that odds of an incorrect verification reduced
+    public static int[] MethodID_Array = null;
 
-        File td = new File (testListPath);
-        if (!td.exists())
-            {
-                System.err.println("File " + testListPath + " Not found");
-                System.exit(1);
-            }
-        if (!td.isFile())
-            {
-                System.err.println(testListPath + " Must be a File");
-                System.exit(1);
-            }
+    public static synchronized void initialize(String testListPath) {
+        File td = new File(testListPath);
+        if (!td.exists()) {
+            throw new Error("TESTBUG: File " + testListPath + " Not found");
+        }
+
+        if (!td.isFile()) {
+            throw new Error("TESTBUG: " + testListPath + " Must be a File");
+        }
 
         BufferedReader classList = null;
-
-        try
-          {
-            classList = new BufferedReader(new FileReader(td));
-          }
-        catch (FileNotFoundException  fnfx)
-          {
-            System.err.println("Error finding Classlist");
-            System.exit(1);
-          }
-
-        String line = null;
-        try
-            {
-                line = classList.readLine();
-            }
-        catch (IOException iox)
-            {
-                System.err.println("Error reading Classlist");
-                System.exit(1);
+        try {
+            try {
+                classList = new BufferedReader(new FileReader(td));
+            } catch (FileNotFoundException e) {
+                throw new Error("TESTBUG: Error finding Classlist", e);
             }
 
-        try
-            {
-                maxClassIndex = Math.abs(Integer.parseInt(line));//ClassArray.length;
+            String line = null;
+            try {
+                line = classList.readLine();
+            } catch (IOException e) {
+                throw new Error("TESTBUG: Error reading Classlist", e);
             }
-        catch (NumberFormatException nfx)
-            {
-                System.err.println("Error reading Classlist - first number must be number of methods defined");
-                System.exit(1);
+
+            try {
+                // ClassArray.length;
+                maxClassIndex = Math.abs(Integer.parseInt(line));
+            } catch (NumberFormatException e) {
+                throw new Error("TESTBUG: Error reading Classlist - first number must be number of methods defined", e);
             }
 
-        ClassArray = new String [maxClassIndex];
-ClassInstanceArray = new Class [maxClassIndex];
-        MethodName_Array = new String [maxClassIndex];
-        MethodInstance_Array = new Method [maxClassIndex];
-        MethodID_Array = new int [maxClassIndex];
+            ClassArray = new String[maxClassIndex];
+            ClassInstanceArray = new Class[maxClassIndex];
+            MethodName_Array = new String[maxClassIndex];
+            MethodInstance_Array = new Method[maxClassIndex];
+            MethodID_Array = new int[maxClassIndex];
 
-        int i;
-        for (i = 0; (i<maxClassIndex) && (line != null); i++)
-            {
-                try
-                    {
-                        line = classList.readLine();
-                    }
-                catch (IOException iox)
-                    {
-                        System.err.println("Error reading ClasslistFile: testListPath");
-                        System.exit(1);
-                    }
+            int i;
+            for (i = 0; i < maxClassIndex; i++) {
+                try {
+                    line = classList.readLine();
+                } catch (IOException e) {
+                    throw new Error("TESTBUG: Error reading ClasslistFile: testListPath", e);
+                }
                 StringTokenizer lineTokens = new StringTokenizer(line, "\t ");
-                if (lineTokens.countTokens() <3)
-                  {
-                    System.out.println("Error reading ClasslistFile: Errored line");
-                    i--;
-                  }
-                else
-                  {
+                if (lineTokens.countTokens() < 3) {
+                    throw new Error("TESTBUG: ClasslistFile: unexpected line:" + line);
+                } else {
                     ClassArray[i] = lineTokens.nextToken();
-                    MethodName_Array[i] =lineTokens.nextToken();
+                    MethodName_Array[i] = lineTokens.nextToken();
                     MethodID_Array[i] = Integer.parseInt(lineTokens.nextToken());
-                  }
+                }
             }
-        maxClassIndex = i;
+            maxClassIndex = i;
+        } finally {
+            if (classList != null) {
+                try {
+                    classList.close();
+                } catch (IOException e) {
+                    throw new Error("can't close file", e);
+                }
+            }
+        }
 
-        indexGenerator = new Random(RANDOM_SEED);
-        if ((NUM_TEST_CLASSES < ClassArray.length) && (NUM_TEST_CLASSES > 0))
-          maxClassIndex = NUM_TEST_CLASSES;
-        else
-          NUM_TEST_CLASSES = maxClassIndex;
+        if ((NUM_TEST_CLASSES < ClassArray.length) && (NUM_TEST_CLASSES > 0)) {
+            maxClassIndex = NUM_TEST_CLASSES;
+        } else {
+            NUM_TEST_CLASSES = maxClassIndex;
+        }
     }
 
-    //does a binary serach to find the index for the ID of a method
-    private static int ID_BinSearch(int begin, int end, int ID)
-    {
-        if (end < begin)
-            return(-1);
+    // does a binary search to find the index for the ID of a method
+    private static int ID_BinSearch(int begin, int end, int ID) {
+        if (end < begin) {
+            return (-1);
+        }
 
-        int mid = (begin + end)/2;
+        int mid = (begin + end) / 2;
         int midvalue = MethodID_Array[mid];
 
-        if (ID == midvalue)
+        if (ID == midvalue) {
             return (mid);
-        else if (ID < midvalue)
-            return(ID_BinSearch(begin, mid-1, ID));
-        else
-            return(ID_BinSearch(mid+1, end, ID));
+        } else if (ID < midvalue) {
+            return (ID_BinSearch(begin, mid - 1, ID));
+        } else {
+            return (ID_BinSearch(mid + 1, end, ID));
+        }
     }
 
 
-    //based off a static index, this function selects the method to be called
-    public static MethodData returnNextStaticMethod(int Method_ID)
-    {
-      //int i = ID_BinSearch(0, MethodID_Array.length - 1, Method_ID);
-      int i = ID_BinSearch(0, maxClassIndex - 1, Method_ID);
+    // based off a static index, this function selects the method to be called
+    public static MethodData returnNextStaticMethod(int Method_ID) {
+        //int i = ID_BinSearch(0, MethodID_Array.length - 1, Method_ID);
+        int i = ID_BinSearch(0, maxClassIndex - 1, Method_ID);
 
-      return(nextStaticMethod((i==-1)?0:i));
+        return (nextStaticMethod((i == -1) ? 0 : i));
     }
 
-    //this function randomly selects the next method to be called by the test class
-    public static MethodData nextRandomMethod()
-    {
-
+    // this function randomly selects the next method to be called by the test class
+    public static MethodData nextRandomMethod() {
         int i = indexGenerator.nextInt(maxClassIndex);
-        return(nextStaticMethod(i));
+        return (nextStaticMethod(i));
     }
 
-    private static MethodData nextStaticMethod(int i)
-    {
+    private static MethodData nextStaticMethod(int i) {
         Class methodsClass = null;
         Method nextMethod = null;
 
-        try
-            {
-              //methodsClass = CGTTestLoader.findClass(ClassArray[i]);
-              methodsClass = ClassInstanceArray[i];
-              if (methodsClass == null)
-              {
-                  methodsClass = Class.forName(ClassArray[i]);
-                  ClassInstanceArray[i] = methodsClass;
-              }
-              nextMethod = MethodInstance_Array[i];
-              if (nextMethod == null )
-              {
-              nextMethod =
-                methodsClass.getMethod(MethodName_Array[i],
-                                       new Class[]{java.util.Vector.class, java.util.Vector.class,
-                                                     java.lang.Long.class, java.lang.Integer.class});
-              //sum vector, ID vector, function depth, static function call depth
-              MethodInstance_Array[i] = nextMethod;
-              }
+        try {
+            methodsClass = ClassInstanceArray[i];
+            if (methodsClass == null) {
+                methodsClass = Class.forName(ClassArray[i]);
+                ClassInstanceArray[i] = methodsClass;
             }
-        catch (ClassNotFoundException cnfx)
-            {
-                System.out.println("Class: " +ClassArray[i]+ " Not Found");
-                System.exit(-1);
+            nextMethod = MethodInstance_Array[i];
+            if (nextMethod == null) {
+                nextMethod = methodsClass.getMethod(MethodName_Array[i],
+                        Vector.class, Vector.class,  Long.class, Integer.class);
+                // sum vector, ID vector, function depth, static function call depth
+                MethodInstance_Array[i] = nextMethod;
             }
-        catch (NoSuchMethodException nsmx)
-            {
-                System.out.println("Class: " +ClassArray[i]);
-                System.out.println("Method: " +MethodName_Array[i]+" Not Found");
-                System.exit(-1);
-            }
-        catch (SecurityException sx)
-            {
-                System.out.println("Class: " +ClassArray[i]);
-                System.out.println("Method: " +MethodName_Array[i]);
-                System.out.println("Security Exception Generated, by above method call");
-                System.exit(-1);
-            }
-        return(new MethodData(ClassArray[i], MethodName_Array[i], methodsClass, nextMethod, MethodID_Array[i]));
+        } catch (ClassNotFoundException e) {
+            throw new Error("TESTBUG Class: " + ClassArray[i] + " Not Found", e);
+        } catch (NoSuchMethodException e) {
+            throw new Error("TESTBUG Method: " + ClassArray[i] + "::" + MethodName_Array[i] + " Not Found", e);
+        } catch (SecurityException e) {
+            throw new Error("TESTBUG Security Exception Generated by " + ClassArray[i] + "::" + MethodName_Array[i], e);
+        }
+        return new MethodData(ClassArray[i], MethodName_Array[i], methodsClass, nextMethod, MethodID_Array[i]);
     }
 
 
-    /*These two functions are used to verify that all function were called in the proper order*/
+    /* These two functions are used to verify that all function were called in the proper order */
 
-    //called by "parent" function to add childs ID to vector
-    public static void addFunctionIDToVector(int FunctionIndex, Vector IDVector)
-    {
-        IDVector.addElement(new Integer(FunctionIndex));
+    // called by "parent" function to add childs ID to vector
+    public static void addFunctionIDToVector(int FunctionIndex, Vector IDVector) {
+        IDVector.addElement(FunctionIndex);
     }
 
-    //called by "child" to add Function Index to Vector
-    public static void appendSumToSumationVector(int FunctionIndex, Vector SummationVector)
-    {
-        if (SummationVector.isEmpty())
-            SummationVector.addElement(new Long(FunctionIndex));
-        else
-            SummationVector.addElement(new Long(((Long)SummationVector.lastElement()).longValue() + FunctionIndex));
+    // called by "child" to add Function Index to Vector
+    public static void appendSumToSummationVector(int FunctionIndex, Vector SummationVector) {
+        if (SummationVector.isEmpty()) {
+            SummationVector.addElement((long) FunctionIndex);
+        } else {
+            SummationVector.addElement((Long) SummationVector.lastElement() + FunctionIndex);
+        }
     }
 
-    //This function calls a method based off of MethodData
+    // This function calls a method based off of MethodData
     public static void callMethod(MethodData methodCallStr,
                                   Vector summation, Vector ID,
                                   Long numFcalls, Integer staticFcalls)
-                                  throws InvocationTargetException
-
-    {
-                if(NUM_THREADS >1)
-                    {
-                        if ((staticFcalls.intValue() + numFcalls.longValue()) %23 == 0)
-                            {
-                                try
-                                    {
-                                        Thread.sleep(225);
-                                    }
-                                catch (InterruptedException ie)
-                                    {}
-                                if (VERBOSE)
-                                    System.out.println("\t\tCurrentThread:" + Thread.currentThread().getName());
-                            }
-                    }
-
-                try
-            {
-                        methodCallStr.nextMethod.invoke(methodCallStr.instance,
-                                new Object []{summation, ID, numFcalls, staticFcalls});
-            }
-                catch (IllegalAccessException iax)  //should never happen with a valid testfile
-            {
-                        throw new TestFailure("Illegal Access Exception");
-            }
-                    /*
-                catch (InvocationTargetException itx)
-                    {
-                        itx.printStackTrace();
-                        System.out.println("Invocation Target Exception");
-                        System.exit(1);
-                    }*/
+            throws InvocationTargetException {
+        try {
+            methodCallStr.nextMethod.invoke(methodCallStr.instance,
+                    summation, ID, numFcalls, staticFcalls);
+        } catch (IllegalAccessException e) {
+            // should never happen with a valid testfile
+            throw new TestFailure("Illegal Access Exception", e);
+        }
     }
 }