From 9d22e2ac324188c6494c026fad245b4abafed90b Mon Sep 17 00:00:00 2001 From: Samuel Lepetit Date: Wed, 9 May 2012 16:14:44 +0200 Subject: [PATCH] Cache the task name in Task --- org/simgrid/msg/Task.java | 24 ++++++++++++++---------- src/jmsg_host.c | 19 ------------------- src/jmsg_host.h | 8 -------- src/jmsg_task.c | 11 ++++++++--- 4 files changed, 22 insertions(+), 40 deletions(-) diff --git a/org/simgrid/msg/Task.java b/org/simgrid/msg/Task.java index 41f064a2e7..b4890be72c 100644 --- a/org/simgrid/msg/Task.java +++ b/org/simgrid/msg/Task.java @@ -23,7 +23,10 @@ public class Task { * access to it. It is set automatically during the build of the object. */ public long bind = 0; - + /** + * Task name + */ + protected String name; /** Default constructor (all fields to 0 or null) */ public Task() { @@ -98,12 +101,14 @@ public class Task { /* * * * * * Getters / Setters * * * * * */ - /** Gets the name of a task - * FIXME: Cache it. - * @return + /** + * Gets the name of a task */ - public native String getName(); - /** Gets the sender of the task + public String getName() { + return name; + } + /** + * Gets the sender of the task * Returns null if the task hasn't been sent yet */ public native Process getSender(); @@ -127,10 +132,6 @@ public class Task { * @param priority The new priority of the task. */ public native void setPriority(double priority); - /* * * * - * * Communication-related * * - * * * */ - /* * * * * * Computation-related * * @@ -159,6 +160,9 @@ public class Task { * The natively implemented method to destroy a MSG task. */ protected native void destroy(); + /* * * * + * * Communication-related * * + * * * */ /** Send the task asynchronously on the mailbox identified by the specified name, * with no way to retrieve whether the communication succeeded or not diff --git a/src/jmsg_host.c b/src/jmsg_host.c index fb3cdec810..da4426b28f 100644 --- a/src/jmsg_host.c +++ b/src/jmsg_host.c @@ -156,25 +156,6 @@ Java_org_simgrid_msg_Host_currentHost(JNIEnv * env, jclass cls) { return jhost; } - -JNIEXPORT jstring JNICALL -Java_org_simgrid_msg_Host_getName(JNIEnv * env, - jobject jhost) { - m_host_t host = jhost_get_native(env, jhost); - const char* name; - - if (!host) { - jxbt_throw_notbound(env, "host", jhost); - return NULL; - } - - name = MSG_host_get_name(host); - if (!name) - xbt_die("This host has no name..."); - - return (*env)->NewStringUTF(env, name); -} - JNIEXPORT jint JNICALL Java_org_simgrid_msg_Host_getCount(JNIEnv * env, jclass cls) { xbt_dynar_t hosts = MSG_hosts_as_dynar(); diff --git a/src/jmsg_host.h b/src/jmsg_host.h index 374d8ef268..0aab697c1a 100644 --- a/src/jmsg_host.h +++ b/src/jmsg_host.h @@ -119,14 +119,6 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_getByName */ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_currentHost (JNIEnv *, jclass); - -/* - * Class org_simgrid_msg_Host - * Method getName - * Signature ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_simgrid_msg_Host_getName - (JNIEnv *, jobject); /* * Class org_simgrid_msg_Host * Method getCount diff --git a/src/jmsg_task.c b/src/jmsg_task.c index bd1ea49460..844ed84f8c 100644 --- a/src/jmsg_task.c +++ b/src/jmsg_task.c @@ -21,6 +21,7 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); static jmethodID jtask_method_Comm_constructor; static jfieldID jtask_field_Task_bind; +static jfieldID jtask_field_Task_name; static jfieldID jtask_field_Comm_bind; static jfieldID jtask_field_Comm_taskBind; static jfieldID jtask_field_Comm_receiving; @@ -43,14 +44,16 @@ jboolean jtask_is_valid(jobject jtask, JNIEnv * env) JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_nativeInit(JNIEnv *env, jclass cls) { jclass jtask_class_Comm = (*env)->FindClass(env, "org/simgrid/msg/Comm"); + jclass jtask_class_Task = (*env)->FindClass(env, "org/simgrid/msg/Task"); jtask_method_Comm_constructor = (*env)->GetMethodID(env, jtask_class_Comm, "", "()V"); //FIXME: Don't use jxbt_get_sfield directly, it is slower. jtask_field_Task_bind = jxbt_get_sfield(env, "org/simgrid/msg/Task", "bind", "J"); + jtask_field_Task_name = jxbt_get_jfield(env, jtask_class_Task, "name", "Ljava/lang/String;"); jtask_field_Comm_bind = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "bind", "J"); jtask_field_Comm_taskBind = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "taskBind", "J"); jtask_field_Comm_receiving = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "receiving", "Z"); - if (!jtask_field_Task_bind || !jtask_field_Comm_bind || !jtask_field_Comm_taskBind || + if (!jtask_field_Task_bind || !jtask_class_Task || !jtask_field_Comm_bind || !jtask_field_Comm_taskBind || !jtask_field_Comm_receiving || !jtask_method_Comm_constructor) { jxbt_throw_native(env,bprintf("Can't find some fields in Java class.")); } @@ -92,7 +95,8 @@ Java_org_simgrid_msg_Task_create(JNIEnv * env, (double) jmessageSize, NULL); if (jname) (*env)->ReleaseStringUTFChars(env, jname, name); - + /* sets the task name */ + (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname); /* bind & store the task */ jtask_bind(jtask, task, env); MSG_task_set_data(task, jtask); @@ -175,7 +179,8 @@ Java_org_simgrid_msg_Task_parallelCreate(JNIEnv * env, messageSizes, NULL); (*env)->ReleaseStringUTFChars(env, jname, name); - + /* sets the task name */ + (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname); /* associate the java task object and the native task */ jtask_bind(jtask, task, env); -- 2.20.1