You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2008/02/06 15:32:39 UTC
svn commit: r619000 - in /harmony/enhanced/drlvm/trunk/vm/vmcore: build/
src/kernel_classes/javasrc/java/lang/
src/kernel_classes/javasrc/org/apache/harmony/drlvm/
src/kernel_classes/javasrc/org/apache/harmony/drlvm/thread/
src/kernel_classes/native/ s...
Author: gshimansky
Date: Wed Feb 6 06:32:37 2008
New Revision: 619000
URL: http://svn.apache.org/viewvc?rev=619000&view=rev
Log:
Applied patch from HARMONY-4555
[drlvm][thread][perf]Thread.currentThread() works slowly
Modified:
harmony/enhanced/drlvm/trunk/vm/vmcore/build/vmcore.exp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java
harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java
harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java
harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/build/vmcore.exp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/build/vmcore.exp?rev=619000&r1=618999&r2=619000&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/build/vmcore.exp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/build/vmcore.exp Wed Feb 6 06:32:37 2008
@@ -246,7 +246,7 @@
Java_java_lang_VMMemoryManager_getMaxMemory;
Java_java_lang_VMMemoryManager_getTotalMemory;
Java_java_lang_VMMemoryManager_runGC;
- Java_java_lang_VMThreadManager_currentThread;
+ Java_java_lang_VMThreadManager_currentThreadNative;
Java_java_lang_VMThreadManager_getState;
Java_java_lang_VMThreadManager_holdsLock;
Java_java_lang_VMThreadManager_init;
@@ -273,6 +273,7 @@
Java_java_util_concurrent_locks_LockSupport_unpark;
Java_org_apache_harmony_drlvm_thread_ThreadHelper_getThreadIdOffset;
Java_org_apache_harmony_drlvm_thread_ThreadHelper_getLockWordOffset;
+ Java_org_apache_harmony_drlvm_thread_ThreadHelper_getThreadJavaObjectOffset;
Java_org_apache_harmony_drlvm_VMHelperFastPath_getVtableIntfTableOffset;
Java_org_apache_harmony_drlvm_VMHelperFastPath_getVtableIntfTypeOffset;
Java_org_apache_harmony_drlvm_VMHelperFastPath_getVtableSuperclassesOffset;
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java?rev=619000&r1=618999&r2=619000&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java Wed Feb 6 06:32:37 2008
@@ -20,6 +20,9 @@
*/
package java.lang;
+import org.apache.harmony.drlvm.VMHelper;
+import org.apache.harmony.drlvm.thread.ThreadHelper;
+
/**
* Provides the methods to interact with VM Thread Manager that are used by
* {@link java.lang.Thread Thread} class and {@link java.lang.Object Object}
@@ -86,7 +89,14 @@
* thread and hasn't been initialized yet.
* @api2vm
*/
- static native Thread currentThread();
+ public static native Thread currentThreadNative();
+
+ static Thread currentThread() {
+ if (VMHelper.isVMMagicPackageSupported()) {
+ return ThreadHelper.getCurrentThread();
+ }
+ return currentThreadNative();
+ }
/**
* This method satisfies the requirements of the specification for the
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java?rev=619000&r1=618999&r2=619000&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java Wed Feb 6 06:32:37 2008
@@ -56,11 +56,11 @@
public static final int OBJ_INFO_OFFSET = 4;
public static final int CLASS_JLC_HANDLE_OFFSET = getClassJLCHanldeOffset();
-
-
+
// preload @Inline vmmagic class
static final Class pragmaInline = org.vmmagic.pragma.Inline.class;
-
+ static final Class threadHelper = org.apache.harmony.drlvm.thread.ThreadHelper.class;
+ static final Class vmFastPathes = org.apache.harmony.drlvm.VMHelperFastPath.class;
//Slow path versions of helpers
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java?rev=619000&r1=618999&r2=619000&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java Wed Feb 6 06:32:37 2008
@@ -31,6 +31,7 @@
public static final int LOCK_WORD_OFFSET = getLockWordOffset();
public static final int TLS_THREAD_ID_OFFSET= getThreadIdOffset();
+ public static final int THREAD_JAVA_OBJECT_OFFSET = getThreadJavaObjectOffset();
@Inline
static int getThreadId() {
@@ -40,6 +41,17 @@
}
@Inline
+ public static Thread getCurrentThread() {
+ Address tlsThread = VMHelper.getTlsBaseAddress();
+ Address javaObjectPtr = tlsThread.plus(THREAD_JAVA_OBJECT_OFFSET).loadAddress();
+ if (javaObjectPtr.isZero()) {
+ return null;
+ } else {
+ return (Thread)javaObjectPtr.loadAddress().toObjectReference().toObject();
+ }
+ }
+
+ @Inline
static void monitorEnterUseReservation(Object obj) {
Address lockWordPtr = ObjectReference.fromObject(obj).toAddress().plus(LOCK_WORD_OFFSET);
int threadId = getThreadId();
@@ -107,6 +119,7 @@
private static native int getThreadIdOffset();
private static native int getLockWordOffset();
+ private static native int getThreadJavaObjectOffset();
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.cpp?rev=619000&r1=618999&r2=619000&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.cpp Wed Feb 6 06:32:37 2008
@@ -33,10 +33,10 @@
/*
* Class: java_lang_VMThreadManager
- * Method: currentThread
+ * Method: currentThreadNative
* Signature: ()Ljava/lang/Thread;
*/
-JNIEXPORT jobject JNICALL Java_java_lang_VMThreadManager_currentThread
+JNIEXPORT jobject JNICALL Java_java_lang_VMThreadManager_currentThreadNative
(JNIEnv * UNREF jenv, jclass clazz)
{
return jthread_self();
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.h?rev=619000&r1=618999&r2=619000&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMThreadManager.h Wed Feb 6 06:32:37 2008
@@ -37,9 +37,9 @@
/* Native methods */
/*
- * Method: java.lang.VMThreadManager.currentThread()Ljava/lang/Thread;
+ * Method: java.lang.VMThreadManager.currentThreadNative()Ljava/lang/Thread;
*/
-JNIEXPORT jobject JNICALL Java_java_lang_VMThreadManager_currentThread
+JNIEXPORT jobject JNICALL Java_java_lang_VMThreadManager_currentThreadNative
(JNIEnv *, jclass);
/*
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp?rev=619000&r1=618999&r2=619000&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp Wed Feb 6 06:32:37 2008
@@ -311,6 +311,18 @@
return (jint)offset;
}
+/*
+ * Class: org_apache_harmony_drlvm_thread_ThreadHelper
+ * Method: getThreadJavaObjectOffset
+ * Signature: ()I
+ */
+VMEXPORT jint JNICALL
+Java_org_apache_harmony_drlvm_thread_ThreadHelper_getThreadJavaObjectOffset(JNIEnv *env, jclass klass)
+{
+ vm_thread_t vm_thread = NULL;
+ return (jint)(POINTER_SIZE_INT)&vm_thread->java_thread;
+}
+
#ifdef __cplusplus
}
#endif /* __cplusplus */