Added back JNI.
authorWilliam Bourque <william@ewilbou.dyn.lmc.ericsson.se>
Thu, 17 Sep 2009 16:02:04 +0000 (12:02 -0400)
committerWilliam Bourque <william@ewilbou.dyn.lmc.ericsson.se>
Thu, 17 Sep 2009 16:02:04 +0000 (12:02 -0400)
ltt/jni_interface.c [new file with mode: 0644]

diff --git a/ltt/jni_interface.c b/ltt/jni_interface.c
new file mode 100644 (file)
index 0000000..e2306ff
--- /dev/null
@@ -0,0 +1,1033 @@
+
+// !! Important to get consistent size_t type
+#define _FILE_OFFSET_BITS 64
+
+// Set to 1 to use "int32" instead of "long64" to store pointer to java
+#define ARCHITECTURE_IS_64BITS 0
+
+#if ARCHITECTURE_IS_64BITS == 0
+// Conversion to int first to save warning
+#define CONVERT_JLONG_TO_PTR(p) (int)(p)
+#define CONVERT_PTR_TO_JLONG(p) (jlong)(int)(p)
+// Define the "gint" type we should use for pointer.
+#define GINT_TYPE_FOR_PTR gint64
+#else
+#define CONVERT_JLONG_TO_PTR(p) (p)
+// Define the "gint" type we should use for pointer.
+#define GINT_TYPE_FOR_PTR gint32
+#endif
+
+
+// *** FIXME ***
+// *** HACK ***
+// We've got hell of a problem passing "unsigned int64" to java, as there is no equivalent type
+//   The closer we can use is "long" which is signed, so only 32 (or 63?) bits are valid
+//   Plus, even if we are within the "32 bits" capacity, java sometime screw itself trying to convert "unsigned 64 -> signed 64"
+//   This happen especially often when RETURNING a jlong
+//   So when returning a jlong, we should convert it like this : "unsigned 64"->"signed 64"->jlong
+#define CONVERT_UINT64_TO_JLONG(n) (jlong)(gint64)(n)
+#define CONVERT_INT64_TO_JLONG(n) (jlong)(gint64)(n)
+
+// To ease calcul involving nano
+#define BILLION 1000000000
+
+
+#include <jni.h>
+
+#include <ltt/trace.h>
+#include <ltt/time.h>
+#include <ltt/marker.h>
+#include <glib.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+// Structure to encapsulate java_data to pass as arguments
+struct java_calling_data
+{
+    JNIEnv* env;
+    jobject jobj;
+};
+
+// *** TODO **
+// Find a better way! This is ugly!
+struct addMarkersArgs
+{ 
+    struct java_calling_data* java_args;
+    struct marker_data* mdata;
+};
+
+
+// ### COMMON Methods ###
+// #
+// JNI method to call printf from the java side
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_Jni_1C_1Common_ltt_1printC(JNIEnv* env, jobject jobj, jstring new_string)
+{
+    printf( (*env)->GetStringUTFChars(env, new_string, 0) );
+}
+
+// #
+// ####
+
+
+
+// ### TRACE methods ###
+// #
+// JNI mapping of   < LttTrace *ltt_trace_open(const gchar *pathname)  > (trace.h)
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1openTrace(JNIEnv* env, jobject jobj, jstring pathname) {
+        const char* c_pathname = (*env)->GetStringUTFChars(env, pathname, 0);
+        LttTrace* newPtr = ltt_trace_open( c_pathname );
+        
+        (*env)->ReleaseStringUTFChars(env, pathname, c_pathname);
+        
+        return CONVERT_PTR_TO_JLONG(newPtr); 
+}
+
+// JNI mapping of  < void ltt_trace_close(LttTrace *t)  > (trace.h)
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1closeTrace(JNIEnv* env, jobject jobj, jlong trace_ptr){
+        
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        ltt_trace_close(newPtr);
+}
+
+// Get the tracepath
+JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getTracepath(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (*env)->NewStringUTF(env, g_quark_to_string( newPtr->pathname) );
+}
+
+
+// Get of num_cpu
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getCpuNumber(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jint)newPtr->num_cpu;
+}
+
+// Get of arch_type
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchType(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jlong)newPtr->arch_type;
+}
+
+// Get of arch_variant 
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchVariant(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jlong)newPtr->arch_variant;
+}
+
+// Get of arch_size
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchSize(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jshort)newPtr->arch_size;
+}
+
+// Get of ltt_major_version
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMajorVersion(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jshort)newPtr->ltt_major_version;
+}
+
+// Get of ltt_minor_version
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMinorVersion(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jshort)newPtr->ltt_minor_version;
+}
+
+// Get of flight_recorder
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFlightRecorder(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jshort)newPtr->flight_recorder;
+}
+
+// Get of freq_scale
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFreqScale(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return (jlong)newPtr->freq_scale;
+}
+
+// Get of start_freq
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartFreq(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->start_freq);
+}
+
+// Get of start_tsc
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartTimestampCurrentCounter(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->start_tsc);
+}
+
+// Get of start_monotonic
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartMonotonic(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->start_monotonic);
+}
+
+// Access to start_time
+// Note that we are calling the setTimeFromC function in Jaf_Time from here
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTime(JNIEnv* env, jobject jobj, jlong trace_ptr, jobject time_jobj) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
+        jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTimeFromC", "(J)V");
+        
+        jlong fullTime = (CONVERT_UINT64_TO_JLONG(newPtr->start_time.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(newPtr->start_time.tv_nsec);
+        
+        (*env)->CallVoidMethod(env, time_jobj, accessFunction, fullTime );
+}
+
+// Access to start_time_from_tsc
+// Note that we are calling the setTimeFromC function in Jaf_Time from here
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTimeFromTimestampCurrentCounter(JNIEnv* env, jobject jobj, jlong trace_ptr, jobject time_jobj) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
+        jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTimeFromC", "(J)V");
+        
+        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);
+        
+        (*env)->CallVoidMethod(env, time_jobj, accessFunction, fullTime);
+}
+
+
+// g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles
+void g_datalist_foreach_addTracefilesOfTrace(GQuark name, gpointer data, gpointer user_data) {
+        struct java_calling_data* args = (struct java_calling_data*)user_data;
+        
+        jclass accessClass = (*args->env)->GetObjectClass(args->env, args->jobj);
+        jmethodID accessFunction = (*args->env)->GetMethodID(args->env, accessClass, "addTracefileFromC", "(Ljava/lang/String;J)V");
+        
+        GArray* group = (GArray*)data;
+        LttTracefile* tracefile;
+        jlong newPtr;
+        
+        unsigned int i;
+        for (i=0; i<group->len; i++) {
+                tracefile = &g_array_index(group, LttTracefile, i);
+                
+                newPtr = CONVERT_PTR_TO_JLONG(tracefile);
+                
+                (*args->env)->CallVoidMethod(args->env, args->jobj, accessFunction, (*args->env)->NewStringUTF(args->env, g_quark_to_string(tracefile->name) ), newPtr );
+        }
+}
+
+// Function to fill up the java map with the event type found in tracefile (the name)
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        struct java_calling_data args = { env, jobj };
+        
+        g_datalist_foreach(&newPtr->tracefiles, &g_datalist_foreach_addTracefilesOfTrace, &args);
+}
+
+
+// Function to print the content of a tracefile
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1printTrace(JNIEnv* env, jobject jobj, jlong trace_ptr) {
+        
+        LttTrace* newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
+        
+        printf("pathname                : %s\n"     ,g_quark_to_string(newPtr->pathname) );
+        printf("num_cpu                 : %u\n"     ,(unsigned int)(newPtr->num_cpu) );
+        printf("arch_type               : %u\n"     ,(unsigned int)(newPtr->arch_type) );
+        printf("arch_variant            : %u\n"     ,(unsigned int)(newPtr->arch_variant) );
+        printf("arch_size               : %u\n"     ,(unsigned short)(newPtr->arch_size) );
+        printf("ltt_major_version       : %u\n"     ,(unsigned short)(newPtr->ltt_major_version) );
+        printf("ltt_minor_version       : %u\n"     ,(unsigned short)(newPtr->ltt_minor_version) );
+        printf("flight_recorder         : %u\n"     ,(unsigned short)(newPtr->flight_recorder) );
+        printf("freq_scale              : %u\n"     ,(unsigned int)(newPtr->freq_scale) );
+        printf("start_freq              : %u\n"     ,(unsigned long)(newPtr->start_freq) );
+        printf("start_tsc               : %u\n"     ,(unsigned long)(newPtr->start_tsc) );
+        printf("start_monotonic         : %u\n"     ,(unsigned long)(newPtr->start_monotonic) );
+        printf("start_time ptr          : 0x%x\n"   ,&newPtr->start_time);
+        printf("   tv_sec               : %u\n"     ,(unsigned long)(newPtr->start_time.tv_sec) );
+        printf("   tv_nsec              : %u\n"     ,(unsigned long)(newPtr->start_time.tv_nsec) );
+        printf("start_time_from_tsc ptr : 0x%x\n"   ,&newPtr->start_time_from_tsc);
+        printf("   tv_sec               : %u\n"     ,(unsigned long)(newPtr->start_time_from_tsc.tv_sec) );
+        printf("   tv_nsec              : %u\n"     ,(unsigned long)(newPtr->start_time_from_tsc.tv_nsec) );
+        printf("tracefiles ptr          : 0x%x\n"   ,newPtr->tracefiles);
+        printf("\n");
+}
+// #
+// ###
+
+
+
+
+// ### TRACEFILE methods ###
+// #
+// Get of cpu_online
+JNIEXPORT jboolean JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsCpuOnline(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jboolean)newPtr->cpu_online;
+}
+
+// Get of long_name
+JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilepath(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->long_name) );
+}
+
+// Get of name
+JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilename(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->name) );
+}
+
+// Get of cpu_num
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCpuNumber(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jlong)newPtr->cpu_num;
+}
+
+// Get of tid
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTid(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jlong)newPtr->tid;
+}
+
+// Get of pgid
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getPgid(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jlong)newPtr->pgid;
+}
+
+// Get of creation
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCreation(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->creation);
+}
+
+// Get of trace
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracePtr(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_PTR_TO_JLONG(newPtr->trace);
+}
+
+// Get of mdata
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getMarkerDataPtr(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_PTR_TO_JLONG(newPtr->mdata);
+}
+
+// Get of fd
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCFileDescriptor(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jint)newPtr->fd;
+}
+
+// Get of file_size
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getFileSize(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->file_size);
+}
+
+// Get of num_blocks
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBlockNumber(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jlong)newPtr->num_blocks;
+}
+
+// Get of reverse_bo
+JNIEXPORT jboolean JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsBytesOrderReversed(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jboolean)newPtr->reverse_bo;
+}
+
+// Get of float_word_order
+JNIEXPORT jboolean JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsFloatWordOrdered(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jboolean)newPtr->float_word_order;
+}
+
+// Get of alignment
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAlignement(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->alignment);
+}
+
+// Get of buffer_header_size
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferHeaderSize(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->buffer_header_size);
+}
+
+// Get of tscbits
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfCurrentTimestampCounter(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jint)newPtr->tscbits;
+}
+
+// Get of eventbits
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfEvent(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jint)newPtr->eventbits;
+}
+
+// Get of tsc_mask
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMask(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->tsc_mask);
+}
+
+// Get of tsc_mask_next_bit
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMaskNextBit(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->tsc_mask_next_bit);
+}
+
+// Get of events_lost
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventsLost(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jlong)newPtr->events_lost;
+}
+
+// Get of subbuf_corrupt
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getSubBufferCorrupt(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jlong)newPtr->subbuf_corrupt;
+}
+
+// Get of event
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventPtr(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_PTR_TO_JLONG(&newPtr->event);
+}
+
+// Get of buffer
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferPtr(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return CONVERT_PTR_TO_JLONG(&newPtr->buffer);
+}
+
+// Get of buf_size
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferSize(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        return (jlong)newPtr->buf_size;
+}
+
+
+// g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers
+void g_hash_table_foreach_addMarkersOfTracefile(gpointer key, gpointer data, gpointer user_data) {
+        struct addMarkersArgs* args = (struct addMarkersArgs*)user_data;
+        struct java_calling_data* jargs = (struct java_calling_data*)args->java_args;
+        
+        jclass accessClass = (*jargs->env)->GetObjectClass(jargs->env, jargs->jobj);
+        jmethodID accessFunction = (*jargs->env)->GetMethodID(jargs->env, accessClass, "addMarkersFromC", "(IJ)V");
+        
+        unsigned long marker_id = (unsigned long)data;
+        
+        // The hash table store an ID... we will use the ID to access the array.
+        GArray* marker = args->mdata->markers;
+        struct marker_info* newPtr = &g_array_index(marker, struct marker_info, marker_id);
+        
+        (*jargs->env)->CallVoidMethod(jargs->env, jargs->jobj, accessFunction, marker_id, CONVERT_PTR_TO_JLONG(newPtr) );
+}
+
+// Function to fill up the java map with the event type found in tracefile (the name)
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        // *** TODO ***
+        // Find a better way! This is ugly!
+        struct java_calling_data java_args = { env, jobj };
+        struct addMarkersArgs args = { &java_args, newPtr->mdata };
+        
+        g_hash_table_foreach( newPtr->mdata->markers_hash, &g_hash_table_foreach_addMarkersOfTracefile,  &args);
+}
+
+
+// Function to print the content of a tracefile
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1printTracefile(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        printf("cpu_online              : %i\n"     ,(int)newPtr->cpu_online);
+        printf("long_name               : %s\n"     ,g_quark_to_string(newPtr->long_name));
+        printf("name                    : %s\n"     ,g_quark_to_string(newPtr->name));
+        printf("cpu_num                 : %u\n"     ,(unsigned int)(newPtr->cpu_num));
+        printf("tid                     : %u\n"     ,(unsigned int)(newPtr->tid));
+        printf("pgid                    : %u\n"     ,(unsigned int)(newPtr->pgid));
+        printf("creation                : %u\n"     ,(unsigned long)(newPtr->creation));
+        printf("trace ptr               : 0x%x\n"   ,newPtr->trace);
+        printf("marker ptr              : 0x%x\n"   ,newPtr->mdata);
+        printf("fd                      : %i\n"     ,(int)(newPtr->fd));
+        printf("file_size               : %u\n"     ,(unsigned int)(newPtr->file_size));
+        printf("num_blocks              : %u\n"     ,(unsigned int)(newPtr->num_blocks));
+        printf("reverse_bo              : %i\n"     ,(int)newPtr->reverse_bo);
+        printf("float_word_order        : %i\n"     ,(int)newPtr->float_word_order);
+        printf("alignment               : %i\n"     ,(int)newPtr->alignment);
+        printf("buffer_header_size      : %i\n"     ,(int)newPtr->buffer_header_size);
+        printf("tscbits                 : %u\n"     ,(unsigned short)newPtr->tscbits);
+        printf("eventbits               : %u\n"     ,(unsigned short)newPtr->eventbits);
+        printf("tsc_mask                : %u\n"     ,(unsigned long)newPtr->tsc_mask);
+        printf("tsc_mask_next_bit       : %u\n"     ,(unsigned long)newPtr->tsc_mask_next_bit);
+        printf("events_lost             : %u\n"     ,(unsigned int)newPtr->events_lost);
+        printf("subbuf_corrupt          : %u\n"     ,(unsigned int)newPtr->subbuf_corrupt);
+        printf("event ptr               : 0x%x\n"   ,&newPtr->event);
+        printf("buffer ptr              : 0x%x\n"   ,&newPtr->buffer);
+        printf("buf_size                : %i\n"     ,(unsigned int)newPtr->buf_size);
+        printf("\n");
+}
+// #
+// ###
+
+
+
+// ### EVENT methods ###
+// #
+
+// Method to get the read status
+//    This method will read the next event and then seek back its initial position
+//    Lttv assume that every tracefile have at least 1 event, but we have not guarantee after this one.
+//    We will read the next event and return the status of that read
+//    We will then seek back to our initial position
+//    Note : this method is expensive and should not be used too often
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1positionToFirstEvent(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* tracefilePtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        // Ask ltt to read the next events on the given tracefiles
+        // Returned value can be :  
+        //  0               if everything went fine (EOK)
+        //  ERANGE  = 34    out of range, back to last event (might be system dependent?)
+        //  EPERM   = 1     error while reading              (might be system dependent?)
+        
+        // Get "first time" on the trace before moving, as we will seek back after the read
+        LttTime firstTime = ((struct LttTrace)*(tracefilePtr->trace)).start_time_from_tsc;
+        
+        // *** HACK ***
+        // For invalid events (i.e. empty tracefile) we have to save the "incoherent" timestamp that points BEFORE the first event
+        // Otherwise, we are already Out of Range when we seek back to the first event
+        //
+        // However, if we move to this timestamp for ALL events, we will get a lot of weird inconsistency with valid events
+        // Therefore, we will use two seek time : a "good" and valid one and a "before first event" one
+        LttTime beforeFirstTime = tracefilePtr->event.event_time;
+        
+        int returnedValue = ltt_tracefile_read(tracefilePtr);
+        
+        // Read succeed, move to first events
+        if ( returnedValue == 0 ) {
+                ltt_tracefile_seek_time(tracefilePtr, firstTime);
+        }
+        // Read failed, get back to the "before" time
+        else {
+                ltt_tracefile_seek_time(tracefilePtr, beforeFirstTime);
+        }
+        
+        return (jint)returnedValue;
+}
+
+// Method to read next event
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1readNextEvent(JNIEnv* env, jobject jobj, jlong tracefile_ptr) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        // Ask ltt to read the next events on the given tracefiles
+        // Returned value can be :  
+        //  0               if everything went fine (EOK)
+        //  ERANGE  = 34    out of range, back to last event (might be system dependent?)
+        //  EPERM   = 1     error while reading              (might be system dependent?)
+        
+        
+        // *** FIXME ***
+        // This might fail on the FIRST event, as the timestamp before the first read is uninitialized
+        //    However, LTT make the assumption that all tracefile have AT LEAST one event, so we got to run with it
+        //
+        // Save "last time" before moving, to be able to get back if needed
+        LttTime lastTime = newPtr->event.event_time;
+        
+        int returnedValue = ltt_tracefile_read(newPtr);
+        
+        // According to Ltt documentation, we need to get back to beginning after an error
+        if ( returnedValue != 0 ) {
+                ltt_tracefile_seek_time(newPtr, lastTime);
+        }
+        
+        return (jint)returnedValue;
+}
+
+// Method to seek to a certain event
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1seekEvent(JNIEnv* env, jobject jobj, jlong tracefile_ptr, jobject time_jobj) {
+        LttTracefile* newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
+        
+        guint64 fullTime = 0;
+        
+        jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
+        jmethodID getTimeFunction = (*env)->GetMethodID(env, accessClass, "getTime", "()J");
+        fullTime = (*env)->CallLongMethod(env, time_jobj, getTimeFunction);
+        
+        // *** HACK ***
+        // Conversion from jlong -> C long seems to be particularly sloppy
+        // Depending how and where (inlined a function or as a single operation) we do this, we might end up with wrong number
+        //    The following asignation of guint64 seems to work well.
+        // MAKE SURE TO PERFORM SEVERAL TESTS IF YOU CHANGE THIS.
+        guint64 seconds = fullTime/BILLION;
+        guint64 nanoSeconds = fullTime%BILLION;
+        
+        LttTime seekTime = { (unsigned long)seconds, (unsigned long)nanoSeconds };
+        
+        // Ask ltt to read the next events on the given tracefiles
+        // Returned value can be :  
+        //  0               if everything went fine (EOK)
+        //  ERANGE  = 34    out of range, back to last event (might be system dependent?)
+        //  EPERM   = 1     error while reading              (might be system dependent?)
+        
+        int returnedValue = ltt_tracefile_seek_time(newPtr, seekTime);
+        return (jint)returnedValue;
+}
+
+// Get of tracefile
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTracefilePtr(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return CONVERT_PTR_TO_JLONG(newPtr->tracefile);
+}
+
+// Get of block
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getBlock(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return (jlong)newPtr->block;
+}
+
+// Get of offset
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOffset(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return (jlong)newPtr->offset;
+}
+
+// Get of tsc
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCurrentTimestampCounter(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->tsc);
+}
+
+// Get of timestamp
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTimestamp(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return (jlong)newPtr->timestamp;
+}
+
+// Get of event_id
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventMarkerId(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return (jint)newPtr->event_id;
+}
+
+// Get of event_time
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1feedEventTime(JNIEnv* env, jobject jobj, jlong event_ptr, jobject time_jobj) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
+        jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTimeFromC", "(J)V");
+        
+        jlong fullTime = (CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_nsec);
+        
+        (*env)->CallVoidMethod(env, time_jobj, accessFunction, fullTime);
+}
+
+// Access method to the data
+// The data are in "byte" form
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getDataContent(JNIEnv* env, jobject jobj, jlong event_ptr, jlong data_size, jbyteArray dataArray) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        (*env)->SetByteArrayRegion(env, dataArray, 0, (jsize)data_size, newPtr->data);
+}
+
+// Get of data_size
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventDataSize(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return (jlong)newPtr->data_size;
+}
+
+// Get of event_size
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventSize(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return (jlong)newPtr->event_size;
+}
+
+// Get of count
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCount(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return (jint)newPtr->count;
+}
+
+// Get of overflow_nsec
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOverflowNanoSeconds(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->overflow_nsec);
+}
+
+
+// Function to print the content of a event
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1printEvent(JNIEnv* env, jobject jobj, jlong event_ptr) {
+        LttEvent* newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
+        
+        printf("tracefile               : 0x%x\n",(void*)newPtr->tracefile );
+        printf("block                   : %u\n",  (unsigned int)newPtr->block );
+        printf("offset                  : %u\n",  (unsigned int)newPtr->offset );
+        printf("tsc                     : %u\n",  (unsigned long)newPtr->tsc );
+        printf("timestamp               : %u\n",  (unsigned int)newPtr->timestamp );
+        printf("event_id                : %u\n",  (unsigned short)newPtr->event_id );
+        printf("event_time              : 0x%x\n",(void*) &newPtr->event_time );
+        printf("   sec                  : %u\n",  (unsigned long)(newPtr->event_time.tv_sec) );
+        printf("   nsec                 : %u\n",  (unsigned long)(newPtr->event_time.tv_nsec) );
+        printf("data                    : 0x%x\n",(void*) newPtr->data );
+        printf("data_size               : %u\n",  (unsigned int)newPtr->data_size );
+        printf("event_size              : %u\n",  (unsigned int)newPtr->event_size );
+        printf("count                   : %d\n",  (int)newPtr->count );
+        printf("overflow_nsec           : %d\n",  (long)newPtr->overflow_nsec );
+        printf("\n");
+}
+// #
+// ###
+
+
+// ### MARKER method ###
+// #
+
+// Get of name
+JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getName(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->name));
+}
+
+// Get of format
+JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getFormatOverview(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (*env)->NewStringUTF(env, newPtr->format);
+}
+
+// Get of size
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (jlong)newPtr->size;
+}
+
+// Method to get all markerField pointers
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAllMarkerFields(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        jclass accessClass = (*env)->GetObjectClass(env, jobj);
+        jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "addMarkerFieldFromC", "(Ljava/lang/String;J)V");
+        
+        GArray* field_array = (GArray*)newPtr->fields;
+        struct marker_field* field;
+        jlong marker_field_ptr;
+        
+        unsigned int i;
+        for (i=0; i<field_array->len; i++) {
+                field = &g_array_index(field_array, struct marker_field, i);
+                
+                marker_field_ptr = CONVERT_PTR_TO_JLONG(field);
+                
+                (*env)->CallVoidMethod(env, jobj, accessFunction, (*env)->NewStringUTF(env, g_quark_to_string(field->name) ), marker_field_ptr );
+        }
+}
+
+
+
+// Get of largest_align
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLargestAlign(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (jshort)newPtr->largest_align;
+}
+
+// Get of int_size
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getIntSize(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (jshort)newPtr->int_size;
+}
+
+// Get of long_size
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLongSize(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (jshort)newPtr->long_size;
+}
+
+// Get of pointer_size
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getPointerSize(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (jshort)newPtr->pointer_size;
+}
+
+// Get of size_t_size
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize_1tSize(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (jshort)newPtr->size_t_size;
+}
+
+// Get of alignment
+JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAlignement(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return (jshort)newPtr->alignment;
+}
+
+// Get of next
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getNextMarkerPtr(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        return CONVERT_PTR_TO_JLONG(newPtr->next);
+}
+
+
+// Function to print the content of a marker
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1printMarker(JNIEnv* env, jobject jobj, jlong marker_info_ptr) {
+        struct marker_info* newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
+        
+        printf("name          : %s\n",  g_quark_to_string(newPtr->name) );
+        printf("format        : %s\n",  newPtr->format );
+        printf("size          : %i\n",  (long)newPtr->size );
+        printf("largest_align : %u\n",  (unsigned short)newPtr->largest_align );
+        printf("fields        : 0x%x\n",newPtr->fields );
+        printf("int_size      : %u\n",  (unsigned short)newPtr->int_size );
+        printf("long_size     : %u\n",  (unsigned short)newPtr->long_size );
+        printf("pointer_size  : %u\n",  (unsigned short)newPtr->pointer_size );
+        printf("size_t_size   : %u\n",  (unsigned short)newPtr->size_t_size );
+        printf("alignment     : %u\n",  (unsigned short)newPtr->alignment );
+        printf("next          : 0x%x\n",newPtr->next );
+        printf("\n");
+}
+
+// #
+// ###
+
+
+
+// ### MARKERFIELD Method
+// #
+
+// Get of name
+JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getField(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->name));
+}
+
+// Get of type
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getType(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return (jint)newPtr->type;
+}
+
+// Get of offset
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getOffset(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->offset);
+}
+
+// Get of size
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getSize(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->size);
+}
+
+// Get of alignment
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAlignment(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->alignment);
+}
+
+// Get of attributes
+JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAttributes(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return CONVERT_UINT64_TO_JLONG(newPtr->attributes);
+}
+
+// Get of static_offset
+JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getStatic_1offset(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return (jint)newPtr->static_offset;
+}
+
+// Get of fmt
+JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getFormat(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        return (*env)->NewStringUTF(env, newPtr->fmt->str);
+}
+
+// Function to print the content of a marker_field
+JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1printMarkerField(JNIEnv* env, jobject jobj, jlong marker_field_ptr) {
+        struct marker_field* newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        printf("name          : %s\n",  g_quark_to_string(newPtr->name) );
+        printf("type          : %i\n",  (int)newPtr->type );
+        printf("offset        : %u\n",  (unsigned long)newPtr->offset );
+        printf("size          : %u\n",  (unsigned long)newPtr->size );
+        printf("alignment     : %u\n",  (unsigned long)newPtr->alignment );
+        printf("attributes    : %u\n",  (unsigned long)newPtr->attributes );
+        printf("static_offset : %i\n",  (int)newPtr->static_offset );
+        printf("fmt           : %s\n",  newPtr->fmt );
+        printf("\n");
+}
+
+// #
+// ###
+
+
+// ### PARSER Method
+// #
+
+// This function will do the actual parsing
+//      It will then call java to assign the parsed data to the object "javaObj"
+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) {
+        LttEvent newEventPtr = *(LttEvent*)(CONVERT_JLONG_TO_PTR(event_ptr));
+        struct marker_field* newMarkerFieldPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
+        
+        jmethodID accessFunction = NULL;
+        
+        
+        // There is a very limited number of type in LTT
+        // We will switch on the type for this field and act accordingly
+        //   NOTE : We will save all integer into "long" type, as there is no signed/unsigned in java
+        
+        // *** HACK ***
+        // It seems the marker_field->type is absolutely not consistent, especially about pointer!
+        //    Sometime pointer are saved in String, sometime as Int, sometime as pointer...
+        // We will do an extra check on type "LTT_TYPE_UNSIGNED_INT" to check if the marker_field->format is hint of a pointer
+        switch ( newMarkerFieldPtr->type ) {
+                case LTT_TYPE_SIGNED_INT : 
+                        accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
+                        (*env)->CallStaticVoidMethod(   env, 
+                                                        accessClass, 
+                                                        accessFunction, 
+                                                        javaObj, 
+                                                        (*env)->NewStringUTF(env, g_quark_to_string(newMarkerFieldPtr->name) ), 
+                                                        ltt_event_get_long_int(&newEventPtr, newMarkerFieldPtr), 
+                                                        (*env)->NewStringUTF(env, newMarkerFieldPtr->fmt->str )
+                                                     );
+                        
+                        break;
+                
+                case LTT_TYPE_UNSIGNED_INT :
+                        
+                        // If the format seems to be a pointer, add it as a pointer
+                        if ( (strncmp(newMarkerFieldPtr->fmt->str, "0x%llX", newMarkerFieldPtr->fmt->len) == 0 ) || (strncmp(newMarkerFieldPtr->fmt->str, "%llX", newMarkerFieldPtr->fmt->len) == 0 ) ) {
+                                #if ARCHITECTURE_IS_64BITS == 0
+                                        accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addIntPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
+                                #else
+                                        accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
+                                #endif
+                                (*env)->CallStaticVoidMethod(   env, 
+                                                                accessClass, 
+                                                                accessFunction, 
+                                                                javaObj, 
+                                                                (*env)->NewStringUTF(env, g_quark_to_string(newMarkerFieldPtr->name) ),
+                                                                CONVERT_PTR_TO_JLONG(ltt_event_get_long_unsigned(&newEventPtr, newMarkerFieldPtr) ), 
+                                                                (*env)->NewStringUTF(env, newMarkerFieldPtr->fmt->str )
+                                                             );
+                        }
+                        // Otherwise, add it as a number
+                        else {
+                                accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
+                                (*env)->CallStaticVoidMethod(   env, 
+                                                                accessClass,
+                                                                accessFunction,
+                                                                javaObj,
+                                                                (*env)->NewStringUTF(env, g_quark_to_string(newMarkerFieldPtr->name) ), 
+                                                                ltt_event_get_long_unsigned(&newEventPtr, newMarkerFieldPtr),
+                                                                (*env)->NewStringUTF(env, newMarkerFieldPtr->fmt->str )
+                                                             );
+                        }
+                        
+                        break;
+                        
+                case LTT_TYPE_POINTER :
+                        #if ARCHITECTURE_IS_64BITS == 0
+                                accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addIntPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
+                        #else
+                                accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongPointerToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;J)V");
+                        #endif
+                        (*env)->CallStaticVoidMethod(   env, 
+                                                        accessClass, 
+                                                        accessFunction, 
+                                                        javaObj, 
+                                                        (*env)->NewStringUTF(env, g_quark_to_string(newMarkerFieldPtr->name) ),
+                                                        CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR*)(newEventPtr.data + newMarkerFieldPtr->offset)),
+                                                        (*env)->NewStringUTF(env, newMarkerFieldPtr->fmt->str )
+                                                     );
+                        break;
+                        
+                case LTT_TYPE_STRING :
+                        accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addStringToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V");
+                        (*env)->CallStaticVoidMethod(   env,
+                                                        accessClass,
+                                                        accessFunction,
+                                                        javaObj,
+                                                        (*env)->NewStringUTF(env, g_quark_to_string(newMarkerFieldPtr->name) ),
+                                                        (*env)->NewStringUTF(env, ltt_event_get_string(&newEventPtr, newMarkerFieldPtr) ),
+                                                        (*env)->NewStringUTF(env, newMarkerFieldPtr->fmt->str )
+                                                     );
+                        break;
+                        
+                case LTT_TYPE_COMPACT :
+                case LTT_TYPE_NONE :
+                default :
+                        printf("Warning : Unrecognized format type! Skipping! (Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1fillParseArray)");
+                        break;
+        }
+        
+}
+
+// #
+// ###
This page took 0.034008 seconds and 4 git commands to generate.