/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
import org.jikesrvm.runtime.Magic;
class NativeThreadsWorker extends Thread {
String name;
boolean isFinished;
NativeThreadsWorker(String name) {
this.name = name;
say(name, "creating");
}
public void start() {
say(name, "starting");
super.start();
}
//- overrides Thread
//
public void
run() {
int tid = Magic.getThreadIdRegister() >> ObjectLayoutConstants.OBJECT_THREAD_ID_SHIFT;
int retval = 0;
int loopcntr = 75;
float fp = (float)17.8;
if (name == "pong") loopcntr = 75;
for (int i = 0; i < loopcntr; ++i) {
if ((name == "ping") || (name == "ping2")) {
// call a native function
say(name, "calling nativeFoo");
retval = tNativeThreads.nativeFoo(RVMThread.getCurrentThread().getIndex());
// retval = tNativeThreads.nativeFoo(tid);
//// System.out.println(1.0f);
say(name, "return from nativeFoo");
// VM.debugBreakpoint();
// try to print a string
// say(name, " before s created");
// String s = java.lang.Float.toString(fp);
// say(name, " after s created");
// String s2 = " return value = " + s;
// say(name, s2);
//try {
// say(name, "sleeping");
// sleep(300);
//}
//catch (InterruptedException e) {}
} else { // pong story
// others sleep for a while and then call java function
say(name, "about to sleep for 100 msec");
try {
say(name, "sleeping");
sleep(100);
} catch (InterruptedException e) { }
say(name, "after sleep -calling javaFoo");
retval = tNativeThreads.javaFoo(10);
say(name, "return from javaFoo");
}
if (name == "pong") {
// someone calls gc
say(name, "about to call gc");
// say(name, "first dump VM");
// RVMThread.dumpVirtualMachine();
// say(name, "skipping gc");
System.gc();
say(name, "gc completed");
}
}
//test complete
/// say(name, "dump before -bye");
/// RVMThread.dumpVirtualMachine();
say(name, "complete -bye");
isFinished = true;
}
static synchronized void say(String who, String what) {
RVMThread.trace(who,what);
}
}