X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fjni_interface.c;h=52c9993c5e035f3319a838d858e7f2cab2c8ac6e;hb=7c3c01d14690eee4d3c262f300a888680ae7a053;hp=d4a720732dd5799458f7e6e29b246bea0cef73ef;hpb=1202b93df4b486b0b043708a07dce1931ce4a9b2;p=lttv.git diff --git a/ltt/jni_interface.c b/ltt/jni_interface.c index d4a72073..52c9993c 100644 --- a/ltt/jni_interface.c +++ b/ltt/jni_interface.c @@ -1,3 +1,20 @@ +/* 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 @@ -13,7 +30,7 @@ #include #include #include - +#include /* ***FIXME*** ***HACK*** @@ -71,7 +88,6 @@ struct saveTimeAndTracefile LttTracefile *tracefile; }; - /* ### COMMON Methods ### # @@ -88,6 +104,26 @@ JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_Jni_1C_1Common_ltt_ (*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 ); +} /* # #### */ @@ -106,7 +142,24 @@ JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1open } const char *c_pathname = (*env)->GetStringUTFChars(env, pathname, 0); - LttTrace *newPtr = ltt_trace_open( c_pathname ); + 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); @@ -206,6 +259,14 @@ JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getS 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) { @@ -635,6 +696,9 @@ JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1posit 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); @@ -962,20 +1026,6 @@ JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_ 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); @@ -1010,8 +1060,6 @@ JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_ printf("name : %s\n" ,g_quark_to_string(newPtr->name) ); printf("type : %i\n" ,(int)newPtr->type ); - printf("offset : %lu\n" ,(long unsigned int)newPtr->offset ); - printf("size : %lu\n" ,(long unsigned int)newPtr->size ); 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 ); @@ -1032,6 +1080,7 @@ JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_ 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; @@ -1095,7 +1144,7 @@ JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1getP accessClass, accessFunction, javaObj, - CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR*)(newEventPtr.data + newMarkerFieldPtr->offset)) + CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR*)(newEventPtr.data + newLttFieldPtr->offset)) ); break;