Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge tag 'v3_9_90' into hypervisor
[simgrid.git] / src / bindings / java / jmsg_vm.c
1 /* Functions related to the MSG VM API. */
2
3 /* Copyright (c) 2012-2013. The SimGrid Team.
4  * All rights reserved.                                                     */
5
6 /* This program is free software; you can redistribute it and/or modify it
7  * under the terms of the license (GNU LGPL) which comes with this package. */
8 #include "jmsg_vm.h"
9 #include "jmsg_host.h"
10 #include "jmsg_process.h"
11 #include "jxbt_utilities.h"
12 #include "msg/msg.h"
13 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
14
15 static jfieldID jvm_field_bind;
16
17 void jvm_bind(JNIEnv *env, jobject jvm, msg_vm_t vm) {
18   (*env)->SetLongField(env, jvm, jvm_field_bind, (intptr_t)vm);
19 }
20 msg_vm_t jvm_get_native(JNIEnv *env, jobject jvm) {
21   return (msg_vm_t)(intptr_t)(*env)->GetLongField(env, jvm, jvm_field_bind);
22 }
23
24 JNIEXPORT void JNICALL
25 Java_org_simgrid_msg_VM_nativeInit(JNIEnv *env, jclass cls) {
26   jclass jprocess_class_VM = (*env)->FindClass(env, "org/simgrid/msg/VM");
27   jvm_field_bind = jxbt_get_jfield(env, jprocess_class_VM, "bind", "J");
28   if (!jvm_field_bind   ) {
29     jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
30   }
31 }
32
33 JNIEXPORT jint JNICALL
34 Java_org_simgrid_msg_VM_isCreated(JNIEnv * env, jobject jvm) {
35   msg_vm_t vm = jvm_get_native(env,jvm);
36   return (jint) MSG_vm_is_created(vm);
37 }
38
39 JNIEXPORT jint JNICALL
40 Java_org_simgrid_msg_VM_isRunning(JNIEnv * env, jobject jvm) {
41   msg_vm_t vm = jvm_get_native(env,jvm);
42   return (jint) MSG_vm_is_running(vm);
43 }
44
45 JNIEXPORT jint JNICALL
46 Java_org_simgrid_msg_VM_isMigrating(JNIEnv * env, jobject jvm) {
47   msg_vm_t vm = jvm_get_native(env,jvm);
48   return (jint) MSG_vm_is_migrating(vm);
49 }
50
51 JNIEXPORT jint JNICALL
52 Java_org_simgrid_msg_VM_isSuspended(JNIEnv * env, jobject jvm) {
53   msg_vm_t vm = jvm_get_native(env,jvm);
54   return (jint) MSG_vm_is_suspended(vm);
55 }
56
57 JNIEXPORT jint JNICALL
58 Java_org_simgrid_msg_VM_isSaving(JNIEnv * env, jobject jvm) {
59   msg_vm_t vm = jvm_get_native(env,jvm);
60   return (jint) MSG_vm_is_saving(vm);
61 }
62
63 JNIEXPORT jint JNICALL
64 Java_org_simgrid_msg_VM_isSaved(JNIEnv * env, jobject jvm) {
65   msg_vm_t vm = jvm_get_native(env,jvm);
66   return (jint) MSG_vm_is_saved(vm);
67 }
68
69 JNIEXPORT jint JNICALL
70 Java_org_simgrid_msg_VM_isRestoring(JNIEnv * env, jobject jvm) {
71   msg_vm_t vm = jvm_get_native(env,jvm);
72   return (jint) MSG_vm_is_restoring(vm);
73 }
74
75 JNIEXPORT void JNICALL
76 Java_org_simgrid_msg_VM_setBound(JNIEnv *env, jobject jvm, jint load) { 
77
78         msg_vm_t vm = jvm_get_native(env,jvm);
79         double bound = MSG_get_host_speed(vm) * load / 100;
80         MSG_vm_set_bound(vm, bound); 
81 }
82
83 JNIEXPORT void JNICALL
84 Java_org_simgrid_msg_VM_create(JNIEnv *env, jobject jvm, jobject jhost, jstring jname,
85                                jint jncore, jint jramsize, jint jnetcap, jstring jdiskpath, jint jdisksize, jint jmig_netspeed, jint jdp_intensity) {
86
87   msg_host_t host = jhost_get_native(env, jhost);
88
89   const char *name;
90   name = (*env)->GetStringUTFChars(env, jname, 0);
91   name = xbt_strdup(name);
92
93   // TODO disk concerns are not taken into account yet
94   // const char *diskpath;
95   // disk_path = (*env)->GetStringUTFChars(env, jdiskpath, 0);
96   // disk_path = xbt_strdup(disk_path);
97
98   msg_vm_t vm = MSG_vm_create(host, name, (int) jncore, (int) jramsize,
99                   (int) jnetcap, NULL, (int) jdisksize, (int) jmig_netspeed, (int) jdp_intensity);
100
101   jvm_bind(env,jvm,vm);
102 }
103
104 JNIEXPORT void JNICALL
105 Java_org_simgrid_msg_VM_destroy(JNIEnv *env, jobject jvm) {
106   msg_vm_t vm = jvm_get_native(env,jvm);
107   MSG_vm_destroy(vm);
108 }
109
110 JNIEXPORT void JNICALL
111 Java_org_simgrid_msg_VM_start(JNIEnv *env, jobject jvm) {
112   msg_vm_t vm = jvm_get_native(env,jvm);
113   MSG_vm_start(vm);
114 }
115
116 JNIEXPORT void JNICALL
117 Java_org_simgrid_msg_VM_shutdown(JNIEnv *env, jobject jvm) {
118   msg_vm_t vm = jvm_get_native(env,jvm);
119   MSG_vm_shutdown(vm);
120 }
121
122 JNIEXPORT void JNICALL
123 Java_org_simgrid_msg_VM_internalmig(JNIEnv *env, jobject jvm, jobject jhost) {
124   msg_vm_t vm = jvm_get_native(env,jvm);
125   msg_host_t host = jhost_get_native(env, jhost);
126   MSG_vm_migrate(vm,host);
127 }
128
129 JNIEXPORT void JNICALL
130 Java_org_simgrid_msg_VM_suspend(JNIEnv *env, jobject jvm) {
131   msg_vm_t vm = jvm_get_native(env,jvm);
132   MSG_vm_suspend(vm);
133 }
134 JNIEXPORT void JNICALL
135 Java_org_simgrid_msg_VM_resume(JNIEnv *env, jobject jvm) {
136   msg_vm_t vm = jvm_get_native(env,jvm);
137   MSG_vm_resume(vm);
138 }
139
140 JNIEXPORT void JNICALL
141 Java_org_simgrid_msg_VM_save(JNIEnv *env, jobject jvm) {
142   msg_vm_t vm = jvm_get_native(env,jvm);
143   MSG_vm_save(vm);
144 }
145 JNIEXPORT void JNICALL
146 Java_org_simgrid_msg_VM_restore(JNIEnv *env, jobject jvm) {
147   msg_vm_t vm = jvm_get_native(env,jvm);
148   MSG_vm_restore(vm);
149 }
150
151
152
153 JNIEXPORT jobject JNICALL
154 Java_org_simgrid_msg_VM_get_pm(JNIEnv *env, jobject jvm) {
155   jobject jhost;
156   msg_vm_t vm = jvm_get_native(env,jvm);
157   msg_host_t host = MSG_vm_get_pm(vm);
158
159   if (!MSG_host_get_data(host)) {
160     /* the native host not yet associated with the java host instance */
161
162     /* instanciate a new java host instance */
163     jhost = jhost_new_instance(env);
164
165     if (!jhost) {
166       jxbt_throw_jni(env, "java host instantiation failed");
167       return NULL;
168     }
169
170     /* get a global reference to the newly created host */
171     jhost = jhost_ref(env, jhost);
172
173     if (!jhost) {
174       jxbt_throw_jni(env, "global ref allocation failed");
175       return NULL;
176     }
177     /* Sets the host name */
178     const char *name = MSG_host_get_name(host);
179     jobject jname = (*env)->NewStringUTF(env,name);
180     (*env)->SetObjectField(env, jhost, jxbt_get_jfield(env, (*env)->FindClass(env, "org/simgrid/msg/Host"), "name", "Ljava/lang/String;"), jname);
181     /* Bind & store it */
182     jhost_bind(jhost, host, env);
183     MSG_host_set_data(host, (void *) jhost);
184   } else {
185     jhost = (jobject) MSG_host_get_data(host);
186   }
187
188   return jhost;
189 }