Projet_SETI_RISC-V/riscv-gnu-toolchain/gdb/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java
2023-03-06 14:48:14 +01:00

229 lines
5.6 KiB
Java

// Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
// @(#)jsynprog.java SMI
import java.util.*;
import java.io.*;
import java.text.*;
class jsynprog
{
private static String dir_home;
private static PrintWriter log;
private static double pstart, cstart;
/* JNI calls */
public static native double Timer();
private static native double cTimer();
private static native double computeSet();
private static native int JavaJavaC(int np, int scale);
private static native void JavaCC(int scale);
private static native void JavaCJava(int scale);
private static native int isJVMPI();
public static double testtime = 3.0 * 1e9;
public static void main (String [] args)
{
jsynprog jsyn_obj = new jsynprog();
Integer ni;
int scale = 1000;
createAcct();
LoadJNILibrary(args);
testtime = computeSet();
/* check for invocation parameter */
if (args.length != 0) {
if (args[0].equals("fast")) {
scale = 10000;
} else if (args[0].equals("slow")) {
scale = 1;
} else {
System.err.println("fatal: unexpected argument: " + args[0] );
System.exit(1);
}
}
/* large memory allocations, trigger gc */
Routine rtn = new Routine();
Sub_Routine sbrt = new Sub_Routine();
recTime();
rtn.memalloc(10000, scale);
printValue("Routine.memalloc", false);
/* add integers */
recTime();
ni = new Integer (rtn.add_int(scale));
printValue("Routine.add_int", true);
/* add double */
recTime();
Double nd = new Double(rtn.add_double(scale));
printValue("Routine.add_double", true);
/* call method in derived class */
recTime();
ni = new Integer (sbrt.add_int(scale));
printValue("Sub_Routine.add_int", true);
/* call method that defines an inner class */
recTime();
Integer[] na = rtn.has_inner_class(scale);
printValue("Routine.has_inner_class", true);
/* recursion */
recTime();
rtn.recurse(0,80, scale);
printValue("Routine.recurse", true);
/* deep recursion */
recTime();
rtn.recursedeep(0,500, scale);
printValue("<Truncated-stack>", true);
/* indirect recursion */
recTime();
rtn.bounce(0,20, scale);
printValue("Routine.bounce", true);
/* array operations */
recTime();
rtn.array_op(scale);
printValue("Routine.array_op", false);
/* Vector operations */
recTime();
rtn.vector_op(scale);
printValue("Routine.vector_op", false);
/* spend time in system calls */
recTime();
rtn.sys_op(scale);
printValue("Routine.sys_op", false);
/* java->java->c */
recTime();
int np = 0;
jni_JavaJavaC(np, scale);
printValue("jsynprog.jni_JavaJavaC", true);
/* java->c->c */
recTime();
JavaCC(scale);
printValue("jsynprog.JavaCC", true);
/* java->c->java */
recTime();
JavaCJava(scale);
printValue("jsynprog.JavaCJava", true);
/* dynamically loaded classes */
String java_ver = System.getProperty("java.version");
Launcher lnch = new Launcher();
String[] params = new String[]{"DynLoadedClass"};
recTime();
lnch.main(params);
printValue("Launcher.main", true);
System.gc();
}
/*
** Create accounting file
*/
private static void createAcct() {
System.out.println ("Directing output to acct file...");
try {
log = new PrintWriter (new FileWriter("jsynprog.acct"), true);
} catch (IOException ioe) {
ioe.printStackTrace();
System.err.println("fatal: Cannot create accounting file ");
System.exit(1);
}
log.println("X\tLWPTime\tCPUTime\tFunction");
}
/*
** Print output in acct file
*/
private static void printValue (String fname, boolean noignore) {
double p_end = Timer(); // Global.Timer();
double c_end = cTimer(); // Global.cTimer();
double prog_elapsed = p_end - pstart;
double cpu_elapsed = c_end - cstart;
DecimalFormat format_decimal = new DecimalFormat("0.000");
System.out.println("Running " + fname + "; T = " + format_decimal.format(prog_elapsed * 0.000000001)
+" UCPU = " + format_decimal.format(cpu_elapsed * 0.000000001));
log.print( (noignore == true? "X" : "Y")
+ "\t" + format_decimal.format(prog_elapsed * 0.000000001) + "\t"
+ format_decimal.format(cpu_elapsed * 0.000000001) + "\t");
log.println(fname);
}
/*
** Record intial times
*/
private static void recTime() {
pstart = Timer(); // Global.Timer();
cstart = cTimer(); // Global.cTimer();
}
/*
** Load dynamic shared library for JNI
*/
private static void LoadJNILibrary(String[] args) {
try {
dir_home = (new File(".")).getCanonicalPath();
} catch (IOException e) {
dir_home = "..";
}
System.out.println("libpath:"+dir_home);
// Find which JVM was invoked
String jvm_format = System.getProperty("java.vm.name");
System.out.println("jvm "+ jvm_format);
try {
System.out.println("Loading library.... " + dir_home + "/libcloop.so");
System.load(dir_home + "/libcloop.so");
} catch (UnsatisfiedLinkError e) {
System.err.println("fatal: Cannot load shared library " + e);
System.exit(1);
}
}
/*
** Makes a lot of JNI calls
*/
private static void jni_JavaJavaC(int np, int scale) {
int ret = 0;
int jmax = 10000;
System.out.println("Entering jni_JavaJavaC, scale = " + scale);
double tEnd = Timer() + testtime;
do {
for (int j =0 ; j<jmax; j++) {
ret = JavaJavaC(np, scale);
}
} while (Timer() < tEnd);
}
public static int javafunc (int scale) {
int jmax = 200*scale;
int imax = 40;
int np = 0;
// System.out.println("Entering javafunc, scale = " + scale);
double tEnd = Timer() + testtime;
do { np = 0;
for (int j =0 ; j<jmax; j++) {
for (int i =0 ; i<imax; i++) {
np = (i%2==0)?np:(np + 1);
}
}
} while (Timer() < tEnd);
return np;
}
}