X-Git-Url: http://git.liburcu.org/?p=lttv.git;a=blobdiff_plain;f=ltt%2Fjni_interface.c;fp=ltt%2Fjni_interface.c;h=0000000000000000000000000000000000000000;hp=52c9993c5e035f3319a838d858e7f2cab2c8ac6e;hb=1aab1adee7a14dbb1ae2b296380e1861a91b54e0;hpb=7c3c01d14690eee4d3c262f300a888680ae7a053 diff --git a/ltt/jni_interface.c b/ltt/jni_interface.c deleted file mode 100644 index 52c9993c..00000000 --- a/ltt/jni_interface.c +++ /dev/null @@ -1,1171 +0,0 @@ -/* This file is part of the Linux Trace Toolkit viewer - * Copyright (C) 2010 William Bourque - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License Version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* Important to get consistent size_t type */ -#define _FILE_OFFSET_BITS 64 - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -/* -***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 - - -#if __WORDSIZE == 64 - #define CONVERT_JLONG_TO_PTR(p) (p) - #define CONVERT_PTR_TO_JLONG(p) (jlong)(p) - /* Define the "gint" type we should use for pointer. */ - #define GINT_TYPE_FOR_PTR gint64 -#else - /* 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 gint32 -#endif - -/* Structure to encapsulate java_data to pass as arguments */ -struct java_calling_data -{ - JNIEnv *env; - jobject jobj; -}; - -/* ***TODO*** - All these struct are used to call g_datalist_foreach() - Find a better way! This is ugly! -*/ -struct addMarkersArgs -{ - struct java_calling_data *java_args; - struct marker_data *mdata; -}; - -struct saveTimeArgs -{ - GArray *saveTimeArray; -}; - -struct saveTimeAndTracefile -{ - LttTime time; - LttTracefile *tracefile; -}; - -/* -### COMMON Methods ### -# -Empty method to turn off the debug (debug waste time while printing) */ -void ignore_and_drop_message(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { -} - - -/* 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) { - const char *c_msg = (*env)->GetStringUTFChars(env, new_string, 0); - - printf("%s", c_msg ); - - (*env)->ReleaseStringUTFChars(env, new_string, c_msg); -} - -/* Method to obtain a trace version number from its path */ -JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_factory_JniTraceVersion_ltt_1getTraceVersion(JNIEnv *env, jobject jobj, jstring tracepath) { - - const gchar *c_pathname = (*env)->GetStringUTFChars(env, tracepath, 0); - jint tmpMajorNumber = 0; - jint tmpMinorNumber = 0; - - jclass accessClass = (*env)->GetObjectClass(env, jobj); - jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTraceVersionFromC", "(II)V"); - - struct LttTraceVersion version_number; - - if ( ltt_get_trace_version(c_pathname, &version_number) >= 0) { - tmpMajorNumber = version_number.ltt_major_version; - tmpMinorNumber = version_number.ltt_minor_version; - } - - (*env)->CallVoidMethod(env, jobj, accessFunction, tmpMajorNumber, tmpMinorNumber ); -} -/* -# -#### */ - - -/* -### 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, jboolean show_debug) { - - if ( !show_debug) { - /* Make sure we don't use any debug (speed up the read) */ - g_log_set_handler(NULL, G_LOG_LEVEL_INFO, ignore_and_drop_message, NULL); - g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, ignore_and_drop_message, NULL); - } - - 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 < LttTrace *ltt_trace_open_live(const gchar *pathname) > (trace.h) */ -JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1openTraceLive(JNIEnv *env, jobject jobj, jstring pathname, jboolean show_debug) { - - if ( !show_debug) { - /* Make sure we don't use any debug (speed up the read) */ - g_log_set_handler(NULL, G_LOG_LEVEL_INFO, ignore_and_drop_message, NULL); - g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, ignore_and_drop_message, NULL); - } - - const char *c_pathname = (*env)->GetStringUTFChars(env, pathname, 0); - LttTrace *newPtr = ltt_trace_open_live(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); -} - -/* JNI mapping of < int ltt_trace_update(LttTrace *t) > (trace.h) */ -JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1updateTrace(JNIEnv *env, jobject jobj, jlong trace_ptr){ - - LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr); - - return (jint)ltt_trace_update(newPtr); -} - -/* 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 *tracefile_array = (GArray*)data; - LttTracefile *tracefile; - jlong newPtr; - - unsigned int i; - for (i=0; ilen; i++) { - tracefile = &g_array_index(tracefile_array, 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_1feedAllTracefiles(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); -} - - -/* g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedTracefileTimeRange */ -/* used to save the current timestamp for each tracefile */ -void g_datalist_foreach_saveTracefilesTime(GQuark name, gpointer data, gpointer user_data) { - struct saveTimeArgs *args = (struct saveTimeArgs*)user_data; - - GArray *tracefile_array = (GArray*)data; - GArray *save_array = args->saveTimeArray; - - LttTracefile *tracefile; - struct saveTimeAndTracefile *savedData; - - unsigned int i; - for (i=0; ilen; i++) { - tracefile = &g_array_index(tracefile_array, LttTracefile, i); - - /* Allocate a new LttTime for each tracefile (so it won't change if the tracefile seek somewhere else) */ - savedData = (struct saveTimeAndTracefile*)malloc( sizeof(struct saveTimeAndTracefile) ); - savedData->time.tv_sec = tracefile->event.event_time.tv_sec; - savedData->time.tv_nsec = tracefile->event.event_time.tv_nsec; - savedData->tracefile = tracefile; - /* Append the saved data to the array */ - g_array_append_val(save_array, savedData); - } -} - - -/* Obtain the range of the trace (i.e. "start time" and "end time") */ -/* Note : This function, unlike ltt_trace_time_span_get, is assured to return all tracefiles to their correct position after operation */ -/* NOTE : this method is quite heavy to use!!! */ -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) { - LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr); - - /* Allocate ourself a new array to save the data in */ - GArray *savedDataArray = g_array_new(FALSE, FALSE, sizeof(struct saveTimeAndTracefile*) ); - struct saveTimeArgs args = { savedDataArray }; - /* Call g_datalist_foreach_saveTracefilesTime for each element in the GData to save the time */ - g_datalist_foreach(&newPtr->tracefiles, &g_datalist_foreach_saveTracefilesTime, &args); - - /* Call to ltt_trace_time_span_get to find the current start and end time */ - /* NOTE : This WILL change the current block of the tracefile (i.e. its timestamp) */ - LttTime tmpStartTime = { 0, 0 }; - LttTime tmpEndTime = { 0, 0 }; - ltt_trace_time_span_get(newPtr, &tmpStartTime, &tmpEndTime); - - /* Seek back to the correct time for each tracefile and free the allocated memory */ - struct saveTimeAndTracefile *savedData; - unsigned int i; - for (i=0; ilen; i++) { - savedData = g_array_index(savedDataArray, struct saveTimeAndTracefile*, i); - /* Seek back to the correct time */ - /* Some time will not be consistent here (i.e. unitialized data) */ - /* but the seek should work just fine with that */ - ltt_tracefile_seek_time(savedData->tracefile, savedData->time); - - /* Free the memory allocated for this saveTimeAndTracefile entry */ - free( savedData ); - } - /* Free the memory allocated for the GArray */ - g_array_free(savedDataArray, TRUE); - - /* Send the start and end time back to the java */ - /* We do it last to make sure a problem won't leave us with unfred memory */ - jclass startAccessClass = (*env)->GetObjectClass(env, jstart_time); - jmethodID startAccessFunction = (*env)->GetMethodID(env, startAccessClass, "setTimeFromC", "(J)V"); - jlong startTime = (CONVERT_UINT64_TO_JLONG(tmpStartTime.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(tmpStartTime.tv_nsec); - (*env)->CallVoidMethod(env, jstart_time, startAccessFunction, startTime); - - jclass endAccessClass = (*env)->GetObjectClass(env, jend_time); - jmethodID endAccessFunction = (*env)->GetMethodID(env, endAccessClass, "setTimeFromC", "(J)V"); - jlong endTime = (CONVERT_UINT64_TO_JLONG(tmpEndTime.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(tmpEndTime.tv_nsec); - (*env)->CallVoidMethod(env, jend_time, endAccessFunction, endTime); -} - -/* Function to print the content of a trace */ -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 : %lu\n" ,(long unsigned int)(newPtr->start_freq) ); - printf("start_tsc : %lu\n" ,(long unsigned int)(newPtr->start_tsc) ); - printf("start_monotonic : %lu\n" ,(long unsigned int)(newPtr->start_monotonic) ); - printf("start_time ptr : %p\n" ,&newPtr->start_time); - printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr->start_time.tv_sec) ); - printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr->start_time.tv_nsec) ); - printf("start_time_from_tsc ptr : %p\n" ,&newPtr->start_time_from_tsc); - printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr->start_time_from_tsc.tv_sec) ); - printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr->start_time_from_tsc.tv_nsec) ); - printf("tracefiles ptr : %p\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 buffer 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->buffer.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_1feedAllMarkers(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 : %lu\n" ,(long unsigned int)(newPtr->creation)); - printf("trace ptr : %p\n" ,newPtr->trace); - printf("marker ptr : %p\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 : %lu\n" ,(long unsigned int)newPtr->tsc_mask); - printf("tsc_mask_next_bit : %lu\n" ,(long unsigned int)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 : %p\n" ,&newPtr->event); - printf("buffer ptr : %p\n" ,&newPtr->buffer); - 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?) */ - - if (tracefilePtr->trace == NULL) { - return (jint) EPERM; - } - - /* Seek to the start time... this will also read the first event, as we want. */ - int returnedValue = ltt_tracefile_seek_time(tracefilePtr, ((struct LttTrace)*(tracefilePtr->trace)).start_time_from_tsc); - - 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); - - /* We need to get back to previous after an error to keep a sane state */ - 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 time in nanoseconds */ -JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getNanosencondsTime(JNIEnv *env, jobject jobj, jlong event_ptr) { - LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr); - - return (CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_nsec); -} - -/* Fill event_time into an object */ -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 : %p\n" ,(void*)newPtr->tracefile ); - printf("block : %u\n" ,(unsigned int)newPtr->block ); - printf("offset : %u\n" ,(unsigned int)newPtr->offset ); - printf("tsc : %lu\n" ,(long unsigned int)newPtr->tsc ); - printf("timestamp : %u\n" ,(unsigned int)newPtr->timestamp ); - printf("event_id : %u\n" ,(unsigned short)newPtr->event_id ); - printf("event_time : %p\n" ,(void*) &newPtr->event_time ); - printf(" sec : %lu\n" ,(long unsigned int)(newPtr->event_time.tv_sec) ); - printf(" nsec : %lu\n" ,(long unsigned int)(newPtr->event_time.tv_nsec) ); - printf("data : %p\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 : %ld\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; ilen; 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 : %li\n" ,(long int)newPtr->size ); - printf("largest_align : %u\n" ,(unsigned short)newPtr->largest_align ); - printf("fields : %p\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 : %p\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 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("alignment : %lu\n" ,(long unsigned int)newPtr->alignment ); - printf("attributes : %lu\n" ,(long unsigned int)newPtr->attributes ); - printf("static_offset : %i\n" ,(int)newPtr->static_offset ); - printf("fmt : %s\n" ,newPtr->fmt->str ); - 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); - struct LttField *newLttFieldPtr = ltt_event_field(&newEventPtr, marker_field_get_index(newMarkerFieldPtr)); - - 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;J)V"); - (*env)->CallStaticVoidMethod( env, - accessClass, - accessFunction, - javaObj, - ltt_event_get_long_int(&newEventPtr, newMarkerFieldPtr) - ); - - 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 __WORDSIZE == 64 - accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongPointerToParsingFromC", "(Ljava/lang/Object;J)V"); - #else - accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addIntPointerToParsingFromC", "(Ljava/lang/Object;J)V"); - #endif - (*env)->CallStaticVoidMethod( env, - accessClass, - accessFunction, - javaObj, - CONVERT_PTR_TO_JLONG(ltt_event_get_long_unsigned(&newEventPtr, newMarkerFieldPtr) ) - ); - } - /* Otherwise, add it as a number */ - else { - accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongToParsingFromC", "(Ljava/lang/Object;J)V"); - (*env)->CallStaticVoidMethod( env, - accessClass, - accessFunction, - javaObj, - ltt_event_get_long_unsigned(&newEventPtr, newMarkerFieldPtr) - ); - } - - break; - - case LTT_TYPE_POINTER : - #if __WORDSIZE == 64 - accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongPointerToParsingFromC", "(Ljava/lang/Object;J)V"); - #else - accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addIntPointerToParsingFromC", "(Ljava/lang/Object;J)V"); - #endif - (*env)->CallStaticVoidMethod( env, - accessClass, - accessFunction, - javaObj, - CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR*)(newEventPtr.data + newLttFieldPtr->offset)) - ); - break; - - case LTT_TYPE_STRING : - accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addStringToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;)V"); - (*env)->CallStaticVoidMethod( env, - accessClass, - accessFunction, - javaObj, - (*env)->NewStringUTF(env, ltt_event_get_string(&newEventPtr, newMarkerFieldPtr) ) - ); - break; - - case LTT_TYPE_COMPACT : - case LTT_TYPE_NONE : - default : - printf("Warning : Unrecognized format type! Skipping! (Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1getParsedData)"); - break; - } - -} -/* -# -### */