2 // !! Important to get consistent size_t type
3 #define _FILE_OFFSET_BITS 64
5 // Set to 1 to use "int32" instead of "long64" to store pointer to java
6 #define ARCHITECTURE_IS_64BITS 0
8 #if ARCHITECTURE_IS_64BITS == 0
9 // Conversion to int first to save warning
10 #define CONVERT_JLONG_TO_PTR(p) (int)(p)
11 #define CONVERT_PTR_TO_JLONG(p) (jlong)(int)(p)
12 // Define the "gint" type we should use for pointer.
13 #define GINT_TYPE_FOR_PTR gint64
15 #define CONVERT_JLONG_TO_PTR(p) (p)
16 // Define the "gint" type we should use for pointer.
17 #define GINT_TYPE_FOR_PTR gint32
23 // We've got hell of a problem passing "unsigned int64" to java, as there is no equivalent type
24 // The closer we can use is "long" which is signed, so only 32 (or 63?) bits are valid
25 // Plus, even if we are within the "32 bits" capacity, java sometime screw itself trying to convert "unsigned 64 -> signed 64"
26 // This happen especially often when RETURNING a jlong
27 // So when returning a jlong, we should convert it like this : "unsigned 64"->"signed 64"->jlong
28 #define CONVERT_UINT64_TO_JLONG(n) (jlong)(gint64)(n)
29 #define CONVERT_INT64_TO_JLONG(n) (jlong)(gint64)(n)
31 // To ease calcul involving nano
32 #define BILLION 1000000000
37 #include <ltt/trace.h>
39 #include <ltt/marker.h>
46 // Structure to encapsulate java_data to pass as arguments
47 struct java_calling_data
54 // Find a better way! This is ugly!
57 struct java_calling_data
* java_args
;
58 struct marker_data
* mdata
;
62 // ### COMMON Methods ###
64 // JNI method to call printf from the java side
65 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_Jni_1C_1Common_ltt_1printC(JNIEnv
* env
, jobject jobj
, jstring new_string
)
67 printf( (*env
)->GetStringUTFChars(env
, new_string
, 0) );
75 // ### TRACE methods ###
77 // JNI mapping of < LttTrace *ltt_trace_open(const gchar *pathname) > (trace.h)
78 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1openTrace(JNIEnv
* env
, jobject jobj
, jstring pathname
) {
79 const char* c_pathname
= (*env
)->GetStringUTFChars(env
, pathname
, 0);
80 LttTrace
* newPtr
= ltt_trace_open( c_pathname
);
82 (*env
)->ReleaseStringUTFChars(env
, pathname
, c_pathname
);
84 return CONVERT_PTR_TO_JLONG(newPtr
);
87 // JNI mapping of < void ltt_trace_close(LttTrace *t) > (trace.h)
88 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1closeTrace(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
){
90 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
92 ltt_trace_close(newPtr
);
96 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getTracepath(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
97 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
99 return (*env
)->NewStringUTF(env
, g_quark_to_string( newPtr
->pathname
) );
104 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getCpuNumber(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
105 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
107 return (jint
)newPtr
->num_cpu
;
111 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchType(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
112 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
114 return (jlong
)newPtr
->arch_type
;
117 // Get of arch_variant
118 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchVariant(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
119 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
121 return (jlong
)newPtr
->arch_variant
;
125 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchSize(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
126 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
128 return (jshort
)newPtr
->arch_size
;
131 // Get of ltt_major_version
132 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMajorVersion(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
133 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
135 return (jshort
)newPtr
->ltt_major_version
;
138 // Get of ltt_minor_version
139 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMinorVersion(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
140 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
142 return (jshort
)newPtr
->ltt_minor_version
;
145 // Get of flight_recorder
146 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFlightRecorder(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
147 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
149 return (jshort
)newPtr
->flight_recorder
;
153 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFreqScale(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
154 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
156 return (jlong
)newPtr
->freq_scale
;
160 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartFreq(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
161 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
163 return CONVERT_UINT64_TO_JLONG(newPtr
->start_freq
);
167 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartTimestampCurrentCounter(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
168 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
170 return CONVERT_UINT64_TO_JLONG(newPtr
->start_tsc
);
173 // Get of start_monotonic
174 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartMonotonic(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
175 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
177 return CONVERT_UINT64_TO_JLONG(newPtr
->start_monotonic
);
180 // Access to start_time
181 // Note that we are calling the setTimeFromC function in Jaf_Time from here
182 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTime(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
, jobject time_jobj
) {
183 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
185 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
186 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
188 jlong fullTime
= (CONVERT_UINT64_TO_JLONG(newPtr
->start_time
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->start_time
.tv_nsec
);
190 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
193 // Access to start_time_from_tsc
194 // Note that we are calling the setTimeFromC function in Jaf_Time from here
195 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTimeFromTimestampCurrentCounter(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
, jobject time_jobj
) {
196 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
198 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
199 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
201 jlong fullTime
= (CONVERT_UINT64_TO_JLONG(newPtr
->start_time_from_tsc
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->start_time_from_tsc
.tv_nsec
);
203 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
207 // g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles
208 void g_datalist_foreach_addTracefilesOfTrace(GQuark name
, gpointer data
, gpointer user_data
) {
209 struct java_calling_data
* args
= (struct java_calling_data
*)user_data
;
211 jclass accessClass
= (*args
->env
)->GetObjectClass(args
->env
, args
->jobj
);
212 jmethodID accessFunction
= (*args
->env
)->GetMethodID(args
->env
, accessClass
, "addTracefileFromC", "(Ljava/lang/String;J)V");
214 GArray
* group
= (GArray
*)data
;
215 LttTracefile
* tracefile
;
219 for (i
=0; i
<group
->len
; i
++) {
220 tracefile
= &g_array_index(group
, LttTracefile
, i
);
222 newPtr
= CONVERT_PTR_TO_JLONG(tracefile
);
224 (*args
->env
)->CallVoidMethod(args
->env
, args
->jobj
, accessFunction
, (*args
->env
)->NewStringUTF(args
->env
, g_quark_to_string(tracefile
->name
) ), newPtr
);
228 // Function to fill up the java map with the event type found in tracefile (the name)
229 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
230 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
232 struct java_calling_data args
= { env
, jobj
};
234 g_datalist_foreach(&newPtr
->tracefiles
, &g_datalist_foreach_addTracefilesOfTrace
, &args
);
238 // Function to print the content of a tracefile
239 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1printTrace(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
241 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
243 printf("pathname : %s\n" ,g_quark_to_string(newPtr
->pathname
) );
244 printf("num_cpu : %u\n" ,(unsigned int)(newPtr
->num_cpu
) );
245 printf("arch_type : %u\n" ,(unsigned int)(newPtr
->arch_type
) );
246 printf("arch_variant : %u\n" ,(unsigned int)(newPtr
->arch_variant
) );
247 printf("arch_size : %u\n" ,(unsigned short)(newPtr
->arch_size
) );
248 printf("ltt_major_version : %u\n" ,(unsigned short)(newPtr
->ltt_major_version
) );
249 printf("ltt_minor_version : %u\n" ,(unsigned short)(newPtr
->ltt_minor_version
) );
250 printf("flight_recorder : %u\n" ,(unsigned short)(newPtr
->flight_recorder
) );
251 printf("freq_scale : %u\n" ,(unsigned int)(newPtr
->freq_scale
) );
252 printf("start_freq : %u\n" ,(unsigned long)(newPtr
->start_freq
) );
253 printf("start_tsc : %u\n" ,(unsigned long)(newPtr
->start_tsc
) );
254 printf("start_monotonic : %u\n" ,(unsigned long)(newPtr
->start_monotonic
) );
255 printf("start_time ptr : 0x%x\n" ,&newPtr
->start_time
);
256 printf(" tv_sec : %u\n" ,(unsigned long)(newPtr
->start_time
.tv_sec
) );
257 printf(" tv_nsec : %u\n" ,(unsigned long)(newPtr
->start_time
.tv_nsec
) );
258 printf("start_time_from_tsc ptr : 0x%x\n" ,&newPtr
->start_time_from_tsc
);
259 printf(" tv_sec : %u\n" ,(unsigned long)(newPtr
->start_time_from_tsc
.tv_sec
) );
260 printf(" tv_nsec : %u\n" ,(unsigned long)(newPtr
->start_time_from_tsc
.tv_nsec
) );
261 printf("tracefiles ptr : 0x%x\n" ,newPtr
->tracefiles
);
270 // ### TRACEFILE methods ###
273 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsCpuOnline(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
274 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
276 return (jboolean
)newPtr
->cpu_online
;
280 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilepath(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
281 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
283 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->long_name
) );
287 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilename(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
288 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
290 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
) );
294 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCpuNumber(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
295 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
297 return (jlong
)newPtr
->cpu_num
;
301 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTid(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
302 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
304 return (jlong
)newPtr
->tid
;
308 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getPgid(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
309 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
311 return (jlong
)newPtr
->pgid
;
315 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCreation(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
316 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
318 return CONVERT_UINT64_TO_JLONG(newPtr
->creation
);
322 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracePtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
323 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
325 return CONVERT_PTR_TO_JLONG(newPtr
->trace
);
329 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getMarkerDataPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
330 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
332 return CONVERT_PTR_TO_JLONG(newPtr
->mdata
);
336 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCFileDescriptor(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
337 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
339 return (jint
)newPtr
->fd
;
343 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getFileSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
344 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
346 return CONVERT_UINT64_TO_JLONG(newPtr
->file_size
);
350 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBlockNumber(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
351 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
353 return (jlong
)newPtr
->num_blocks
;
357 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsBytesOrderReversed(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
358 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
360 return (jboolean
)newPtr
->reverse_bo
;
363 // Get of float_word_order
364 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsFloatWordOrdered(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
365 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
367 return (jboolean
)newPtr
->float_word_order
;
371 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAlignement(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
372 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
374 return CONVERT_UINT64_TO_JLONG(newPtr
->alignment
);
377 // Get of buffer_header_size
378 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferHeaderSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
379 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
381 return CONVERT_UINT64_TO_JLONG(newPtr
->buffer_header_size
);
385 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfCurrentTimestampCounter(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
386 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
388 return (jint
)newPtr
->tscbits
;
392 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
393 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
395 return (jint
)newPtr
->eventbits
;
399 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMask(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
400 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
402 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc_mask
);
405 // Get of tsc_mask_next_bit
406 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMaskNextBit(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
407 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
409 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc_mask_next_bit
);
412 // Get of events_lost
413 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventsLost(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
414 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
416 return (jlong
)newPtr
->events_lost
;
419 // Get of subbuf_corrupt
420 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getSubBufferCorrupt(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
421 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
423 return (jlong
)newPtr
->subbuf_corrupt
;
427 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
428 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
430 return CONVERT_PTR_TO_JLONG(&newPtr
->event
);
434 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
435 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
437 return CONVERT_PTR_TO_JLONG(&newPtr
->buffer
);
441 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
442 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
444 return (jlong
)newPtr
->buf_size
;
448 // g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers
449 void g_hash_table_foreach_addMarkersOfTracefile(gpointer key
, gpointer data
, gpointer user_data
) {
450 struct addMarkersArgs
* args
= (struct addMarkersArgs
*)user_data
;
451 struct java_calling_data
* jargs
= (struct java_calling_data
*)args
->java_args
;
453 jclass accessClass
= (*jargs
->env
)->GetObjectClass(jargs
->env
, jargs
->jobj
);
454 jmethodID accessFunction
= (*jargs
->env
)->GetMethodID(jargs
->env
, accessClass
, "addMarkersFromC", "(IJ)V");
456 unsigned long marker_id
= (unsigned long)data
;
458 // The hash table store an ID... we will use the ID to access the array.
459 GArray
* marker
= args
->mdata
->markers
;
460 struct marker_info
* newPtr
= &g_array_index(marker
, struct marker_info
, marker_id
);
462 (*jargs
->env
)->CallVoidMethod(jargs
->env
, jargs
->jobj
, accessFunction
, marker_id
, CONVERT_PTR_TO_JLONG(newPtr
) );
465 // Function to fill up the java map with the event type found in tracefile (the name)
466 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
467 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
470 // Find a better way! This is ugly!
471 struct java_calling_data java_args
= { env
, jobj
};
472 struct addMarkersArgs args
= { &java_args
, newPtr
->mdata
};
474 g_hash_table_foreach( newPtr
->mdata
->markers_hash
, &g_hash_table_foreach_addMarkersOfTracefile
, &args
);
478 // Function to print the content of a tracefile
479 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1printTracefile(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
481 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
482 printf("cpu_online : %i\n" ,(int)newPtr
->cpu_online
);
483 printf("long_name : %s\n" ,g_quark_to_string(newPtr
->long_name
));
484 printf("name : %s\n" ,g_quark_to_string(newPtr
->name
));
485 printf("cpu_num : %u\n" ,(unsigned int)(newPtr
->cpu_num
));
486 printf("tid : %u\n" ,(unsigned int)(newPtr
->tid
));
487 printf("pgid : %u\n" ,(unsigned int)(newPtr
->pgid
));
488 printf("creation : %u\n" ,(unsigned long)(newPtr
->creation
));
489 printf("trace ptr : 0x%x\n" ,newPtr
->trace
);
490 printf("marker ptr : 0x%x\n" ,newPtr
->mdata
);
491 printf("fd : %i\n" ,(int)(newPtr
->fd
));
492 printf("file_size : %u\n" ,(unsigned int)(newPtr
->file_size
));
493 printf("num_blocks : %u\n" ,(unsigned int)(newPtr
->num_blocks
));
494 printf("reverse_bo : %i\n" ,(int)newPtr
->reverse_bo
);
495 printf("float_word_order : %i\n" ,(int)newPtr
->float_word_order
);
496 printf("alignment : %i\n" ,(int)newPtr
->alignment
);
497 printf("buffer_header_size : %i\n" ,(int)newPtr
->buffer_header_size
);
498 printf("tscbits : %u\n" ,(unsigned short)newPtr
->tscbits
);
499 printf("eventbits : %u\n" ,(unsigned short)newPtr
->eventbits
);
500 printf("tsc_mask : %u\n" ,(unsigned long)newPtr
->tsc_mask
);
501 printf("tsc_mask_next_bit : %u\n" ,(unsigned long)newPtr
->tsc_mask_next_bit
);
502 printf("events_lost : %u\n" ,(unsigned int)newPtr
->events_lost
);
503 printf("subbuf_corrupt : %u\n" ,(unsigned int)newPtr
->subbuf_corrupt
);
504 printf("event ptr : 0x%x\n" ,&newPtr
->event
);
505 printf("buffer ptr : 0x%x\n" ,&newPtr
->buffer
);
506 printf("buf_size : %i\n" ,(unsigned int)newPtr
->buf_size
);
514 // ### EVENT methods ###
517 // Method to get the read status
518 // This method will read the next event and then seek back its initial position
519 // Lttv assume that every tracefile have at least 1 event, but we have not guarantee after this one.
520 // We will read the next event and return the status of that read
521 // We will then seek back to our initial position
522 // Note : this method is expensive and should not be used too often
523 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1positionToFirstEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
524 LttTracefile
* tracefilePtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
526 // Ask ltt to read the next events on the given tracefiles
527 // Returned value can be :
528 // 0 if everything went fine (EOK)
529 // ERANGE = 34 out of range, back to last event (might be system dependent?)
530 // EPERM = 1 error while reading (might be system dependent?)
532 // Get "first time" on the trace before moving, as we will seek back after the read
533 LttTime firstTime
= ((struct LttTrace
)*(tracefilePtr
->trace
)).start_time_from_tsc
;
536 // For invalid events (i.e. empty tracefile) we have to save the "incoherent" timestamp that points BEFORE the first event
537 // Otherwise, we are already Out of Range when we seek back to the first event
539 // However, if we move to this timestamp for ALL events, we will get a lot of weird inconsistency with valid events
540 // Therefore, we will use two seek time : a "good" and valid one and a "before first event" one
541 LttTime beforeFirstTime
= tracefilePtr
->event
.event_time
;
543 int returnedValue
= ltt_tracefile_read(tracefilePtr
);
545 // Read succeed, move to first events
546 if ( returnedValue
== 0 ) {
547 ltt_tracefile_seek_time(tracefilePtr
, firstTime
);
549 // Read failed, get back to the "before" time
551 ltt_tracefile_seek_time(tracefilePtr
, beforeFirstTime
);
554 return (jint
)returnedValue
;
557 // Method to read next event
558 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1readNextEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
559 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
561 // Ask ltt to read the next events on the given tracefiles
562 // Returned value can be :
563 // 0 if everything went fine (EOK)
564 // ERANGE = 34 out of range, back to last event (might be system dependent?)
565 // EPERM = 1 error while reading (might be system dependent?)
569 // This might fail on the FIRST event, as the timestamp before the first read is uninitialized
570 // However, LTT make the assumption that all tracefile have AT LEAST one event, so we got to run with it
572 // Save "last time" before moving, to be able to get back if needed
573 LttTime lastTime
= newPtr
->event
.event_time
;
575 int returnedValue
= ltt_tracefile_read(newPtr
);
577 // According to Ltt documentation, we need to get back to beginning after an error
578 if ( returnedValue
!= 0 ) {
579 ltt_tracefile_seek_time(newPtr
, lastTime
);
582 return (jint
)returnedValue
;
585 // Method to seek to a certain event
586 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1seekEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
, jobject time_jobj
) {
587 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
589 guint64 fullTime
= 0;
591 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
592 jmethodID getTimeFunction
= (*env
)->GetMethodID(env
, accessClass
, "getTime", "()J");
593 fullTime
= (*env
)->CallLongMethod(env
, time_jobj
, getTimeFunction
);
596 // Conversion from jlong -> C long seems to be particularly sloppy
597 // Depending how and where (inlined a function or as a single operation) we do this, we might end up with wrong number
598 // The following asignation of guint64 seems to work well.
599 // MAKE SURE TO PERFORM SEVERAL TESTS IF YOU CHANGE THIS.
600 guint64 seconds
= fullTime
/BILLION
;
601 guint64 nanoSeconds
= fullTime
%BILLION
;
603 LttTime seekTime
= { (unsigned long)seconds
, (unsigned long)nanoSeconds
};
605 // Ask ltt to read the next events on the given tracefiles
606 // Returned value can be :
607 // 0 if everything went fine (EOK)
608 // ERANGE = 34 out of range, back to last event (might be system dependent?)
609 // EPERM = 1 error while reading (might be system dependent?)
611 int returnedValue
= ltt_tracefile_seek_time(newPtr
, seekTime
);
612 return (jint
)returnedValue
;
616 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTracefilePtr(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
617 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
619 return CONVERT_PTR_TO_JLONG(newPtr
->tracefile
);
623 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getBlock(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
624 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
626 return (jlong
)newPtr
->block
;
630 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOffset(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
631 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
633 return (jlong
)newPtr
->offset
;
637 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCurrentTimestampCounter(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
638 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
640 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc
);
644 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTimestamp(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
645 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
647 return (jlong
)newPtr
->timestamp
;
651 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventMarkerId(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
652 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
654 return (jint
)newPtr
->event_id
;
658 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1feedEventTime(JNIEnv
* env
, jobject jobj
, jlong event_ptr
, jobject time_jobj
) {
659 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
661 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
662 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
664 jlong fullTime
= (CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_nsec
);
666 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
669 // Access method to the data
670 // The data are in "byte" form
671 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getDataContent(JNIEnv
* env
, jobject jobj
, jlong event_ptr
, jlong data_size
, jbyteArray dataArray
) {
672 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
674 (*env
)->SetByteArrayRegion(env
, dataArray
, 0, (jsize
)data_size
, newPtr
->data
);
678 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventDataSize(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
679 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
681 return (jlong
)newPtr
->data_size
;
685 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventSize(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
686 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
688 return (jlong
)newPtr
->event_size
;
692 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCount(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
693 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
695 return (jint
)newPtr
->count
;
698 // Get of overflow_nsec
699 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOverflowNanoSeconds(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
700 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
702 return CONVERT_UINT64_TO_JLONG(newPtr
->overflow_nsec
);
706 // Function to print the content of a event
707 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1printEvent(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
708 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
710 printf("tracefile : 0x%x\n",(void*)newPtr
->tracefile
);
711 printf("block : %u\n", (unsigned int)newPtr
->block
);
712 printf("offset : %u\n", (unsigned int)newPtr
->offset
);
713 printf("tsc : %u\n", (unsigned long)newPtr
->tsc
);
714 printf("timestamp : %u\n", (unsigned int)newPtr
->timestamp
);
715 printf("event_id : %u\n", (unsigned short)newPtr
->event_id
);
716 printf("event_time : 0x%x\n",(void*) &newPtr
->event_time
);
717 printf(" sec : %u\n", (unsigned long)(newPtr
->event_time
.tv_sec
) );
718 printf(" nsec : %u\n", (unsigned long)(newPtr
->event_time
.tv_nsec
) );
719 printf("data : 0x%x\n",(void*) newPtr
->data
);
720 printf("data_size : %u\n", (unsigned int)newPtr
->data_size
);
721 printf("event_size : %u\n", (unsigned int)newPtr
->event_size
);
722 printf("count : %d\n", (int)newPtr
->count
);
723 printf("overflow_nsec : %d\n", (long)newPtr
->overflow_nsec
);
730 // ### MARKER method ###
734 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getName(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
735 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
737 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
));
741 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getFormatOverview(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
742 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
744 return (*env
)->NewStringUTF(env
, newPtr
->format
);
748 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
749 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
751 return (jlong
)newPtr
->size
;
754 // Method to get all markerField pointers
755 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAllMarkerFields(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
756 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
758 jclass accessClass
= (*env
)->GetObjectClass(env
, jobj
);
759 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "addMarkerFieldFromC", "(Ljava/lang/String;J)V");
761 GArray
* field_array
= (GArray
*)newPtr
->fields
;
762 struct marker_field
* field
;
763 jlong marker_field_ptr
;
766 for (i
=0; i
<field_array
->len
; i
++) {
767 field
= &g_array_index(field_array
, struct marker_field
, i
);
769 marker_field_ptr
= CONVERT_PTR_TO_JLONG(field
);
771 (*env
)->CallVoidMethod(env
, jobj
, accessFunction
, (*env
)->NewStringUTF(env
, g_quark_to_string(field
->name
) ), marker_field_ptr
);
777 // Get of largest_align
778 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLargestAlign(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
779 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
781 return (jshort
)newPtr
->largest_align
;
785 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getIntSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
786 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
788 return (jshort
)newPtr
->int_size
;
792 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLongSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
793 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
795 return (jshort
)newPtr
->long_size
;
798 // Get of pointer_size
799 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getPointerSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
800 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
802 return (jshort
)newPtr
->pointer_size
;
805 // Get of size_t_size
806 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize_1tSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
807 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
809 return (jshort
)newPtr
->size_t_size
;
813 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAlignement(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
814 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
816 return (jshort
)newPtr
->alignment
;
820 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getNextMarkerPtr(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
821 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
823 return CONVERT_PTR_TO_JLONG(newPtr
->next
);
827 // Function to print the content of a marker
828 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1printMarker(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
829 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
831 printf("name : %s\n", g_quark_to_string(newPtr
->name
) );
832 printf("format : %s\n", newPtr
->format
);
833 printf("size : %i\n", (long)newPtr
->size
);
834 printf("largest_align : %u\n", (unsigned short)newPtr
->largest_align
);
835 printf("fields : 0x%x\n",newPtr
->fields
);
836 printf("int_size : %u\n", (unsigned short)newPtr
->int_size
);
837 printf("long_size : %u\n", (unsigned short)newPtr
->long_size
);
838 printf("pointer_size : %u\n", (unsigned short)newPtr
->pointer_size
);
839 printf("size_t_size : %u\n", (unsigned short)newPtr
->size_t_size
);
840 printf("alignment : %u\n", (unsigned short)newPtr
->alignment
);
841 printf("next : 0x%x\n",newPtr
->next
);
850 // ### MARKERFIELD Method
854 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getField(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
855 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
857 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
));
861 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getType(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
862 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
864 return (jint
)newPtr
->type
;
868 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getOffset(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
869 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
871 return CONVERT_UINT64_TO_JLONG(newPtr
->offset
);
875 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getSize(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
876 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
878 return CONVERT_UINT64_TO_JLONG(newPtr
->size
);
882 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAlignment(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
883 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
885 return CONVERT_UINT64_TO_JLONG(newPtr
->alignment
);
889 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAttributes(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
890 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
892 return CONVERT_UINT64_TO_JLONG(newPtr
->attributes
);
895 // Get of static_offset
896 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getStatic_1offset(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
897 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
899 return (jint
)newPtr
->static_offset
;
903 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getFormat(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
904 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
906 return (*env
)->NewStringUTF(env
, newPtr
->fmt
->str
);
909 // Function to print the content of a marker_field
910 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1printMarkerField(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
911 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
913 printf("name : %s\n", g_quark_to_string(newPtr
->name
) );
914 printf("type : %i\n", (int)newPtr
->type
);
915 printf("offset : %u\n", (unsigned long)newPtr
->offset
);
916 printf("size : %u\n", (unsigned long)newPtr
->size
);
917 printf("alignment : %u\n", (unsigned long)newPtr
->alignment
);
918 printf("attributes : %u\n", (unsigned long)newPtr
->attributes
);
919 printf("static_offset : %i\n", (int)newPtr
->static_offset
);
920 printf("fmt : %s\n", newPtr
->fmt
);
931 // This function will do the actual parsing
932 // It will then call java to assign the parsed data to the object "javaObj"
933 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1getParsedData(JNIEnv
* env
, jclass accessClass
, jobject javaObj
, jlong event_ptr
, jlong marker_field_ptr
) {
934 LttEvent newEventPtr
= *(LttEvent
*)(CONVERT_JLONG_TO_PTR(event_ptr
));
935 struct marker_field
* newMarkerFieldPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
937 jmethodID accessFunction
= NULL
;
940 // There is a very limited number of type in LTT
941 // We will switch on the type for this field and act accordingly
942 // NOTE : We will save all integer into "long" type, as there is no signed/unsigned in java
945 // It seems the marker_field->type is absolutely not consistent, especially about pointer!
946 // Sometime pointer are saved in String, sometime as Int, sometime as pointer...
947 // We will do an extra check on type "LTT_TYPE_UNSIGNED_INT" to check if the marker_field->format is hint of a pointer
948 switch ( newMarkerFieldPtr
->type
) {
949 case LTT_TYPE_SIGNED_INT
:
950 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
951 (*env
)->CallStaticVoidMethod( env
,
955 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
956 ltt_event_get_long_int(&newEventPtr
, newMarkerFieldPtr
),
957 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
962 case LTT_TYPE_UNSIGNED_INT
:
964 // If the format seems to be a pointer, add it as a pointer
965 if ( (strncmp(newMarkerFieldPtr
->fmt
->str
, "0x%llX", newMarkerFieldPtr
->fmt
->len
) == 0 ) || (strncmp(newMarkerFieldPtr
->fmt
->str
, "%llX", newMarkerFieldPtr
->fmt
->len
) == 0 ) ) {
966 #if ARCHITECTURE_IS_64BITS == 0
967 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addIntPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
969 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
971 (*env
)->CallStaticVoidMethod( env
,
975 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
976 CONVERT_PTR_TO_JLONG(ltt_event_get_long_unsigned(&newEventPtr
, newMarkerFieldPtr
) ),
977 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
980 // Otherwise, add it as a number
982 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
983 (*env
)->CallStaticVoidMethod( env
,
987 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
988 ltt_event_get_long_unsigned(&newEventPtr
, newMarkerFieldPtr
),
989 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
995 case LTT_TYPE_POINTER
:
996 #if ARCHITECTURE_IS_64BITS == 0
997 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addIntPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
999 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
1001 (*env
)->CallStaticVoidMethod( env
,
1005 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
1006 CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR
*)(newEventPtr
.data
+ newMarkerFieldPtr
->offset
)),
1007 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
1011 case LTT_TYPE_STRING
:
1012 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addStringToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V");
1013 (*env
)->CallStaticVoidMethod( env
,
1017 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
1018 (*env
)->NewStringUTF(env
, ltt_event_get_string(&newEventPtr
, newMarkerFieldPtr
) ),
1019 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
1023 case LTT_TYPE_COMPACT
:
1024 case LTT_TYPE_NONE
:
1026 printf("Warning : Unrecognized format type! Skipping! (Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1fillParseArray)");