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 CONVERT_PTR_TO_JLONG(p) (jlong)(p)
34 // Define the "gint" type we should use for pointer.
35 #define GINT_TYPE_FOR_PTR gint64
37 // Conversion to int first to save warning
38 #define CONVERT_JLONG_TO_PTR(p) (int)(p)
39 #define CONVERT_PTR_TO_JLONG(p) (jlong)(int)(p)
40 // Define the "gint" type we should use for pointer.
41 #define GINT_TYPE_FOR_PTR gint32
44 // Structure to encapsulate java_data to pass as arguments
45 struct java_calling_data
52 // Find a better way! This is ugly!
55 struct java_calling_data
* java_args
;
56 struct marker_data
* mdata
;
59 // ### COMMON Methods ###
61 // Empty method to turn off the debug (debug waste time while printing)
62 void ignore_and_drop_message(const gchar
*log_domain
, GLogLevelFlags log_level
, const gchar
*message
, gpointer user_data
)
67 // JNI method to call printf from the java side
68 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_Jni_1C_1Common_ltt_1printC(JNIEnv
* env
, jobject jobj
, jstring new_string
)
70 const char* c_msg
= (*env
)->GetStringUTFChars(env
, new_string
, 0);
74 (*env
)->ReleaseStringUTFChars(env
, new_string
, c_msg
);
81 // ### TRACE methods ###
83 // JNI mapping of < LttTrace *ltt_trace_open(const gchar *pathname) > (trace.h)
84 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1openTrace(JNIEnv
* env
, jobject jobj
, jstring pathname
, jboolean show_debug
) {
87 // Make sure we don't use any debug (speed up the read)
88 g_log_set_handler(NULL
, G_LOG_LEVEL_INFO
, ignore_and_drop_message
, NULL
);
89 g_log_set_handler(NULL
, G_LOG_LEVEL_DEBUG
, ignore_and_drop_message
, NULL
);
92 const char* c_pathname
= (*env
)->GetStringUTFChars(env
, pathname
, 0);
93 LttTrace
* newPtr
= ltt_trace_open( c_pathname
);
95 (*env
)->ReleaseStringUTFChars(env
, pathname
, c_pathname
);
97 return CONVERT_PTR_TO_JLONG(newPtr
);
100 // JNI mapping of < void ltt_trace_close(LttTrace *t) > (trace.h)
101 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1closeTrace(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
){
103 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
105 ltt_trace_close(newPtr
);
109 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getTracepath(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
110 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
112 return (*env
)->NewStringUTF(env
, g_quark_to_string( newPtr
->pathname
) );
117 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getCpuNumber(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
118 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
120 return (jint
)newPtr
->num_cpu
;
124 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchType(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
125 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
127 return (jlong
)newPtr
->arch_type
;
130 // Get of arch_variant
131 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchVariant(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
132 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
134 return (jlong
)newPtr
->arch_variant
;
138 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchSize(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
139 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
141 return (jshort
)newPtr
->arch_size
;
144 // Get of ltt_major_version
145 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMajorVersion(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
146 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
148 return (jshort
)newPtr
->ltt_major_version
;
151 // Get of ltt_minor_version
152 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMinorVersion(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
153 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
155 return (jshort
)newPtr
->ltt_minor_version
;
158 // Get of flight_recorder
159 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFlightRecorder(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
160 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
162 return (jshort
)newPtr
->flight_recorder
;
166 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFreqScale(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
167 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
169 return (jlong
)newPtr
->freq_scale
;
173 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartFreq(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
174 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
176 return CONVERT_UINT64_TO_JLONG(newPtr
->start_freq
);
180 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartTimestampCurrentCounter(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
181 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
183 return CONVERT_UINT64_TO_JLONG(newPtr
->start_tsc
);
186 // Get of start_monotonic
187 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartMonotonic(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
188 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
190 return CONVERT_UINT64_TO_JLONG(newPtr
->start_monotonic
);
193 // Access to start_time
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_1feedStartTime(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
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->start_time
.tv_nsec
);
203 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
206 // Access to start_time_from_tsc
207 // Note that we are calling the setTimeFromC function in Jaf_Time from here
208 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTimeFromTimestampCurrentCounter(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
, jobject time_jobj
) {
209 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
211 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
212 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
214 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
);
216 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
220 // g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles
221 void g_datalist_foreach_addTracefilesOfTrace(GQuark name
, gpointer data
, gpointer user_data
) {
222 struct java_calling_data
* args
= (struct java_calling_data
*)user_data
;
224 jclass accessClass
= (*args
->env
)->GetObjectClass(args
->env
, args
->jobj
);
225 jmethodID accessFunction
= (*args
->env
)->GetMethodID(args
->env
, accessClass
, "addTracefileFromC", "(Ljava/lang/String;J)V");
227 GArray
* group
= (GArray
*)data
;
228 LttTracefile
* tracefile
;
232 for (i
=0; i
<group
->len
; i
++) {
233 tracefile
= &g_array_index(group
, LttTracefile
, i
);
235 newPtr
= CONVERT_PTR_TO_JLONG(tracefile
);
237 (*args
->env
)->CallVoidMethod(args
->env
, args
->jobj
, accessFunction
, (*args
->env
)->NewStringUTF(args
->env
, g_quark_to_string(tracefile
->name
) ), newPtr
);
241 // Function to fill up the java map with the event type found in tracefile (the name)
242 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedAllTracefiles(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
243 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
245 struct java_calling_data args
= { env
, jobj
};
247 g_datalist_foreach(&newPtr
->tracefiles
, &g_datalist_foreach_addTracefilesOfTrace
, &args
);
250 // Obtain the range of the trace (i.e. "start time" and "end time")
251 // Note : this method is quite heavy to use!
252 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedTracefileTimeRange(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
, jobject jstart_time
, jobject jend_time
) {
253 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
255 LttTime tmpStartTime
= { 0, 0 };
256 LttTime tmpEndTime
= { 0, 0 };
257 ltt_trace_time_span_get(newPtr
, &tmpStartTime
, &tmpEndTime
);
259 jclass startAccessClass
= (*env
)->GetObjectClass(env
, jstart_time
);
260 jmethodID startAccessFunction
= (*env
)->GetMethodID(env
, startAccessClass
, "setTimeFromC", "(J)V");
261 jlong startTime
= (CONVERT_UINT64_TO_JLONG(tmpStartTime
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(tmpStartTime
.tv_nsec
);
262 (*env
)->CallVoidMethod(env
, jstart_time
, startAccessFunction
, startTime
);
264 jclass endAccessClass
= (*env
)->GetObjectClass(env
, jend_time
);
265 jmethodID endAccessFunction
= (*env
)->GetMethodID(env
, endAccessClass
, "setTimeFromC", "(J)V");
266 jlong endTime
= (CONVERT_UINT64_TO_JLONG(tmpEndTime
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(tmpEndTime
.tv_nsec
);
267 (*env
)->CallVoidMethod(env
, jend_time
, endAccessFunction
, endTime
);
270 // Function to print the content of a trace
271 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1printTrace(JNIEnv
* env
, jobject jobj
, jlong trace_ptr
) {
273 LttTrace
* newPtr
= (LttTrace
*)CONVERT_JLONG_TO_PTR(trace_ptr
);
275 printf("pathname : %s\n" ,g_quark_to_string(newPtr
->pathname
) );
276 printf("num_cpu : %u\n" ,(unsigned int)(newPtr
->num_cpu
) );
277 printf("arch_type : %u\n" ,(unsigned int)(newPtr
->arch_type
) );
278 printf("arch_variant : %u\n" ,(unsigned int)(newPtr
->arch_variant
) );
279 printf("arch_size : %u\n" ,(unsigned short)(newPtr
->arch_size
) );
280 printf("ltt_major_version : %u\n" ,(unsigned short)(newPtr
->ltt_major_version
) );
281 printf("ltt_minor_version : %u\n" ,(unsigned short)(newPtr
->ltt_minor_version
) );
282 printf("flight_recorder : %u\n" ,(unsigned short)(newPtr
->flight_recorder
) );
283 printf("freq_scale : %u\n" ,(unsigned int)(newPtr
->freq_scale
) );
284 printf("start_freq : %lu\n" ,(long unsigned int)(newPtr
->start_freq
) );
285 printf("start_tsc : %lu\n" ,(long unsigned int)(newPtr
->start_tsc
) );
286 printf("start_monotonic : %lu\n" ,(long unsigned int)(newPtr
->start_monotonic
) );
287 printf("start_time ptr : %p\n" ,&newPtr
->start_time
);
288 printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr
->start_time
.tv_sec
) );
289 printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr
->start_time
.tv_nsec
) );
290 printf("start_time_from_tsc ptr : %p\n" ,&newPtr
->start_time_from_tsc
);
291 printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr
->start_time_from_tsc
.tv_sec
) );
292 printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr
->start_time_from_tsc
.tv_nsec
) );
293 printf("tracefiles ptr : %p\n" ,newPtr
->tracefiles
);
302 // ### TRACEFILE methods ###
306 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsCpuOnline(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
307 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
309 return (jboolean
)newPtr
->cpu_online
;
313 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilepath(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
314 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
316 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->long_name
) );
320 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilename(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
321 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
323 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
) );
327 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCpuNumber(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
328 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
330 return (jlong
)newPtr
->cpu_num
;
334 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTid(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
335 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
337 return (jlong
)newPtr
->tid
;
341 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getPgid(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
342 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
344 return (jlong
)newPtr
->pgid
;
348 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCreation(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
349 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
351 return CONVERT_UINT64_TO_JLONG(newPtr
->creation
);
355 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracePtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
356 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
358 return CONVERT_PTR_TO_JLONG(newPtr
->trace
);
362 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getMarkerDataPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
363 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
365 return CONVERT_PTR_TO_JLONG(newPtr
->mdata
);
369 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCFileDescriptor(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
370 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
372 return (jint
)newPtr
->fd
;
376 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getFileSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
377 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
379 return CONVERT_UINT64_TO_JLONG(newPtr
->file_size
);
383 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBlockNumber(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
384 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
386 return (jlong
)newPtr
->num_blocks
;
390 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsBytesOrderReversed(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
391 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
393 return (jboolean
)newPtr
->reverse_bo
;
396 // Get of float_word_order
397 JNIEXPORT jboolean JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsFloatWordOrdered(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
398 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
400 return (jboolean
)newPtr
->float_word_order
;
404 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAlignement(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
405 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
407 return CONVERT_UINT64_TO_JLONG(newPtr
->alignment
);
410 // Get of buffer_header_size
411 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferHeaderSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
412 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
414 return CONVERT_UINT64_TO_JLONG(newPtr
->buffer_header_size
);
418 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfCurrentTimestampCounter(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
419 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
421 return (jint
)newPtr
->tscbits
;
425 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
426 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
428 return (jint
)newPtr
->eventbits
;
432 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMask(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
433 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
435 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc_mask
);
438 // Get of tsc_mask_next_bit
439 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMaskNextBit(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
440 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
442 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc_mask_next_bit
);
445 // Get of events_lost
446 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventsLost(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
447 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
449 return (jlong
)newPtr
->events_lost
;
452 // Get of subbuf_corrupt
453 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getSubBufferCorrupt(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
454 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
456 return (jlong
)newPtr
->subbuf_corrupt
;
460 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
461 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
463 return CONVERT_PTR_TO_JLONG(&newPtr
->event
);
467 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferPtr(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
468 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
470 return CONVERT_PTR_TO_JLONG(&newPtr
->buffer
);
473 // Get of buffer size
474 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferSize(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
475 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
477 return (jlong
)newPtr
->buffer
.size
;
481 // g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers
482 void g_hash_table_foreach_addMarkersOfTracefile(gpointer key
, gpointer data
, gpointer user_data
) {
483 struct addMarkersArgs
* args
= (struct addMarkersArgs
*)user_data
;
484 struct java_calling_data
* jargs
= (struct java_calling_data
*)args
->java_args
;
486 jclass accessClass
= (*jargs
->env
)->GetObjectClass(jargs
->env
, jargs
->jobj
);
487 jmethodID accessFunction
= (*jargs
->env
)->GetMethodID(jargs
->env
, accessClass
, "addMarkersFromC", "(IJ)V");
489 unsigned long marker_id
= (unsigned long)data
;
491 // The hash table store an ID... we will use the ID to access the array.
492 GArray
* marker
= args
->mdata
->markers
;
493 struct marker_info
* newPtr
= &g_array_index(marker
, struct marker_info
, marker_id
);
495 (*jargs
->env
)->CallVoidMethod(jargs
->env
, jargs
->jobj
, accessFunction
, marker_id
, CONVERT_PTR_TO_JLONG(newPtr
) );
498 // Function to fill up the java map with the event type found in tracefile (the name)
499 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1feedAllMarkers(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
500 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
503 // Find a better way! This is ugly!
504 struct java_calling_data java_args
= { env
, jobj
};
505 struct addMarkersArgs args
= { &java_args
, newPtr
->mdata
};
507 g_hash_table_foreach( newPtr
->mdata
->markers_hash
, &g_hash_table_foreach_addMarkersOfTracefile
, &args
);
511 // Function to print the content of a tracefile
512 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1printTracefile(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
514 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
515 printf("cpu_online : %i\n" ,(int)newPtr
->cpu_online
);
516 printf("long_name : %s\n" ,g_quark_to_string(newPtr
->long_name
));
517 printf("name : %s\n" ,g_quark_to_string(newPtr
->name
));
518 printf("cpu_num : %u\n" ,(unsigned int)(newPtr
->cpu_num
));
519 printf("tid : %u\n" ,(unsigned int)(newPtr
->tid
));
520 printf("pgid : %u\n" ,(unsigned int)(newPtr
->pgid
));
521 printf("creation : %lu\n" ,(long unsigned int)(newPtr
->creation
));
522 printf("trace ptr : %p\n" ,newPtr
->trace
);
523 printf("marker ptr : %p\n" ,newPtr
->mdata
);
524 printf("fd : %i\n" ,(int)(newPtr
->fd
));
525 printf("file_size : %u\n" ,(unsigned int)(newPtr
->file_size
));
526 printf("num_blocks : %u\n" ,(unsigned int)(newPtr
->num_blocks
));
527 printf("reverse_bo : %i\n" ,(int)newPtr
->reverse_bo
);
528 printf("float_word_order : %i\n" ,(int)newPtr
->float_word_order
);
529 printf("alignment : %i\n" ,(int)newPtr
->alignment
);
530 printf("buffer_header_size : %i\n" ,(int)newPtr
->buffer_header_size
);
531 printf("tscbits : %u\n" ,(unsigned short)newPtr
->tscbits
);
532 printf("eventbits : %u\n" ,(unsigned short)newPtr
->eventbits
);
533 printf("tsc_mask : %lu\n" ,(long unsigned int)newPtr
->tsc_mask
);
534 printf("tsc_mask_next_bit : %lu\n" ,(long unsigned int)newPtr
->tsc_mask_next_bit
);
535 printf("events_lost : %u\n" ,(unsigned int)newPtr
->events_lost
);
536 printf("subbuf_corrupt : %u\n" ,(unsigned int)newPtr
->subbuf_corrupt
);
537 printf("event ptr : %p\n" ,&newPtr
->event
);
538 printf("buffer ptr : %p\n" ,&newPtr
->buffer
);
546 // ### EVENT methods ###
549 // Method to get the read status
550 // This method will read the next event and then seek back its initial position
551 // Lttv assume that every tracefile have at least 1 event, but we have not guarantee after this one.
552 // We will read the next event and return the status of that read
553 // We will then seek back to our initial position
554 // Note : this method is expensive and should not be used too often
555 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1positionToFirstEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
556 LttTracefile
* tracefilePtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
558 // Ask ltt to read the next events on the given tracefiles
559 // Returned value can be :
560 // 0 if everything went fine (EOK)
561 // ERANGE = 34 out of range, back to last event (might be system dependent?)
562 // EPERM = 1 error while reading (might be system dependent?)
565 // Seek to the start time... this will also read the first event, as we want.
566 int returnedValue
= ltt_tracefile_seek_time(tracefilePtr
, ((struct LttTrace
)*(tracefilePtr
->trace
)).start_time_from_tsc
);
568 return (jint
)returnedValue
;
571 // Method to read next event
572 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1readNextEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
) {
573 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
575 // Ask ltt to read the next events on the given tracefiles
576 // Returned value can be :
577 // 0 if everything went fine (EOK)
578 // ERANGE = 34 out of range, back to last event (might be system dependent?)
579 // EPERM = 1 error while reading (might be system dependent?)
583 // This might fail on the FIRST event, as the timestamp before the first read is uninitialized
584 // However, LTT make the assumption that all tracefile have AT LEAST one event, so we got to run with it
586 // Save "last time" before moving, to be able to get back if needed
587 LttTime lastTime
= newPtr
->event
.event_time
;
589 int returnedValue
= ltt_tracefile_read(newPtr
);
591 // We need to get back to previous after an error to keep a sane state
592 if ( returnedValue
!= 0 ) {
593 ltt_tracefile_seek_time(newPtr
, lastTime
);
596 return (jint
)returnedValue
;
599 // Method to seek to a certain event
600 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1seekEvent(JNIEnv
* env
, jobject jobj
, jlong tracefile_ptr
, jobject time_jobj
) {
601 LttTracefile
* newPtr
= (LttTracefile
*)CONVERT_JLONG_TO_PTR(tracefile_ptr
);
603 guint64 fullTime
= 0;
605 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
606 jmethodID getTimeFunction
= (*env
)->GetMethodID(env
, accessClass
, "getTime", "()J");
607 fullTime
= (*env
)->CallLongMethod(env
, time_jobj
, getTimeFunction
);
610 // Conversion from jlong -> C long seems to be particularly sloppy
611 // Depending how and where (inlined a function or as a single operation) we do this, we might end up with wrong number
612 // The following asignation of guint64 seems to work well.
613 // MAKE SURE TO PERFORM SEVERAL TESTS IF YOU CHANGE THIS.
614 guint64 seconds
= fullTime
/BILLION
;
615 guint64 nanoSeconds
= fullTime
%BILLION
;
617 LttTime seekTime
= { (unsigned long)seconds
, (unsigned long)nanoSeconds
};
619 // Ask ltt to read the next events on the given tracefiles
620 // Returned value can be :
621 // 0 if everything went fine (EOK)
622 // ERANGE = 34 out of range, back to last event (might be system dependent?)
623 // EPERM = 1 error while reading (might be system dependent?)
625 int returnedValue
= ltt_tracefile_seek_time(newPtr
, seekTime
);
626 return (jint
)returnedValue
;
630 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTracefilePtr(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
631 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
633 return CONVERT_PTR_TO_JLONG(newPtr
->tracefile
);
637 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getBlock(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
638 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
640 return (jlong
)newPtr
->block
;
644 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOffset(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
645 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
647 return (jlong
)newPtr
->offset
;
651 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCurrentTimestampCounter(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
652 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
654 return CONVERT_UINT64_TO_JLONG(newPtr
->tsc
);
658 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTimestamp(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
659 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
661 return (jlong
)newPtr
->timestamp
;
665 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventMarkerId(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
666 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
668 return (jint
)newPtr
->event_id
;
671 // Get time in nanoseconds
672 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getNanosencondsTime(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
673 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
675 return (CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_nsec
);
678 // Fill event_time into an object
679 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1feedEventTime(JNIEnv
* env
, jobject jobj
, jlong event_ptr
, jobject time_jobj
) {
680 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
682 jclass accessClass
= (*env
)->GetObjectClass(env
, time_jobj
);
683 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "setTimeFromC", "(J)V");
685 jlong fullTime
= (CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_sec
)*BILLION
) + CONVERT_UINT64_TO_JLONG(newPtr
->event_time
.tv_nsec
);
687 (*env
)->CallVoidMethod(env
, time_jobj
, accessFunction
, fullTime
);
690 // Access method to the data
691 // The data are in "byte" form
692 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getDataContent(JNIEnv
* env
, jobject jobj
, jlong event_ptr
, jlong data_size
, jbyteArray dataArray
) {
693 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
695 (*env
)->SetByteArrayRegion(env
, dataArray
, 0, (jsize
)data_size
, newPtr
->data
);
699 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventDataSize(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
700 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
702 return (jlong
)newPtr
->data_size
;
706 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventSize(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
707 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
709 return (jlong
)newPtr
->event_size
;
713 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCount(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
714 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
716 return (jint
)newPtr
->count
;
719 // Get of overflow_nsec
720 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOverflowNanoSeconds(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
721 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
723 return CONVERT_UINT64_TO_JLONG(newPtr
->overflow_nsec
);
727 // Function to print the content of a event
728 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1printEvent(JNIEnv
* env
, jobject jobj
, jlong event_ptr
) {
729 LttEvent
* newPtr
= (LttEvent
*)CONVERT_JLONG_TO_PTR(event_ptr
);
731 printf("tracefile : %p\n" ,(void*)newPtr
->tracefile
);
732 printf("block : %u\n" ,(unsigned int)newPtr
->block
);
733 printf("offset : %u\n" ,(unsigned int)newPtr
->offset
);
734 printf("tsc : %lu\n" ,(long unsigned int)newPtr
->tsc
);
735 printf("timestamp : %u\n" ,(unsigned int)newPtr
->timestamp
);
736 printf("event_id : %u\n" ,(unsigned short)newPtr
->event_id
);
737 printf("event_time : %p\n" ,(void*) &newPtr
->event_time
);
738 printf(" sec : %lu\n" ,(long unsigned int)(newPtr
->event_time
.tv_sec
) );
739 printf(" nsec : %lu\n" ,(long unsigned int)(newPtr
->event_time
.tv_nsec
) );
740 printf("data : %p\n" ,(void*) newPtr
->data
);
741 printf("data_size : %u\n" ,(unsigned int)newPtr
->data_size
);
742 printf("event_size : %u\n" ,(unsigned int)newPtr
->event_size
);
743 printf("count : %d\n" ,(int)newPtr
->count
);
744 printf("overflow_nsec : %ld\n" ,(long)newPtr
->overflow_nsec
);
751 // ### MARKER method ###
755 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getName(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
756 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
758 return (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
));
762 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getFormatOverview(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
763 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
765 return (*env
)->NewStringUTF(env
, newPtr
->format
);
769 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
770 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
772 return (jlong
)newPtr
->size
;
775 // Method to get all markerField pointers
776 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAllMarkerFields(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
777 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
779 jclass accessClass
= (*env
)->GetObjectClass(env
, jobj
);
780 jmethodID accessFunction
= (*env
)->GetMethodID(env
, accessClass
, "addMarkerFieldFromC", "(Ljava/lang/String;J)V");
782 GArray
* field_array
= (GArray
*)newPtr
->fields
;
783 struct marker_field
* field
;
784 jlong marker_field_ptr
;
787 for (i
=0; i
<field_array
->len
; i
++) {
788 field
= &g_array_index(field_array
, struct marker_field
, i
);
790 marker_field_ptr
= CONVERT_PTR_TO_JLONG(field
);
792 (*env
)->CallVoidMethod(env
, jobj
, accessFunction
, (*env
)->NewStringUTF(env
, g_quark_to_string(field
->name
) ), marker_field_ptr
);
798 // Get of largest_align
799 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLargestAlign(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
->largest_align
;
806 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getIntSize(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
->int_size
;
813 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLongSize(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
->long_size
;
819 // Get of pointer_size
820 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getPointerSize(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 (jshort
)newPtr
->pointer_size
;
826 // Get of size_t_size
827 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize_1tSize(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
828 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
830 return (jshort
)newPtr
->size_t_size
;
834 JNIEXPORT jshort JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAlignement(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
835 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
837 return (jshort
)newPtr
->alignment
;
841 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getNextMarkerPtr(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
842 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
844 return CONVERT_PTR_TO_JLONG(newPtr
->next
);
848 // Function to print the content of a marker
849 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1printMarker(JNIEnv
* env
, jobject jobj
, jlong marker_info_ptr
) {
850 struct marker_info
* newPtr
= (struct marker_info
*)CONVERT_JLONG_TO_PTR(marker_info_ptr
);
852 printf("name : %s\n" ,g_quark_to_string(newPtr
->name
) );
853 printf("format : %s\n" ,newPtr
->format
);
854 printf("size : %li\n" ,(long int)newPtr
->size
);
855 printf("largest_align : %u\n" ,(unsigned short)newPtr
->largest_align
);
856 printf("fields : %p\n" ,newPtr
->fields
);
857 printf("int_size : %u\n" ,(unsigned short)newPtr
->int_size
);
858 printf("long_size : %u\n" ,(unsigned short)newPtr
->long_size
);
859 printf("pointer_size : %u\n" ,(unsigned short)newPtr
->pointer_size
);
860 printf("size_t_size : %u\n" ,(unsigned short)newPtr
->size_t_size
);
861 printf("alignment : %u\n" ,(unsigned short)newPtr
->alignment
);
862 printf("next : %p\n" ,newPtr
->next
);
871 // ### MARKERFIELD Method
875 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getField(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 (*env
)->NewStringUTF(env
, g_quark_to_string(newPtr
->name
));
882 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getType(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 (jint
)newPtr
->type
;
889 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getOffset(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
->offset
);
896 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getSize(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 CONVERT_UINT64_TO_JLONG(newPtr
->size
);
903 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAlignment(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 CONVERT_UINT64_TO_JLONG(newPtr
->alignment
);
910 JNIEXPORT jlong JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAttributes(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
911 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
913 return CONVERT_UINT64_TO_JLONG(newPtr
->attributes
);
916 // Get of static_offset
917 JNIEXPORT jint JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getStatic_1offset(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
918 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
920 return (jint
)newPtr
->static_offset
;
924 JNIEXPORT jstring JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getFormat(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
925 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
927 return (*env
)->NewStringUTF(env
, newPtr
->fmt
->str
);
930 // Function to print the content of a marker_field
931 JNIEXPORT
void JNICALL
Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1printMarkerField(JNIEnv
* env
, jobject jobj
, jlong marker_field_ptr
) {
932 struct marker_field
* newPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
934 printf("name : %s\n" ,g_quark_to_string(newPtr
->name
) );
935 printf("type : %i\n" ,(int)newPtr
->type
);
936 printf("offset : %lu\n" ,(long unsigned int)newPtr
->offset
);
937 printf("size : %lu\n" ,(long unsigned int)newPtr
->size
);
938 printf("alignment : %lu\n" ,(long unsigned int)newPtr
->alignment
);
939 printf("attributes : %lu\n" ,(long unsigned int)newPtr
->attributes
);
940 printf("static_offset : %i\n" ,(int)newPtr
->static_offset
);
941 printf("fmt : %s\n" ,newPtr
->fmt
->str
);
952 // This function will do the actual parsing
953 // It will then call java to assign the parsed data to the object "javaObj"
954 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
) {
955 LttEvent newEventPtr
= *(LttEvent
*)(CONVERT_JLONG_TO_PTR(event_ptr
));
956 struct marker_field
* newMarkerFieldPtr
= (struct marker_field
*)CONVERT_JLONG_TO_PTR(marker_field_ptr
);
958 jmethodID accessFunction
= NULL
;
961 // There is a very limited number of type in LTT
962 // We will switch on the type for this field and act accordingly
963 // NOTE : We will save all integer into "long" type, as there is no signed/unsigned in java
966 // It seems the marker_field->type is absolutely not consistent, especially about pointer!
967 // Sometime pointer are saved in String, sometime as Int, sometime as pointer...
968 // We will do an extra check on type "LTT_TYPE_UNSIGNED_INT" to check if the marker_field->format is hint of a pointer
969 switch ( newMarkerFieldPtr
->type
) {
970 case LTT_TYPE_SIGNED_INT
:
971 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongToParsingFromC", "(Ljava/lang/Object;J)V");
972 (*env
)->CallStaticVoidMethod( env
,
976 ltt_event_get_long_int(&newEventPtr
, newMarkerFieldPtr
)
981 case LTT_TYPE_UNSIGNED_INT
:
982 // If the format seems to be a pointer, add it as a pointer
983 if ( (strncmp(newMarkerFieldPtr
->fmt
->str
, "0x%llX", newMarkerFieldPtr
->fmt
->len
) == 0 ) || (strncmp(newMarkerFieldPtr
->fmt
->str
, "%llX", newMarkerFieldPtr
->fmt
->len
) == 0 ) ) {
985 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongPointerToParsingFromC", "(Ljava/lang/Object;J)V");
987 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addIntPointerToParsingFromC", "(Ljava/lang/Object;J)V");
989 (*env
)->CallStaticVoidMethod( env
,
993 CONVERT_PTR_TO_JLONG(ltt_event_get_long_unsigned(&newEventPtr
, newMarkerFieldPtr
) )
996 // Otherwise, add it as a number
998 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongToParsingFromC", "(Ljava/lang/Object;J)V");
999 (*env
)->CallStaticVoidMethod( env
,
1003 ltt_event_get_long_unsigned(&newEventPtr
, newMarkerFieldPtr
)
1009 case LTT_TYPE_POINTER
:
1010 #if __WORDSIZE == 64
1011 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addLongPointerToParsingFromC", "(Ljava/lang/Object;J)V");
1013 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addIntPointerToParsingFromC", "(Ljava/lang/Object;J)V");
1015 (*env
)->CallStaticVoidMethod( env
,
1019 CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR
*)(newEventPtr
.data
+ newMarkerFieldPtr
->offset
))
1023 case LTT_TYPE_STRING
:
1024 accessFunction
= (*env
)->GetStaticMethodID(env
, accessClass
, "addStringToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;)V");
1025 (*env
)->CallStaticVoidMethod( env
,
1029 (*env
)->NewStringUTF(env
, ltt_event_get_string(&newEventPtr
, newMarkerFieldPtr
) )
1033 case LTT_TYPE_COMPACT
:
1034 case LTT_TYPE_NONE
:
1036 printf("Warning : Unrecognized format type! Skipping! (Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1getParsedData)");