2 // !! Important to get consistent size_t type
3 #define _FILE_OFFSET_BITS 64
9 #include <ltt/marker.h>
19 // We've got hell of a problem passing "unsigned int64" to java, as there is no equivalent type
20 // The closer we can use is "long" which is signed, so only 32 (or 63?) bits are valid
21 // Plus, even if we are within the "32 bits" capacity, java sometime screw itself trying to convert "unsigned 64 -> signed 64"
22 // This happen especially often when RETURNING a jlong
23 // So when returning a jlong, we should convert it like this : "unsigned 64"->"signed 64"->jlong
24 #define CONVERT_UINT64_TO_JLONG(n) (jlong)(gint64)(n)
25 #define CONVERT_INT64_TO_JLONG(n) (jlong)(gint64)(n)
27 // To ease calcul involving nano
28 #define BILLION 1000000000
32 #define CONVERT_JLONG_TO_PTR(p) (p)
33 // Define the "gint" type we should use for pointer.
34 #define GINT_TYPE_FOR_PTR gint32
36 // Conversion to int first to save warning
37 #define CONVERT_JLONG_TO_PTR(p) (int)(p)
38 #define CONVERT_PTR_TO_JLONG(p) (jlong)(int)(p)
39 // Define the "gint" type we should use for pointer.
40 #define GINT_TYPE_FOR_PTR gint64
43 // Structure to encapsulate java_data to pass as arguments
44 struct java_calling_data
51 // Find a better way! This is ugly!
54 struct java_calling_data
* java_args
;
55 struct marker_data
* mdata
;
59 // ### COMMON Methods ###
61 // JNI method to call printf from the java side
62 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_Jni_1C_1Common_ltt_1printC(JNIEnv
* env
, jobject jobj
, jstring new_string
)
64 printf( (*env
)->GetStringUTFChars(env
, new_string
, 0) );
72 // ### TRACE methods ###
74 // JNI mapping of < LttTrace *ltt_trace_open(const gchar *pathname) > (trace.h)
75 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1openTrace(JNIEnv
* env
, jobject jobj
, jstring pathname
) {
76 const char* c_pathname
= (*env
)->GetStringUTFChars(env
, pathname
, 0);
77 LttTrace
* newPtr
= ltt_trace_open( c_pathname
);
79 (*env
)->ReleaseStringUTFChars(env
, pathname
, c_pathname
);
81 return CONVERT_PTR_TO_JLONG(newPtr
);
84 // JNI mapping of < void ltt_trace_close(LttTrace *t) > (trace.h)
85 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1closeTrace(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
){
87 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
89 ltt_trace_close(newPtr
);
93 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getTracepath(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
94 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
96 return (*env
)->NewStringUTF(env
, g_quark_to_string( newPtr
->pathname
) );
101 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getCpuNumber(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
102 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
104 return (jint
)newPtr
->num_cpu
;
108 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchType(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
109 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
111 return (jlong
)newPtr
->arch_type
;
114 // Get of arch_variant
115 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchVariant(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
116 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
118 return (jlong
)newPtr
->arch_variant
;
122 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchSize(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
123 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
125 return (jshort
)newPtr
->arch_size
;
128 // Get of ltt_major_version
129 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMajorVersion(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
130 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
132 return (jshort
)newPtr
->ltt_major_version
;
135 // Get of ltt_minor_version
136 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMinorVersion(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
137 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
139 return (jshort
)newPtr
->ltt_minor_version
;
142 // Get of flight_recorder
143 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFlightRecorder(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
144 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
146 return (jshort
)newPtr
->flight_recorder
;
150 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFreqScale(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
151 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
153 return (jlong
)newPtr
->freq_scale
;
157 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartFreq(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
158 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
160 return CONVERT_UINT64_TO_JLONG(newPtr
->start_freq
);
164 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartTimestampCurrentCounter(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
165 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
167 return CONVERT_UINT64_TO_JLONG(newPtr
->start_tsc
);
170 // Get of start_monotonic
171 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartMonotonic(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
172 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
174 return CONVERT_UINT64_TO_JLONG(newPtr
->start_monotonic
);
177 // Access to start_time
178 // Note that we are calling the setTimeFromC function in Jaf_Time from here
179 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTime(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
, jobject time_jobj
) {
180 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
182 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
183 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
185 jlong fullTime
= (CONVERT_UINT64_TO_JLONG(newPtr
->start_time
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->start_time
.tv_nsec
);
187 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
190 // Access to start_time_from_tsc
191 // Note that we are calling the setTimeFromC function in Jaf_Time from here
192 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTimeFromTimestampCurrentCounter(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
, jobject time_jobj
) {
193 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
195 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
196 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
198 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
);
200 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
204 // g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles
205 void g_datalist_foreach_addTracefilesOfTrace(GQuark name
, gpointer data
, gpointer user_data
) {
206 struct java_calling_data
* args
= (struct java_calling_data
*)user_data
;
208 jclass accessClass
= (*args
->env
)->GetObjectClass(args
->env
, args
->jobj
);
209 jmethodID accessFunction
= (*args
->env
)->GetMethodID(args
->env
, accessClass
, "addTracefileFromC", "(Ljava/lang/String;J)V");
211 GArray
* group
= (GArray
*)data
;
212 LttTracefile
* tracefile
;
216 for (i
=0; i
<group
->len
; i
++) {
217 tracefile
= &g_array_index(group
, LttTracefile
, i
);
219 newPtr
= CONVERT_PTR_TO_JLONG(tracefile
);
221 (*args
->env
)->CallVoidMethod(args
->env
, args
->jobj
, accessFunction
, (*args
->env
)->NewStringUTF(args
->env
, g_quark_to_string(tracefile
->name
) ), newPtr
);
225 // Function to fill up the java map with the event type found in tracefile (the name)
226 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
227 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
229 struct java_calling_data args
= { env
, jobj
};
231 g_datalist_foreach(&newPtr
->tracefiles
, &g_datalist_foreach_addTracefilesOfTrace
, &args
);
235 // Function to print the content of a tracefile
236 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1printTrace(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
238 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
240 printf("pathname : %s\n" ,g_quark_to_string(newPtr
->pathname
) );
241 printf("num_cpu : %u\n" ,(unsigned int)(newPtr
->num_cpu
) );
242 printf("arch_type : %u\n" ,(unsigned int)(newPtr
->arch_type
) );
243 printf("arch_variant : %u\n" ,(unsigned int)(newPtr
->arch_variant
) );
244 printf("arch_size : %u\n" ,(unsigned short)(newPtr
->arch_size
) );
245 printf("ltt_major_version : %u\n" ,(unsigned short)(newPtr
->ltt_major_version
) );
246 printf("ltt_minor_version : %u\n" ,(unsigned short)(newPtr
->ltt_minor_version
) );
247 printf("flight_recorder : %u\n" ,(unsigned short)(newPtr
->flight_recorder
) );
248 printf("freq_scale : %u\n" ,(unsigned int)(newPtr
->freq_scale
) );
249 printf("start_freq : %lu\n" ,(long unsigned int)(newPtr
->start_freq
) );
250 printf("start_tsc : %lu\n" ,(long unsigned int)(newPtr
->start_tsc
) );
251 printf("start_monotonic : %lu\n" ,(long unsigned int)(newPtr
->start_monotonic
) );
252 printf("start_time ptr : 0x%p\n" ,&newPtr
->start_time
);
253 printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr
->start_time
.tv_sec
) );
254 printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr
->start_time
.tv_nsec
) );
255 printf("start_time_from_tsc ptr : 0x%p\n" ,&newPtr
->start_time_from_tsc
);
256 printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr
->start_time_from_tsc
.tv_sec
) );
257 printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr
->start_time_from_tsc
.tv_nsec
) );
258 printf("tracefiles ptr : 0x%p\n" ,newPtr
->tracefiles
);
267 // ### TRACEFILE methods ###
270 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsCpuOnline(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
271 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
273 return (jboolean
)newPtr
->cpu_online
;
277 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilepath(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
278 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
280 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->long_name
) );
284 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilename(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
285 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
287 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
) );
291 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCpuNumber(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
292 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
294 return (jlong
)newPtr
->cpu_num
;
298 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTid(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
299 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
301 return (jlong
)newPtr
->tid
;
305 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getPgid(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
306 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
308 return (jlong
)newPtr
->pgid
;
312 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCreation(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
313 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
315 return CONVERT_UINT64_TO_JLONG(newPtr
->creation
);
319 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracePtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
320 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
322 return CONVERT_PTR_TO_JLONG(newPtr
->trace
);
326 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getMarkerDataPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
327 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
329 return CONVERT_PTR_TO_JLONG(newPtr
->mdata
);
333 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCFileDescriptor(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
334 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
336 return (jint
)newPtr
->fd
;
340 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getFileSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
341 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
343 return CONVERT_UINT64_TO_JLONG(newPtr
->file_size
);
347 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBlockNumber(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
348 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
350 return (jlong
)newPtr
->num_blocks
;
354 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsBytesOrderReversed(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
355 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
357 return (jboolean
)newPtr
->reverse_bo
;
360 // Get of float_word_order
361 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsFloatWordOrdered(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
362 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
364 return (jboolean
)newPtr
->float_word_order
;
368 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAlignement(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
369 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
371 return CONVERT_UINT64_TO_JLONG(newPtr
->alignment
);
374 // Get of buffer_header_size
375 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferHeaderSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
376 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
378 return CONVERT_UINT64_TO_JLONG(newPtr
->buffer_header_size
);
382 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfCurrentTimestampCounter(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
383 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
385 return (jint
)newPtr
->tscbits
;
389 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
390 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
392 return (jint
)newPtr
->eventbits
;
396 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMask(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
397 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
399 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc_mask
);
402 // Get of tsc_mask_next_bit
403 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMaskNextBit(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
404 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
406 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc_mask_next_bit
);
409 // Get of events_lost
410 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventsLost(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
411 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
413 return (jlong
)newPtr
->events_lost
;
416 // Get of subbuf_corrupt
417 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getSubBufferCorrupt(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
418 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
420 return (jlong
)newPtr
->subbuf_corrupt
;
424 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
425 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
427 return CONVERT_PTR_TO_JLONG(&newPtr
->event
);
431 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
432 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
434 return CONVERT_PTR_TO_JLONG(&newPtr
->buffer
);
438 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
439 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
441 return (jlong
)newPtr
->buf_size
;
445 // g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers
446 void g_hash_table_foreach_addMarkersOfTracefile(gpointer key
, gpointer data
, gpointer user_data
) {
447 struct addMarkersArgs
* args
= (struct addMarkersArgs
*)user_data
;
448 struct java_calling_data
* jargs
= (struct java_calling_data
*)args
->java_args
;
450 jclass accessClass
= (*jargs
->env
)->GetObjectClass(jargs
->env
, jargs
->jobj
);
451 jmethodID accessFunction
= (*jargs
->env
)->GetMethodID(jargs
->env
, accessClass
, "addMarkersFromC", "(IJ)V");
453 unsigned long marker_id
= (unsigned long)data
;
455 // The hash table store an ID... we will use the ID to access the array.
456 GArray
* marker
= args
->mdata
->markers
;
457 struct marker_info
* newPtr
= &g_array_index(marker
, struct marker_info
, marker_id
);
459 (*jargs
->env
)->CallVoidMethod(jargs
->env
, jargs
->jobj
, accessFunction
, marker_id
, CONVERT_PTR_TO_JLONG(newPtr
) );
462 // Function to fill up the java map with the event type found in tracefile (the name)
463 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
464 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
467 // Find a better way! This is ugly!
468 struct java_calling_data java_args
= { env
, jobj
};
469 struct addMarkersArgs args
= { &java_args
, newPtr
->mdata
};
471 g_hash_table_foreach( newPtr
->mdata
->markers_hash
, &g_hash_table_foreach_addMarkersOfTracefile
, &args
);
475 // Function to print the content of a tracefile
476 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1printTracefile(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
478 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
479 printf("cpu_online : %i\n" ,(int)newPtr
->cpu_online
);
480 printf("long_name : %s\n" ,g_quark_to_string(newPtr
->long_name
));
481 printf("name : %s\n" ,g_quark_to_string(newPtr
->name
));
482 printf("cpu_num : %u\n" ,(unsigned int)(newPtr
->cpu_num
));
483 printf("tid : %u\n" ,(unsigned int)(newPtr
->tid
));
484 printf("pgid : %u\n" ,(unsigned int)(newPtr
->pgid
));
485 printf("creation : %lu\n" ,(long unsigned int)(newPtr
->creation
));
486 printf("trace ptr : 0x%p\n" ,newPtr
->trace
);
487 printf("marker ptr : 0x%p\n" ,newPtr
->mdata
);
488 printf("fd : %i\n" ,(int)(newPtr
->fd
));
489 printf("file_size : %u\n" ,(unsigned int)(newPtr
->file_size
));
490 printf("num_blocks : %u\n" ,(unsigned int)(newPtr
->num_blocks
));
491 printf("reverse_bo : %i\n" ,(int)newPtr
->reverse_bo
);
492 printf("float_word_order : %i\n" ,(int)newPtr
->float_word_order
);
493 printf("alignment : %i\n" ,(int)newPtr
->alignment
);
494 printf("buffer_header_size : %i\n" ,(int)newPtr
->buffer_header_size
);
495 printf("tscbits : %u\n" ,(unsigned short)newPtr
->tscbits
);
496 printf("eventbits : %u\n" ,(unsigned short)newPtr
->eventbits
);
497 printf("tsc_mask : %lu\n" ,(long unsigned int)newPtr
->tsc_mask
);
498 printf("tsc_mask_next_bit : %lu\n" ,(long unsigned int)newPtr
->tsc_mask_next_bit
);
499 printf("events_lost : %u\n" ,(unsigned int)newPtr
->events_lost
);
500 printf("subbuf_corrupt : %u\n" ,(unsigned int)newPtr
->subbuf_corrupt
);
501 printf("event ptr : 0x%p\n" ,&newPtr
->event
);
502 printf("buffer ptr : 0x%p\n" ,&newPtr
->buffer
);
503 printf("buf_size : %i\n" ,(unsigned int)newPtr
->buf_size
);
511 // ### EVENT methods ###
514 // Method to get the read status
515 // This method will read the next event and then seek back its initial position
516 // Lttv assume that every tracefile have at least 1 event, but we have not guarantee after this one.
517 // We will read the next event and return the status of that read
518 // We will then seek back to our initial position
519 // Note : this method is expensive and should not be used too often
520 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1positionToFirstEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
521 LttTracefile
* tracefilePtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
523 // Ask ltt to read the next events on the given tracefiles
524 // Returned value can be :
525 // 0 if everything went fine (EOK)
526 // ERANGE = 34 out of range, back to last event (might be system dependent?)
527 // EPERM = 1 error while reading (might be system dependent?)
530 // Seek to the start time... this will also read the first event, as we want.
531 int returnedValue
= ltt_tracefile_seek_time(tracefilePtr
, ((struct LttTrace
)*(tracefilePtr
->trace
)).start_time_from_tsc
);
533 return (jint
)returnedValue
;
536 // Method to read next event
537 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1readNextEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
538 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
540 // Ask ltt to read the next events on the given tracefiles
541 // Returned value can be :
542 // 0 if everything went fine (EOK)
543 // ERANGE = 34 out of range, back to last event (might be system dependent?)
544 // EPERM = 1 error while reading (might be system dependent?)
548 // This might fail on the FIRST event, as the timestamp before the first read is uninitialized
549 // However, LTT make the assumption that all tracefile have AT LEAST one event, so we got to run with it
551 // Save "last time" before moving, to be able to get back if needed
552 LttTime lastTime
= newPtr
->event
.event_time
;
554 int returnedValue
= ltt_tracefile_read(newPtr
);
556 // According to Ltt documentation, we need to get back to beginning after an error
557 if ( returnedValue
!= 0 ) {
558 ltt_tracefile_seek_time(newPtr
, lastTime
);
561 return (jint
)returnedValue
;
564 // Method to seek to a certain event
565 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1seekEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
, jobject time_jobj
) {
566 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
568 guint64 fullTime
= 0;
570 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
571 jmethodID getTimeFunction
= (*env
)->GetMethodID(env
, accessClass
, "getTime", "()J");
572 fullTime
= (*env
)->CallLongMethod(env
, time_jobj
, getTimeFunction
);
575 // Conversion from jlong -> C long seems to be particularly sloppy
576 // Depending how and where (inlined a function or as a single operation) we do this, we might end up with wrong number
577 // The following asignation of guint64 seems to work well.
578 // MAKE SURE TO PERFORM SEVERAL TESTS IF YOU CHANGE THIS.
579 guint64 seconds
= fullTime
/BILLION
;
580 guint64 nanoSeconds
= fullTime
%BILLION
;
582 LttTime seekTime
= { (unsigned long)seconds
, (unsigned long)nanoSeconds
};
584 // Ask ltt to read the next events on the given tracefiles
585 // Returned value can be :
586 // 0 if everything went fine (EOK)
587 // ERANGE = 34 out of range, back to last event (might be system dependent?)
588 // EPERM = 1 error while reading (might be system dependent?)
590 int returnedValue
= ltt_tracefile_seek_time(newPtr
, seekTime
);
591 return (jint
)returnedValue
;
595 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTracefilePtr(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
596 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
598 return CONVERT_PTR_TO_JLONG(newPtr
->tracefile
);
602 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getBlock(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
603 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
605 return (jlong
)newPtr
->block
;
609 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOffset(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
610 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
612 return (jlong
)newPtr
->offset
;
616 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCurrentTimestampCounter(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
617 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
619 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc
);
623 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTimestamp(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
624 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
626 return (jlong
)newPtr
->timestamp
;
630 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventMarkerId(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
631 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
633 return (jint
)newPtr
->event_id
;
637 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1feedEventTime(JNIEnv
* env
, jobject jobj
, jlong event_ptr
, jobject time_jobj
) {
638 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
640 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
641 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
643 jlong fullTime
= (CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_nsec
);
645 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
648 // Access method to the data
649 // The data are in "byte" form
650 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getDataContent(JNIEnv
* env
, jobject jobj
, jlong event_ptr
, jlong data_size
, jbyteArray dataArray
) {
651 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
653 (*env
)->SetByteArrayRegion(env
, dataArray
, 0, (jsize
)data_size
, newPtr
->data
);
657 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventDataSize(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
658 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
660 return (jlong
)newPtr
->data_size
;
664 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventSize(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
665 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
667 return (jlong
)newPtr
->event_size
;
671 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCount(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
672 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
674 return (jint
)newPtr
->count
;
677 // Get of overflow_nsec
678 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOverflowNanoSeconds(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
679 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
681 return CONVERT_UINT64_TO_JLONG(newPtr
->overflow_nsec
);
685 // Function to print the content of a event
686 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1printEvent(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
687 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
689 printf("tracefile : 0x%p\n",(void*)newPtr
->tracefile
);
690 printf("block : %u\n" ,(unsigned int)newPtr
->block
);
691 printf("offset : %u\n" ,(unsigned int)newPtr
->offset
);
692 printf("tsc : %lu\n" ,(long unsigned int)newPtr
->tsc
);
693 printf("timestamp : %u\n" ,(unsigned int)newPtr
->timestamp
);
694 printf("event_id : %u\n" ,(unsigned short)newPtr
->event_id
);
695 printf("event_time : 0x%p\n",(void*) &newPtr
->event_time
);
696 printf(" sec : %lu\n" ,(long unsigned int)(newPtr
->event_time
.tv_sec
) );
697 printf(" nsec : %lu\n" ,(long unsigned int)(newPtr
->event_time
.tv_nsec
) );
698 printf("data : 0x%p\n",(void*) newPtr
->data
);
699 printf("data_size : %u\n" ,(unsigned int)newPtr
->data_size
);
700 printf("event_size : %u\n" ,(unsigned int)newPtr
->event_size
);
701 printf("count : %d\n" ,(int)newPtr
->count
);
702 printf("overflow_nsec : %ld\n" ,(long)newPtr
->overflow_nsec
);
709 // ### MARKER method ###
713 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getName(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
714 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
716 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
));
720 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getFormatOverview(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
721 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
723 return (*env
)->NewStringUTF(env
, newPtr
->format
);
727 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
728 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
730 return (jlong
)newPtr
->size
;
733 // Method to get all markerField pointers
734 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAllMarkerFields(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
735 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
737 jclass accessClass
= (*env
)->GetObjectClass(env
, jobj
);
738 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "addMarkerFieldFromC", "(Ljava/lang/String;J)V");
740 GArray
* field_array
= (GArray
*)newPtr
->fields
;
741 struct marker_field
* field
;
742 jlong marker_field_ptr
;
745 for (i
=0; i
<field_array
->len
; i
++) {
746 field
= &g_array_index(field_array
, struct marker_field
, i
);
748 marker_field_ptr
= CONVERT_PTR_TO_JLONG(field
);
750 (*env
)->CallVoidMethod(env
, jobj
, accessFunction
, (*env
)->NewStringUTF(env
, g_quark_to_string(field
->name
) ), marker_field_ptr
);
756 // Get of largest_align
757 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLargestAlign(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
758 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
760 return (jshort
)newPtr
->largest_align
;
764 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getIntSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
765 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
767 return (jshort
)newPtr
->int_size
;
771 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLongSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
772 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
774 return (jshort
)newPtr
->long_size
;
777 // Get of pointer_size
778 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getPointerSize(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
->pointer_size
;
784 // Get of size_t_size
785 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize_1tSize(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
->size_t_size
;
792 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAlignement(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
->alignment
;
799 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getNextMarkerPtr(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 CONVERT_PTR_TO_JLONG(newPtr
->next
);
806 // Function to print the content of a marker
807 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1printMarker(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
808 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
810 printf("name : %s\n" ,g_quark_to_string(newPtr
->name
) );
811 printf("format : %s\n" ,newPtr
->format
);
812 printf("size : %li\n" ,(long int)newPtr
->size
);
813 printf("largest_align : %u\n" ,(unsigned short)newPtr
->largest_align
);
814 printf("fields : 0x%p\n",newPtr
->fields
);
815 printf("int_size : %u\n" ,(unsigned short)newPtr
->int_size
);
816 printf("long_size : %u\n" ,(unsigned short)newPtr
->long_size
);
817 printf("pointer_size : %u\n" ,(unsigned short)newPtr
->pointer_size
);
818 printf("size_t_size : %u\n" ,(unsigned short)newPtr
->size_t_size
);
819 printf("alignment : %u\n" ,(unsigned short)newPtr
->alignment
);
820 printf("next : 0x%p\n",newPtr
->next
);
829 // ### MARKERFIELD Method
833 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getField(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
834 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
836 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
));
840 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getType(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
841 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
843 return (jint
)newPtr
->type
;
847 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getOffset(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
848 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
850 return CONVERT_UINT64_TO_JLONG(newPtr
->offset
);
854 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getSize(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 CONVERT_UINT64_TO_JLONG(newPtr
->size
);
861 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAlignment(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 CONVERT_UINT64_TO_JLONG(newPtr
->alignment
);
868 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAttributes(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
->attributes
);
874 // Get of static_offset
875 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getStatic_1offset(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 (jint
)newPtr
->static_offset
;
882 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getFormat(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 (*env
)->NewStringUTF(env
, newPtr
->fmt
->str
);
888 // Function to print the content of a marker_field
889 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1printMarkerField(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
890 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
892 printf("name : %s\n" ,g_quark_to_string(newPtr
->name
) );
893 printf("type : %i\n" ,(int)newPtr
->type
);
894 printf("offset : %lu\n" ,(long unsigned int)newPtr
->offset
);
895 printf("size : %lu\n" ,(long unsigned int)newPtr
->size
);
896 printf("alignment : %lu\n" ,(long unsigned int)newPtr
->alignment
);
897 printf("attributes : %lu\n" ,(long unsigned int)newPtr
->attributes
);
898 printf("static_offset : %i\n" ,(int)newPtr
->static_offset
);
899 printf("fmt : %s\n" ,newPtr
->fmt
->str
);
910 // This function will do the actual parsing
911 // It will then call java to assign the parsed data to the object "javaObj"
912 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
) {
913 LttEvent newEventPtr
= *(LttEvent
*)(CONVERT_JLONG_TO_PTR(event_ptr
));
914 struct marker_field
* newMarkerFieldPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
916 jmethodID accessFunction
= NULL
;
919 // There is a very limited number of type in LTT
920 // We will switch on the type for this field and act accordingly
921 // NOTE : We will save all integer into "long" type, as there is no signed/unsigned in java
924 // It seems the marker_field->type is absolutely not consistent, especially about pointer!
925 // Sometime pointer are saved in String, sometime as Int, sometime as pointer...
926 // We will do an extra check on type "LTT_TYPE_UNSIGNED_INT" to check if the marker_field->format is hint of a pointer
927 switch ( newMarkerFieldPtr
->type
) {
928 case LTT_TYPE_SIGNED_INT
:
929 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
930 (*env
)->CallStaticVoidMethod( env
,
934 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
935 ltt_event_get_long_int(&newEventPtr
, newMarkerFieldPtr
),
936 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
941 case LTT_TYPE_UNSIGNED_INT
:
943 // If the format seems to be a pointer, add it as a pointer
944 if ( (strncmp(newMarkerFieldPtr
->fmt
->str
, "0x%llX", newMarkerFieldPtr
->fmt
->len
) == 0 ) || (strncmp(newMarkerFieldPtr
->fmt
->str
, "%llX", newMarkerFieldPtr
->fmt
->len
) == 0 ) ) {
945 #if ARCHITECTURE_IS_64BITS == 0
946 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addIntPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
948 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
950 (*env
)->CallStaticVoidMethod( env
,
954 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
955 CONVERT_PTR_TO_JLONG(ltt_event_get_long_unsigned(&newEventPtr
, newMarkerFieldPtr
) ),
956 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
959 // Otherwise, add it as a number
961 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
962 (*env
)->CallStaticVoidMethod( env
,
966 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
967 ltt_event_get_long_unsigned(&newEventPtr
, newMarkerFieldPtr
),
968 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
974 case LTT_TYPE_POINTER
:
975 #if ARCHITECTURE_IS_64BITS == 0
976 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addIntPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
978 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
980 (*env
)->CallStaticVoidMethod( env
,
984 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
985 CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR
*)(newEventPtr
.data
+ newMarkerFieldPtr
->offset
)),
986 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
990 case LTT_TYPE_STRING
:
991 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addStringToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V");
992 (*env
)->CallStaticVoidMethod( env
,
996 (*env
)->NewStringUTF(env
, g_quark_to_string(newMarkerFieldPtr
->name
) ),
997 (*env
)->NewStringUTF(env
, ltt_event_get_string(&newEventPtr
, newMarkerFieldPtr
) ),
998 (*env
)->NewStringUTF(env
, newMarkerFieldPtr
->fmt
->str
)
1002 case LTT_TYPE_COMPACT
:
1003 case LTT_TYPE_NONE
:
1005 printf("Warning : Unrecognized format type! Skipping! (Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1fillParseArray)");