Removing whitespace/align errors
[lttv.git] / ltt / jni_interface.c
CommitLineData
dd69719a
WB
1/* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2010 William Bourque
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License Version 2.1 as published by the Free Software Foundation.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 02111-1307, USA.
17 */
18
19/* Important to get consistent size_t type */
f22ebb30
WB
20#define _FILE_OFFSET_BITS 64
21
2b752eed 22#include <jni.h>
f22ebb30 23
2b752eed
WB
24#include <ltt/trace.h>
25#include <ltt/time.h>
26#include <ltt/marker.h>
27#include <glib.h>
28
29#include <stdlib.h>
30#include <stdio.h>
31#include <string.h>
32#include <stdint.h>
f22ebb30 33
da2e7cfd 34/*
dd69719a
WB
35***FIXME***
36***HACK***
37 We've got hell of a problem passing "unsigned int64" to java, as there is no equivalent type
38 The closer we can use is "long" which is signed, so only 32 (or 63?) bits are valid
39 Plus, even if we are within the "32 bits" capacity, java sometime screw itself trying to convert "unsigned 64 -> signed 64"
40 This happen especially often when RETURNING a jlong
41 So when returning a jlong, we should convert it like this : "unsigned 64"->"signed 64"->jlong
42*/
f22ebb30
WB
43#define CONVERT_UINT64_TO_JLONG(n) (jlong)(gint64)(n)
44#define CONVERT_INT64_TO_JLONG(n) (jlong)(gint64)(n)
45
dd69719a 46/* To ease calcul involving nano */
f22ebb30
WB
47#define BILLION 1000000000
48
49
2b752eed
WB
50#if __WORDSIZE == 64
51 #define CONVERT_JLONG_TO_PTR(p) (p)
20521615 52 #define CONVERT_PTR_TO_JLONG(p) (jlong)(p)
dd69719a 53 /* Define the "gint" type we should use for pointer. */
20521615 54 #define GINT_TYPE_FOR_PTR gint64
2b752eed 55#else
dd69719a 56 /* Conversion to int first to save warning */
2b752eed
WB
57 #define CONVERT_JLONG_TO_PTR(p) (int)(p)
58 #define CONVERT_PTR_TO_JLONG(p) (jlong)(int)(p)
dd69719a 59 /* Define the "gint" type we should use for pointer. */
20521615 60 #define GINT_TYPE_FOR_PTR gint32
2b752eed 61#endif
f22ebb30 62
dd69719a 63/* Structure to encapsulate java_data to pass as arguments */
f22ebb30
WB
64struct java_calling_data
65{
dd69719a 66 JNIEnv *env;
f22ebb30
WB
67 jobject jobj;
68};
69
dd69719a
WB
70/* ***TODO***
71 All these struct are used to call g_datalist_foreach()
72 Find a better way! This is ugly!
73*/
f22ebb30
WB
74struct addMarkersArgs
75{
dd69719a
WB
76 struct java_calling_data *java_args;
77 struct marker_data *mdata;
f22ebb30
WB
78};
79
dd69719a
WB
80struct saveTimeArgs
81{
82 GArray *saveTimeArray;
83};
f22ebb30 84
dd69719a 85struct saveTimeAndTracefile
f22ebb30 86{
dd69719a
WB
87 LttTime time;
88 LttTracefile *tracefile;
89};
90
da2e7cfd 91/*
dd69719a
WB
92### COMMON Methods ###
93#
94Empty method to turn off the debug (debug waste time while printing) */
95void ignore_and_drop_message(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) {
f22ebb30
WB
96}
97
dd69719a
WB
98
99/* JNI method to call printf from the java side */
100JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_Jni_1C_1Common_ltt_1printC(JNIEnv *env, jobject jobj, jstring new_string) {
101 const char *c_msg = (*env)->GetStringUTFChars(env, new_string, 0);
da2e7cfd 102
dd69719a 103 printf("%s", c_msg );
da2e7cfd 104
dd69719a
WB
105 (*env)->ReleaseStringUTFChars(env, new_string, c_msg);
106}
f22ebb30 107
da2e7cfd 108/* Method to obtain a trace version number from its path */
dd69719a 109JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_factory_JniTraceVersion_ltt_1getTraceVersion(JNIEnv *env, jobject jobj, jstring tracepath) {
da2e7cfd 110
dd69719a
WB
111 const gchar *c_pathname = (*env)->GetStringUTFChars(env, tracepath, 0);
112 jint tmpMajorNumber = 0;
113 jint tmpMinorNumber = 0;
da2e7cfd 114
dd69719a
WB
115 jclass accessClass = (*env)->GetObjectClass(env, jobj);
116 jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTraceVersionFromC", "(II)V");
da2e7cfd 117
dd69719a 118 struct LttTraceVersion version_number;
da2e7cfd
WB
119
120 if ( ltt_get_trace_version(c_pathname, &version_number) >= 0) {
dd69719a
WB
121 tmpMajorNumber = version_number.ltt_major_version;
122 tmpMinorNumber = version_number.ltt_minor_version;
123 }
da2e7cfd 124
dd69719a
WB
125 (*env)->CallVoidMethod(env, jobj, accessFunction, tmpMajorNumber, tmpMinorNumber );
126}
da2e7cfd
WB
127/*
128#
129#### */
dd69719a
WB
130
131
da2e7cfd 132/*
dd69719a
WB
133### TRACE methods ###
134#
135JNI mapping of < LttTrace *ltt_trace_open(const gchar *pathname) > (trace.h) */
136JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1openTrace(JNIEnv *env, jobject jobj, jstring pathname, jboolean show_debug) {
da2e7cfd 137
dd69719a
WB
138 if ( !show_debug) {
139 /* Make sure we don't use any debug (speed up the read) */
140 g_log_set_handler(NULL, G_LOG_LEVEL_INFO, ignore_and_drop_message, NULL);
141 g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, ignore_and_drop_message, NULL);
142 }
da2e7cfd 143
dd69719a
WB
144 const char *c_pathname = (*env)->GetStringUTFChars(env, pathname, 0);
145 LttTrace *newPtr = ltt_trace_open( c_pathname );
f22ebb30
WB
146
147 (*env)->ReleaseStringUTFChars(env, pathname, c_pathname);
148
149 return CONVERT_PTR_TO_JLONG(newPtr);
150}
151
dd69719a
WB
152/* JNI mapping of < void ltt_trace_close(LttTrace *t) > (trace.h) */
153JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1closeTrace(JNIEnv *env, jobject jobj, jlong trace_ptr){
da2e7cfd 154
dd69719a 155 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 156
f22ebb30
WB
157 ltt_trace_close(newPtr);
158}
159
dd69719a
WB
160/* Get the tracepath */
161JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getTracepath(JNIEnv *env, jobject jobj, jlong trace_ptr) {
162 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 163
f22ebb30
WB
164 return (*env)->NewStringUTF(env, g_quark_to_string( newPtr->pathname) );
165}
166
167
dd69719a
WB
168/* Get of num_cpu */
169JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getCpuNumber(JNIEnv *env, jobject jobj, jlong trace_ptr) {
170 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 171
f22ebb30
WB
172 return (jint)newPtr->num_cpu;
173}
174
dd69719a
WB
175/* Get of arch_type */
176JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchType(JNIEnv *env, jobject jobj, jlong trace_ptr) {
177 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 178
f22ebb30
WB
179 return (jlong)newPtr->arch_type;
180}
181
dd69719a
WB
182/* Get of arch_variant */
183JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchVariant(JNIEnv *env, jobject jobj, jlong trace_ptr) {
184 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 185
f22ebb30
WB
186 return (jlong)newPtr->arch_variant;
187}
188
dd69719a
WB
189/* Get of arch_size */
190JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getArchSize(JNIEnv *env, jobject jobj, jlong trace_ptr) {
191 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 192
f22ebb30
WB
193 return (jshort)newPtr->arch_size;
194}
195
dd69719a
WB
196/* Get of ltt_major_version */
197JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMajorVersion(JNIEnv *env, jobject jobj, jlong trace_ptr) {
198 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 199
f22ebb30
WB
200 return (jshort)newPtr->ltt_major_version;
201}
202
dd69719a
WB
203/* Get of ltt_minor_version */
204JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getLttMinorVersion(JNIEnv *env, jobject jobj, jlong trace_ptr) {
205 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 206
f22ebb30
WB
207 return (jshort)newPtr->ltt_minor_version;
208}
209
dd69719a
WB
210/* Get of flight_recorder */
211JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFlightRecorder(JNIEnv *env, jobject jobj, jlong trace_ptr) {
212 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 213
f22ebb30
WB
214 return (jshort)newPtr->flight_recorder;
215}
216
dd69719a
WB
217/* Get of freq_scale */
218JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getFreqScale(JNIEnv *env, jobject jobj, jlong trace_ptr) {
219 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 220
f22ebb30
WB
221 return (jlong)newPtr->freq_scale;
222}
223
dd69719a
WB
224/* Get of start_freq */
225JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartFreq(JNIEnv *env, jobject jobj, jlong trace_ptr) {
226 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
f22ebb30
WB
227
228 return CONVERT_UINT64_TO_JLONG(newPtr->start_freq);
229}
230
dd69719a
WB
231/* Get of start_tsc */
232JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartTimestampCurrentCounter(JNIEnv *env, jobject jobj, jlong trace_ptr) {
233 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 234
f22ebb30
WB
235 return CONVERT_UINT64_TO_JLONG(newPtr->start_tsc);
236}
237
dd69719a
WB
238/* Get of start_monotonic */
239JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getStartMonotonic(JNIEnv *env, jobject jobj, jlong trace_ptr) {
240 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 241
f22ebb30
WB
242 return CONVERT_UINT64_TO_JLONG(newPtr->start_monotonic);
243}
244
dd69719a
WB
245/* Access to start_time */
246/* Note that we are calling the setTimeFromC function in Jaf_Time from here */
247JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTime(JNIEnv *env, jobject jobj, jlong trace_ptr, jobject time_jobj) {
248 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 249
f22ebb30
WB
250 jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
251 jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTimeFromC", "(J)V");
da2e7cfd 252
f22ebb30 253 jlong fullTime = (CONVERT_UINT64_TO_JLONG(newPtr->start_time.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(newPtr->start_time.tv_nsec);
da2e7cfd 254
f22ebb30
WB
255 (*env)->CallVoidMethod(env, time_jobj, accessFunction, fullTime );
256}
257
dd69719a
WB
258/* Access to start_time_from_tsc */
259/* Note that we are calling the setTimeFromC function in Jaf_Time from here */
260JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedStartTimeFromTimestampCurrentCounter(JNIEnv *env, jobject jobj, jlong trace_ptr, jobject time_jobj) {
261 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 262
f22ebb30
WB
263 jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
264 jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTimeFromC", "(J)V");
da2e7cfd 265
f22ebb30 266 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);
da2e7cfd 267
f22ebb30
WB
268 (*env)->CallVoidMethod(env, time_jobj, accessFunction, fullTime);
269}
270
271
dd69719a 272/* g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1getAllTracefiles */
f22ebb30 273void g_datalist_foreach_addTracefilesOfTrace(GQuark name, gpointer data, gpointer user_data) {
dd69719a 274 struct java_calling_data *args = (struct java_calling_data*)user_data;
da2e7cfd 275
f22ebb30
WB
276 jclass accessClass = (*args->env)->GetObjectClass(args->env, args->jobj);
277 jmethodID accessFunction = (*args->env)->GetMethodID(args->env, accessClass, "addTracefileFromC", "(Ljava/lang/String;J)V");
da2e7cfd 278
dd69719a
WB
279 GArray *tracefile_array = (GArray*)data;
280 LttTracefile *tracefile;
f22ebb30 281 jlong newPtr;
da2e7cfd 282
f22ebb30 283 unsigned int i;
dd69719a
WB
284 for (i=0; i<tracefile_array->len; i++) {
285 tracefile = &g_array_index(tracefile_array, LttTracefile, i);
da2e7cfd 286
f22ebb30 287 newPtr = CONVERT_PTR_TO_JLONG(tracefile);
da2e7cfd 288
f22ebb30
WB
289 (*args->env)->CallVoidMethod(args->env, args->jobj, accessFunction, (*args->env)->NewStringUTF(args->env, g_quark_to_string(tracefile->name) ), newPtr );
290 }
291}
292
dd69719a
WB
293/* Function to fill up the java map with the event type found in tracefile (the name) */
294JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedAllTracefiles(JNIEnv *env, jobject jobj, jlong trace_ptr) {
295 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 296
f22ebb30 297 struct java_calling_data args = { env, jobj };
da2e7cfd 298
f22ebb30
WB
299 g_datalist_foreach(&newPtr->tracefiles, &g_datalist_foreach_addTracefilesOfTrace, &args);
300}
301
302
dd69719a
WB
303/* g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedTracefileTimeRange */
304/* used to save the current timestamp for each tracefile */
305void g_datalist_foreach_saveTracefilesTime(GQuark name, gpointer data, gpointer user_data) {
306 struct saveTimeArgs *args = (struct saveTimeArgs*)user_data;
da2e7cfd 307
dd69719a
WB
308 GArray *tracefile_array = (GArray*)data;
309 GArray *save_array = args->saveTimeArray;
da2e7cfd 310
dd69719a
WB
311 LttTracefile *tracefile;
312 struct saveTimeAndTracefile *savedData;
da2e7cfd 313
dd69719a
WB
314 unsigned int i;
315 for (i=0; i<tracefile_array->len; i++) {
316 tracefile = &g_array_index(tracefile_array, LttTracefile, i);
da2e7cfd 317
dd69719a
WB
318 /* Allocate a new LttTime for each tracefile (so it won't change if the tracefile seek somewhere else) */
319 savedData = (struct saveTimeAndTracefile*)malloc( sizeof(struct saveTimeAndTracefile) );
320 savedData->time.tv_sec = tracefile->event.event_time.tv_sec;
321 savedData->time.tv_nsec = tracefile->event.event_time.tv_nsec;
322 savedData->tracefile = tracefile;
323 /* Append the saved data to the array */
324 g_array_append_val(save_array, savedData);
325 }
326}
327
328
329/* Obtain the range of the trace (i.e. "start time" and "end time") */
330/* Note : This function, unlike ltt_trace_time_span_get, is assured to return all tracefiles to their correct position after operation */
331/* NOTE : this method is quite heavy to use!!! */
332JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1feedTracefileTimeRange(JNIEnv *env, jobject jobj, jlong trace_ptr, jobject jstart_time, jobject jend_time) {
333 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 334
dd69719a
WB
335 /* Allocate ourself a new array to save the data in */
336 GArray *savedDataArray = g_array_new(FALSE, FALSE, sizeof(struct saveTimeAndTracefile*) );
337 struct saveTimeArgs args = { savedDataArray };
338 /* Call g_datalist_foreach_saveTracefilesTime for each element in the GData to save the time */
339 g_datalist_foreach(&newPtr->tracefiles, &g_datalist_foreach_saveTracefilesTime, &args);
da2e7cfd 340
dd69719a
WB
341 /* Call to ltt_trace_time_span_get to find the current start and end time */
342 /* NOTE : This WILL change the current block of the tracefile (i.e. its timestamp) */
343 LttTime tmpStartTime = { 0, 0 };
344 LttTime tmpEndTime = { 0, 0 };
345 ltt_trace_time_span_get(newPtr, &tmpStartTime, &tmpEndTime);
da2e7cfd 346
dd69719a
WB
347 /* Seek back to the correct time for each tracefile and free the allocated memory */
348 struct saveTimeAndTracefile *savedData;
349 unsigned int i;
350 for (i=0; i<savedDataArray->len; i++) {
351 savedData = g_array_index(savedDataArray, struct saveTimeAndTracefile*, i);
352 /* Seek back to the correct time */
353 /* Some time will not be consistent here (i.e. unitialized data) */
354 /* but the seek should work just fine with that */
355 ltt_tracefile_seek_time(savedData->tracefile, savedData->time);
da2e7cfd 356
dd69719a
WB
357 /* Free the memory allocated for this saveTimeAndTracefile entry */
358 free( savedData );
359 }
360 /* Free the memory allocated for the GArray */
361 g_array_free(savedDataArray, TRUE);
da2e7cfd 362
dd69719a
WB
363 /* Send the start and end time back to the java */
364 /* We do it last to make sure a problem won't leave us with unfred memory */
365 jclass startAccessClass = (*env)->GetObjectClass(env, jstart_time);
366 jmethodID startAccessFunction = (*env)->GetMethodID(env, startAccessClass, "setTimeFromC", "(J)V");
367 jlong startTime = (CONVERT_UINT64_TO_JLONG(tmpStartTime.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(tmpStartTime.tv_nsec);
368 (*env)->CallVoidMethod(env, jstart_time, startAccessFunction, startTime);
da2e7cfd 369
dd69719a
WB
370 jclass endAccessClass = (*env)->GetObjectClass(env, jend_time);
371 jmethodID endAccessFunction = (*env)->GetMethodID(env, endAccessClass, "setTimeFromC", "(J)V");
372 jlong endTime = (CONVERT_UINT64_TO_JLONG(tmpEndTime.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(tmpEndTime.tv_nsec);
373 (*env)->CallVoidMethod(env, jend_time, endAccessFunction, endTime);
374}
375
376/* Function to print the content of a trace */
377JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTrace_ltt_1printTrace(JNIEnv *env, jobject jobj, jlong trace_ptr) {
da2e7cfd 378
dd69719a 379 LttTrace *newPtr = (LttTrace*)CONVERT_JLONG_TO_PTR(trace_ptr);
da2e7cfd 380
f22ebb30
WB
381 printf("pathname : %s\n" ,g_quark_to_string(newPtr->pathname) );
382 printf("num_cpu : %u\n" ,(unsigned int)(newPtr->num_cpu) );
383 printf("arch_type : %u\n" ,(unsigned int)(newPtr->arch_type) );
384 printf("arch_variant : %u\n" ,(unsigned int)(newPtr->arch_variant) );
385 printf("arch_size : %u\n" ,(unsigned short)(newPtr->arch_size) );
386 printf("ltt_major_version : %u\n" ,(unsigned short)(newPtr->ltt_major_version) );
387 printf("ltt_minor_version : %u\n" ,(unsigned short)(newPtr->ltt_minor_version) );
388 printf("flight_recorder : %u\n" ,(unsigned short)(newPtr->flight_recorder) );
389 printf("freq_scale : %u\n" ,(unsigned int)(newPtr->freq_scale) );
2b752eed
WB
390 printf("start_freq : %lu\n" ,(long unsigned int)(newPtr->start_freq) );
391 printf("start_tsc : %lu\n" ,(long unsigned int)(newPtr->start_tsc) );
392 printf("start_monotonic : %lu\n" ,(long unsigned int)(newPtr->start_monotonic) );
20521615 393 printf("start_time ptr : %p\n" ,&newPtr->start_time);
2b752eed
WB
394 printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr->start_time.tv_sec) );
395 printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr->start_time.tv_nsec) );
20521615 396 printf("start_time_from_tsc ptr : %p\n" ,&newPtr->start_time_from_tsc);
2b752eed
WB
397 printf(" tv_sec : %lu\n" ,(long unsigned int)(newPtr->start_time_from_tsc.tv_sec) );
398 printf(" tv_nsec : %lu\n" ,(long unsigned int)(newPtr->start_time_from_tsc.tv_nsec) );
20521615 399 printf("tracefiles ptr : %p\n" ,newPtr->tracefiles);
f22ebb30
WB
400 printf("\n");
401}
da2e7cfd 402/*
dd69719a
WB
403#
404### */
f22ebb30
WB
405
406
407
408
da2e7cfd 409/*
dd69719a
WB
410### TRACEFILE methods ###
411# */
412
413/* Get of cpu_online */
414JNIEXPORT jboolean JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsCpuOnline(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
415 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 416
f22ebb30
WB
417 return (jboolean)newPtr->cpu_online;
418}
419
dd69719a
WB
420/* Get of long_name */
421JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilepath(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
422 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 423
f22ebb30
WB
424 return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->long_name) );
425}
426
dd69719a
WB
427/* Get of name */
428JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracefilename(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
429 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 430
f22ebb30
WB
431 return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->name) );
432}
433
dd69719a
WB
434/* Get of cpu_num */
435JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCpuNumber(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
436 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 437
f22ebb30
WB
438 return (jlong)newPtr->cpu_num;
439}
440
dd69719a
WB
441/* Get of tid */
442JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTid(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
443 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 444
f22ebb30
WB
445 return (jlong)newPtr->tid;
446}
447
dd69719a
WB
448/* Get of pgid */
449JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getPgid(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
450 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 451
f22ebb30
WB
452 return (jlong)newPtr->pgid;
453}
454
dd69719a
WB
455/* Get of creation */
456JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCreation(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
457 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 458
f22ebb30
WB
459 return CONVERT_UINT64_TO_JLONG(newPtr->creation);
460}
461
dd69719a
WB
462/* Get of trace */
463JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getTracePtr(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
464 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 465
f22ebb30
WB
466 return CONVERT_PTR_TO_JLONG(newPtr->trace);
467}
468
dd69719a
WB
469/* Get of mdata */
470JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getMarkerDataPtr(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
471 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 472
f22ebb30
WB
473 return CONVERT_PTR_TO_JLONG(newPtr->mdata);
474}
475
dd69719a
WB
476/* Get of fd */
477JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCFileDescriptor(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
478 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 479
f22ebb30
WB
480 return (jint)newPtr->fd;
481}
482
dd69719a
WB
483/* Get of file_size */
484JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getFileSize(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
485 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 486
f22ebb30
WB
487 return CONVERT_UINT64_TO_JLONG(newPtr->file_size);
488}
489
dd69719a
WB
490/* Get of num_blocks */
491JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBlockNumber(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
492 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 493
f22ebb30
WB
494 return (jlong)newPtr->num_blocks;
495}
496
dd69719a
WB
497/* Get of reverse_bo */
498JNIEXPORT jboolean JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsBytesOrderReversed(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
499 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 500
f22ebb30
WB
501 return (jboolean)newPtr->reverse_bo;
502}
503
dd69719a
WB
504/* Get of float_word_order */
505JNIEXPORT jboolean JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getIsFloatWordOrdered(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
506 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 507
f22ebb30
WB
508 return (jboolean)newPtr->float_word_order;
509}
510
dd69719a
WB
511/* Get of alignment */
512JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAlignement(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
513 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 514
f22ebb30
WB
515 return CONVERT_UINT64_TO_JLONG(newPtr->alignment);
516}
517
dd69719a
WB
518/* Get of buffer_header_size */
519JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferHeaderSize(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
520 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 521
f22ebb30
WB
522 return CONVERT_UINT64_TO_JLONG(newPtr->buffer_header_size);
523}
524
dd69719a
WB
525/* Get of tscbits */
526JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfCurrentTimestampCounter(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
527 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 528
f22ebb30
WB
529 return (jint)newPtr->tscbits;
530}
531
dd69719a
WB
532/* Get of eventbits */
533JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBitsOfEvent(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
534 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 535
f22ebb30
WB
536 return (jint)newPtr->eventbits;
537}
538
dd69719a
WB
539/* Get of tsc_mask */
540JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMask(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
541 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 542
f22ebb30
WB
543 return CONVERT_UINT64_TO_JLONG(newPtr->tsc_mask);
544}
545
dd69719a
WB
546/* Get of tsc_mask_next_bit */
547JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getCurrentTimestampCounterMaskNextBit(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
548 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 549
f22ebb30
WB
550 return CONVERT_UINT64_TO_JLONG(newPtr->tsc_mask_next_bit);
551}
552
dd69719a
WB
553/* Get of events_lost */
554JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventsLost(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
555 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 556
f22ebb30
WB
557 return (jlong)newPtr->events_lost;
558}
559
dd69719a
WB
560/* Get of subbuf_corrupt */
561JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getSubBufferCorrupt(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
562 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 563
f22ebb30
WB
564 return (jlong)newPtr->subbuf_corrupt;
565}
566
dd69719a
WB
567/* Get of event */
568JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getEventPtr(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
569 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 570
f22ebb30
WB
571 return CONVERT_PTR_TO_JLONG(&newPtr->event);
572}
573
dd69719a
WB
574/* Get of buffer */
575JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferPtr(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
576 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 577
f22ebb30
WB
578 return CONVERT_PTR_TO_JLONG(&newPtr->buffer);
579}
580
dd69719a
WB
581/* Get of buffer size */
582JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getBufferSize(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
583 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 584
f22ebb30
WB
585 return (jlong)newPtr->buf_size;
586}
587
588
dd69719a 589/* g_list_data function for the "for_each" call in Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1getAllMarkers */
f22ebb30 590void g_hash_table_foreach_addMarkersOfTracefile(gpointer key, gpointer data, gpointer user_data) {
dd69719a
WB
591 struct addMarkersArgs *args = (struct addMarkersArgs*)user_data;
592 struct java_calling_data *jargs = (struct java_calling_data*)args->java_args;
da2e7cfd 593
f22ebb30
WB
594 jclass accessClass = (*jargs->env)->GetObjectClass(jargs->env, jargs->jobj);
595 jmethodID accessFunction = (*jargs->env)->GetMethodID(jargs->env, accessClass, "addMarkersFromC", "(IJ)V");
da2e7cfd 596
f22ebb30 597 unsigned long marker_id = (unsigned long)data;
da2e7cfd 598
dd69719a
WB
599 /* The hash table store an ID... we will use the ID to access the array. */
600 GArray *marker = args->mdata->markers;
601 struct marker_info *newPtr = &g_array_index(marker, struct marker_info, marker_id);
da2e7cfd 602
f22ebb30
WB
603 (*jargs->env)->CallVoidMethod(jargs->env, jargs->jobj, accessFunction, marker_id, CONVERT_PTR_TO_JLONG(newPtr) );
604}
605
dd69719a
WB
606/* Function to fill up the java map with the event type found in tracefile (the name) */
607JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1feedAllMarkers(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
608 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 609
dd69719a
WB
610 /* ***TODO***
611 Find a better way! This is ugly! */
f22ebb30
WB
612 struct java_calling_data java_args = { env, jobj };
613 struct addMarkersArgs args = { &java_args, newPtr->mdata };
da2e7cfd 614
f22ebb30
WB
615 g_hash_table_foreach( newPtr->mdata->markers_hash, &g_hash_table_foreach_addMarkersOfTracefile, &args);
616}
617
618
dd69719a
WB
619/* Function to print the content of a tracefile */
620JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniTracefile_ltt_1printTracefile(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
da2e7cfd 621
dd69719a 622 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
f22ebb30
WB
623 printf("cpu_online : %i\n" ,(int)newPtr->cpu_online);
624 printf("long_name : %s\n" ,g_quark_to_string(newPtr->long_name));
625 printf("name : %s\n" ,g_quark_to_string(newPtr->name));
626 printf("cpu_num : %u\n" ,(unsigned int)(newPtr->cpu_num));
627 printf("tid : %u\n" ,(unsigned int)(newPtr->tid));
628 printf("pgid : %u\n" ,(unsigned int)(newPtr->pgid));
2b752eed 629 printf("creation : %lu\n" ,(long unsigned int)(newPtr->creation));
20521615
L
630 printf("trace ptr : %p\n" ,newPtr->trace);
631 printf("marker ptr : %p\n" ,newPtr->mdata);
f22ebb30
WB
632 printf("fd : %i\n" ,(int)(newPtr->fd));
633 printf("file_size : %u\n" ,(unsigned int)(newPtr->file_size));
634 printf("num_blocks : %u\n" ,(unsigned int)(newPtr->num_blocks));
635 printf("reverse_bo : %i\n" ,(int)newPtr->reverse_bo);
636 printf("float_word_order : %i\n" ,(int)newPtr->float_word_order);
637 printf("alignment : %i\n" ,(int)newPtr->alignment);
638 printf("buffer_header_size : %i\n" ,(int)newPtr->buffer_header_size);
639 printf("tscbits : %u\n" ,(unsigned short)newPtr->tscbits);
640 printf("eventbits : %u\n" ,(unsigned short)newPtr->eventbits);
2b752eed
WB
641 printf("tsc_mask : %lu\n" ,(long unsigned int)newPtr->tsc_mask);
642 printf("tsc_mask_next_bit : %lu\n" ,(long unsigned int)newPtr->tsc_mask_next_bit);
f22ebb30
WB
643 printf("events_lost : %u\n" ,(unsigned int)newPtr->events_lost);
644 printf("subbuf_corrupt : %u\n" ,(unsigned int)newPtr->subbuf_corrupt);
20521615
L
645 printf("event ptr : %p\n" ,&newPtr->event);
646 printf("buffer ptr : %p\n" ,&newPtr->buffer);
f22ebb30
WB
647 printf("\n");
648}
da2e7cfd 649/*
dd69719a
WB
650#
651### */
f22ebb30
WB
652
653
654
da2e7cfd 655/*
dd69719a
WB
656### EVENT methods ###
657# */
f22ebb30 658
dd69719a
WB
659/* Method to get the read status */
660/* This method will read the next event and then seek back its initial position */
661/* Lttv assume that every tracefile have at least 1 event, but we have not guarantee after this one. */
662/* We will read the next event and return the status of that read */
663/* We will then seek back to our initial position */
664/* Note : this method is expensive and should not be used too often */
665JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1positionToFirstEvent(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
666 LttTracefile *tracefilePtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 667
dd69719a 668 /* Ask ltt to read the next events on the given tracefiles
da2e7cfd 669 Returned value can be :
dd69719a
WB
670 0 if everything went fine (EOK)
671 ERANGE = 34 out of range, back to last event (might be system dependent?)
672 EPERM = 1 error while reading (might be system dependent?) */
da2e7cfd
WB
673
674
dd69719a 675 /* Seek to the start time... this will also read the first event, as we want. */
2b752eed 676 int returnedValue = ltt_tracefile_seek_time(tracefilePtr, ((struct LttTrace)*(tracefilePtr->trace)).start_time_from_tsc);
da2e7cfd 677
f22ebb30
WB
678 return (jint)returnedValue;
679}
680
dd69719a
WB
681/* Method to read next event */
682JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1readNextEvent(JNIEnv *env, jobject jobj, jlong tracefile_ptr) {
683 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 684
dd69719a 685 /* Ask ltt to read the next events on the given tracefiles
da2e7cfd 686 Returned value can be :
dd69719a
WB
687 0 if everything went fine (EOK)
688 ERANGE = 34 out of range, back to last event (might be system dependent?)
689 EPERM = 1 error while reading (might be system dependent?) */
da2e7cfd
WB
690
691
dd69719a
WB
692 /* ***FIXME***
693 This might fail on the FIRST event, as the timestamp before the first read is uninitialized
694 However, LTT make the assumption that all tracefile have AT LEAST one event, so we got to run with it */
da2e7cfd 695
dd69719a 696 /* Save "last time" before moving, to be able to get back if needed */
f22ebb30 697 LttTime lastTime = newPtr->event.event_time;
da2e7cfd 698
f22ebb30 699 int returnedValue = ltt_tracefile_read(newPtr);
da2e7cfd 700
dd69719a 701 /* We need to get back to previous after an error to keep a sane state */
f22ebb30
WB
702 if ( returnedValue != 0 ) {
703 ltt_tracefile_seek_time(newPtr, lastTime);
704 }
da2e7cfd 705
f22ebb30
WB
706 return (jint)returnedValue;
707}
708
dd69719a
WB
709/* Method to seek to a certain event */
710JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1seekEvent(JNIEnv *env, jobject jobj, jlong tracefile_ptr, jobject time_jobj) {
711 LttTracefile *newPtr = (LttTracefile*)CONVERT_JLONG_TO_PTR(tracefile_ptr);
da2e7cfd 712
f22ebb30 713 guint64 fullTime = 0;
da2e7cfd 714
f22ebb30
WB
715 jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
716 jmethodID getTimeFunction = (*env)->GetMethodID(env, accessClass, "getTime", "()J");
717 fullTime = (*env)->CallLongMethod(env, time_jobj, getTimeFunction);
da2e7cfd 718
dd69719a
WB
719 /* ***HACK***
720 Conversion from jlong -> C long seems to be particularly sloppy
721 Depending how and where (inlined a function or as a single operation) we do this, we might end up with wrong number
722 The following asignation of guint64 seems to work well.
723 MAKE SURE TO PERFORM SEVERAL TESTS IF YOU CHANGE THIS. */
f22ebb30
WB
724 guint64 seconds = fullTime/BILLION;
725 guint64 nanoSeconds = fullTime%BILLION;
da2e7cfd 726
f22ebb30 727 LttTime seekTime = { (unsigned long)seconds, (unsigned long)nanoSeconds };
da2e7cfd 728
dd69719a 729 /* Ask ltt to read the next events on the given tracefiles
da2e7cfd 730 Returned value can be :
dd69719a
WB
731 0 if everything went fine (EOK)
732 ERANGE = 34 out of range, back to last event (might be system dependent?)
733 EPERM = 1 error while reading (might be system dependent?) */
da2e7cfd 734
f22ebb30
WB
735 int returnedValue = ltt_tracefile_seek_time(newPtr, seekTime);
736 return (jint)returnedValue;
737}
738
dd69719a
WB
739/* Get of tracefile */
740JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTracefilePtr(JNIEnv *env, jobject jobj, jlong event_ptr) {
741 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 742
f22ebb30
WB
743 return CONVERT_PTR_TO_JLONG(newPtr->tracefile);
744}
745
dd69719a
WB
746/* Get of block */
747JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getBlock(JNIEnv *env, jobject jobj, jlong event_ptr) {
748 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 749
f22ebb30
WB
750 return (jlong)newPtr->block;
751}
752
dd69719a
WB
753/* Get of offset */
754JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOffset(JNIEnv *env, jobject jobj, jlong event_ptr) {
755 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 756
f22ebb30
WB
757 return (jlong)newPtr->offset;
758}
759
dd69719a
WB
760/* Get of tsc */
761JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCurrentTimestampCounter(JNIEnv *env, jobject jobj, jlong event_ptr) {
762 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 763
f22ebb30
WB
764 return CONVERT_UINT64_TO_JLONG(newPtr->tsc);
765}
766
dd69719a
WB
767/* Get of timestamp */
768JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getTimestamp(JNIEnv *env, jobject jobj, jlong event_ptr) {
769 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 770
f22ebb30
WB
771 return (jlong)newPtr->timestamp;
772}
773
dd69719a
WB
774/* Get of event_id */
775JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventMarkerId(JNIEnv *env, jobject jobj, jlong event_ptr) {
776 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 777
f22ebb30
WB
778 return (jint)newPtr->event_id;
779}
780
dd69719a
WB
781/* Get time in nanoseconds */
782JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getNanosencondsTime(JNIEnv *env, jobject jobj, jlong event_ptr) {
783 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 784
dd69719a
WB
785 return (CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_nsec);
786}
787
788/* Fill event_time into an object */
789JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1feedEventTime(JNIEnv *env, jobject jobj, jlong event_ptr, jobject time_jobj) {
790 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 791
f22ebb30
WB
792 jclass accessClass = (*env)->GetObjectClass(env, time_jobj);
793 jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "setTimeFromC", "(J)V");
da2e7cfd 794
f22ebb30 795 jlong fullTime = (CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_sec)*BILLION) + CONVERT_UINT64_TO_JLONG(newPtr->event_time.tv_nsec);
da2e7cfd 796
f22ebb30
WB
797 (*env)->CallVoidMethod(env, time_jobj, accessFunction, fullTime);
798}
799
dd69719a
WB
800/* Access method to the data */
801/* The data are in "byte" form */
802JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getDataContent(JNIEnv *env, jobject jobj, jlong event_ptr, jlong data_size, jbyteArray dataArray) {
803 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 804
f22ebb30
WB
805 (*env)->SetByteArrayRegion(env, dataArray, 0, (jsize)data_size, newPtr->data);
806}
807
dd69719a
WB
808/* Get of data_size */
809JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventDataSize(JNIEnv *env, jobject jobj, jlong event_ptr) {
810 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 811
f22ebb30
WB
812 return (jlong)newPtr->data_size;
813}
814
dd69719a
WB
815/* Get of event_size */
816JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getEventSize(JNIEnv *env, jobject jobj, jlong event_ptr) {
817 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 818
f22ebb30
WB
819 return (jlong)newPtr->event_size;
820}
821
dd69719a
WB
822/* Get of count */
823JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getCount(JNIEnv *env, jobject jobj, jlong event_ptr) {
824 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 825
f22ebb30
WB
826 return (jint)newPtr->count;
827}
828
dd69719a
WB
829/* Get of overflow_nsec */
830JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1getOverflowNanoSeconds(JNIEnv *env, jobject jobj, jlong event_ptr) {
831 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 832
f22ebb30
WB
833 return CONVERT_UINT64_TO_JLONG(newPtr->overflow_nsec);
834}
835
836
dd69719a
WB
837/* Function to print the content of a event */
838JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniEvent_ltt_1printEvent(JNIEnv *env, jobject jobj, jlong event_ptr) {
839 LttEvent *newPtr = (LttEvent*)CONVERT_JLONG_TO_PTR(event_ptr);
da2e7cfd 840
20521615 841 printf("tracefile : %p\n" ,(void*)newPtr->tracefile );
2b752eed
WB
842 printf("block : %u\n" ,(unsigned int)newPtr->block );
843 printf("offset : %u\n" ,(unsigned int)newPtr->offset );
844 printf("tsc : %lu\n" ,(long unsigned int)newPtr->tsc );
845 printf("timestamp : %u\n" ,(unsigned int)newPtr->timestamp );
846 printf("event_id : %u\n" ,(unsigned short)newPtr->event_id );
20521615 847 printf("event_time : %p\n" ,(void*) &newPtr->event_time );
2b752eed
WB
848 printf(" sec : %lu\n" ,(long unsigned int)(newPtr->event_time.tv_sec) );
849 printf(" nsec : %lu\n" ,(long unsigned int)(newPtr->event_time.tv_nsec) );
20521615 850 printf("data : %p\n" ,(void*) newPtr->data );
2b752eed
WB
851 printf("data_size : %u\n" ,(unsigned int)newPtr->data_size );
852 printf("event_size : %u\n" ,(unsigned int)newPtr->event_size );
853 printf("count : %d\n" ,(int)newPtr->count );
854 printf("overflow_nsec : %ld\n" ,(long)newPtr->overflow_nsec );
f22ebb30
WB
855 printf("\n");
856}
da2e7cfd 857/*
dd69719a
WB
858#
859### */
f22ebb30
WB
860
861
da2e7cfd 862/*
dd69719a
WB
863### MARKER method ###
864# */
f22ebb30 865
dd69719a
WB
866/* Get of name */
867JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getName(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
868 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 869
f22ebb30
WB
870 return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->name));
871}
872
dd69719a
WB
873/* Get of format */
874JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getFormatOverview(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
875 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 876
f22ebb30
WB
877 return (*env)->NewStringUTF(env, newPtr->format);
878}
879
dd69719a
WB
880/* Get of size */
881JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
882 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 883
f22ebb30
WB
884 return (jlong)newPtr->size;
885}
886
dd69719a
WB
887/* Method to get all markerField pointers */
888JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAllMarkerFields(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
889 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 890
f22ebb30
WB
891 jclass accessClass = (*env)->GetObjectClass(env, jobj);
892 jmethodID accessFunction = (*env)->GetMethodID(env, accessClass, "addMarkerFieldFromC", "(Ljava/lang/String;J)V");
da2e7cfd 893
dd69719a
WB
894 GArray *field_array = (GArray*)newPtr->fields;
895 struct marker_field *field;
f22ebb30 896 jlong marker_field_ptr;
da2e7cfd 897
f22ebb30
WB
898 unsigned int i;
899 for (i=0; i<field_array->len; i++) {
900 field = &g_array_index(field_array, struct marker_field, i);
da2e7cfd 901
f22ebb30 902 marker_field_ptr = CONVERT_PTR_TO_JLONG(field);
da2e7cfd 903
f22ebb30
WB
904 (*env)->CallVoidMethod(env, jobj, accessFunction, (*env)->NewStringUTF(env, g_quark_to_string(field->name) ), marker_field_ptr );
905 }
906}
907
908
909
dd69719a
WB
910/* Get of largest_align */
911JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLargestAlign(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
912 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 913
f22ebb30
WB
914 return (jshort)newPtr->largest_align;
915}
916
dd69719a
WB
917/* Get of int_size */
918JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getIntSize(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
919 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 920
f22ebb30
WB
921 return (jshort)newPtr->int_size;
922}
923
dd69719a
WB
924/* Get of long_size */
925JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getLongSize(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
926 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 927
f22ebb30
WB
928 return (jshort)newPtr->long_size;
929}
930
dd69719a
WB
931/* Get of pointer_size */
932JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getPointerSize(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
933 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 934
f22ebb30
WB
935 return (jshort)newPtr->pointer_size;
936}
937
dd69719a
WB
938/* Get of size_t_size */
939JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getSize_1tSize(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
940 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 941
f22ebb30
WB
942 return (jshort)newPtr->size_t_size;
943}
944
dd69719a
WB
945/* Get of alignment */
946JNIEXPORT jshort JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getAlignement(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
947 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 948
f22ebb30
WB
949 return (jshort)newPtr->alignment;
950}
951
dd69719a
WB
952/* Get of next */
953JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1getNextMarkerPtr(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
954 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 955
f22ebb30
WB
956 return CONVERT_PTR_TO_JLONG(newPtr->next);
957}
958
959
dd69719a
WB
960/* Function to print the content of a marker */
961JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarker_ltt_1printMarker(JNIEnv *env, jobject jobj, jlong marker_info_ptr) {
962 struct marker_info *newPtr = (struct marker_info*)CONVERT_JLONG_TO_PTR(marker_info_ptr);
da2e7cfd 963
2b752eed
WB
964 printf("name : %s\n" ,g_quark_to_string(newPtr->name) );
965 printf("format : %s\n" ,newPtr->format );
966 printf("size : %li\n" ,(long int)newPtr->size );
967 printf("largest_align : %u\n" ,(unsigned short)newPtr->largest_align );
20521615 968 printf("fields : %p\n" ,newPtr->fields );
2b752eed
WB
969 printf("int_size : %u\n" ,(unsigned short)newPtr->int_size );
970 printf("long_size : %u\n" ,(unsigned short)newPtr->long_size );
971 printf("pointer_size : %u\n" ,(unsigned short)newPtr->pointer_size );
972 printf("size_t_size : %u\n" ,(unsigned short)newPtr->size_t_size );
973 printf("alignment : %u\n" ,(unsigned short)newPtr->alignment );
20521615 974 printf("next : %p\n" ,newPtr->next );
f22ebb30
WB
975 printf("\n");
976}
da2e7cfd 977/*
dd69719a
WB
978#
979### */
f22ebb30
WB
980
981
982
da2e7cfd 983/*
dd69719a
WB
984### MARKERFIELD Method
985# */
f22ebb30 986
dd69719a
WB
987/* Get of name */
988JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getField(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
989 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 990
f22ebb30
WB
991 return (*env)->NewStringUTF(env, g_quark_to_string(newPtr->name));
992}
993
dd69719a
WB
994/* Get of type */
995JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getType(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
996 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 997
f22ebb30
WB
998 return (jint)newPtr->type;
999}
1000
dd69719a
WB
1001/* Get of offset */
1002JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getOffset(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
1003 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1004
f22ebb30
WB
1005 return CONVERT_UINT64_TO_JLONG(newPtr->offset);
1006}
1007
dd69719a
WB
1008/* Get of size */
1009JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getSize(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
1010 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1011
f22ebb30
WB
1012 return CONVERT_UINT64_TO_JLONG(newPtr->size);
1013}
1014
dd69719a
WB
1015/* Get of alignment */
1016JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAlignment(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
1017 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1018
f22ebb30
WB
1019 return CONVERT_UINT64_TO_JLONG(newPtr->alignment);
1020}
1021
dd69719a
WB
1022/* Get of attributes */
1023JNIEXPORT jlong JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getAttributes(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
1024 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1025
f22ebb30
WB
1026 return CONVERT_UINT64_TO_JLONG(newPtr->attributes);
1027}
1028
dd69719a
WB
1029/* Get of static_offset */
1030JNIEXPORT jint JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getStatic_1offset(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
1031 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1032
f22ebb30
WB
1033 return (jint)newPtr->static_offset;
1034}
1035
dd69719a
WB
1036/* Get of fmt */
1037JNIEXPORT jstring JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getFormat(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
1038 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1039
f22ebb30
WB
1040 return (*env)->NewStringUTF(env, newPtr->fmt->str);
1041}
1042
dd69719a
WB
1043/* Function to print the content of a marker_field */
1044JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1printMarkerField(JNIEnv *env, jobject jobj, jlong marker_field_ptr) {
1045 struct marker_field *newPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1046
2b752eed
WB
1047 printf("name : %s\n" ,g_quark_to_string(newPtr->name) );
1048 printf("type : %i\n" ,(int)newPtr->type );
1049 printf("offset : %lu\n" ,(long unsigned int)newPtr->offset );
1050 printf("size : %lu\n" ,(long unsigned int)newPtr->size );
1051 printf("alignment : %lu\n" ,(long unsigned int)newPtr->alignment );
1052 printf("attributes : %lu\n" ,(long unsigned int)newPtr->attributes );
1053 printf("static_offset : %i\n" ,(int)newPtr->static_offset );
1054 printf("fmt : %s\n" ,newPtr->fmt->str );
f22ebb30
WB
1055 printf("\n");
1056}
da2e7cfd 1057/*
dd69719a
WB
1058#
1059### */
f22ebb30 1060
f22ebb30 1061
da2e7cfd 1062/*
dd69719a
WB
1063### PARSER Method
1064# */
f22ebb30 1065
dd69719a
WB
1066/* This function will do the actual parsing */
1067/* It will then call java to assign the parsed data to the object "javaObj" */
1068JNIEXPORT void JNICALL Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1getParsedData(JNIEnv *env, jclass accessClass, jobject javaObj, jlong event_ptr, jlong marker_field_ptr) {
f22ebb30 1069 LttEvent newEventPtr = *(LttEvent*)(CONVERT_JLONG_TO_PTR(event_ptr));
dd69719a 1070 struct marker_field *newMarkerFieldPtr = (struct marker_field*)CONVERT_JLONG_TO_PTR(marker_field_ptr);
da2e7cfd 1071
f22ebb30 1072 jmethodID accessFunction = NULL;
da2e7cfd
WB
1073
1074
1075 /*
dd69719a
WB
1076 There is a very limited number of type in LTT
1077 We will switch on the type for this field and act accordingly
1078 NOTE : We will save all integer into "long" type, as there is no signed/unsigned in java */
da2e7cfd 1079
dd69719a
WB
1080 /* ***HACK***
1081 It seems the marker_field->type is absolutely not consistent, especially about pointer!
1082 Sometime pointer are saved in String, sometime as Int, sometime as pointer...
1083 We will do an extra check on type "LTT_TYPE_UNSIGNED_INT" to check if the marker_field->format is hint of a pointer */
f22ebb30 1084 switch ( newMarkerFieldPtr->type ) {
da2e7cfd 1085 case LTT_TYPE_SIGNED_INT :
dd69719a 1086 accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongToParsingFromC", "(Ljava/lang/Object;J)V");
da2e7cfd
WB
1087 (*env)->CallStaticVoidMethod( env,
1088 accessClass,
1089 accessFunction,
1090 javaObj,
dd69719a 1091 ltt_event_get_long_int(&newEventPtr, newMarkerFieldPtr)
f22ebb30 1092 );
da2e7cfd 1093
f22ebb30 1094 break;
da2e7cfd 1095
f22ebb30 1096 case LTT_TYPE_UNSIGNED_INT :
dd69719a 1097 /* If the format seems to be a pointer, add it as a pointer */
f22ebb30 1098 if ( (strncmp(newMarkerFieldPtr->fmt->str, "0x%llX", newMarkerFieldPtr->fmt->len) == 0 ) || (strncmp(newMarkerFieldPtr->fmt->str, "%llX", newMarkerFieldPtr->fmt->len) == 0 ) ) {
dd69719a
WB
1099 #if __WORDSIZE == 64
1100 accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongPointerToParsingFromC", "(Ljava/lang/Object;J)V");
f22ebb30 1101 #else
dd69719a 1102 accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addIntPointerToParsingFromC", "(Ljava/lang/Object;J)V");
f22ebb30
WB
1103 #endif
1104 (*env)->CallStaticVoidMethod( env,
1105 accessClass,
1106 accessFunction,
1107 javaObj,
dd69719a 1108 CONVERT_PTR_TO_JLONG(ltt_event_get_long_unsigned(&newEventPtr, newMarkerFieldPtr) )
f22ebb30
WB
1109 );
1110 }
dd69719a 1111 /* Otherwise, add it as a number */
f22ebb30 1112 else {
dd69719a 1113 accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongToParsingFromC", "(Ljava/lang/Object;J)V");
f22ebb30
WB
1114 (*env)->CallStaticVoidMethod( env,
1115 accessClass,
1116 accessFunction,
1117 javaObj,
dd69719a 1118 ltt_event_get_long_unsigned(&newEventPtr, newMarkerFieldPtr)
f22ebb30
WB
1119 );
1120 }
da2e7cfd 1121
f22ebb30 1122 break;
da2e7cfd 1123
f22ebb30 1124 case LTT_TYPE_POINTER :
dd69719a
WB
1125 #if __WORDSIZE == 64
1126 accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addLongPointerToParsingFromC", "(Ljava/lang/Object;J)V");
f22ebb30 1127 #else
dd69719a 1128 accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addIntPointerToParsingFromC", "(Ljava/lang/Object;J)V");
f22ebb30
WB
1129 #endif
1130 (*env)->CallStaticVoidMethod( env,
1131 accessClass,
1132 accessFunction,
1133 javaObj,
dd69719a 1134 CONVERT_PTR_TO_JLONG(*(GINT_TYPE_FOR_PTR*)(newEventPtr.data + newMarkerFieldPtr->offset))
f22ebb30
WB
1135 );
1136 break;
da2e7cfd 1137
f22ebb30 1138 case LTT_TYPE_STRING :
dd69719a 1139 accessFunction = (*env)->GetStaticMethodID(env, accessClass, "addStringToParsingFromC", "(Ljava/lang/Object;Ljava/lang/String;)V");
f22ebb30
WB
1140 (*env)->CallStaticVoidMethod( env,
1141 accessClass,
1142 accessFunction,
1143 javaObj,
dd69719a 1144 (*env)->NewStringUTF(env, ltt_event_get_string(&newEventPtr, newMarkerFieldPtr) )
f22ebb30
WB
1145 );
1146 break;
da2e7cfd 1147
f22ebb30
WB
1148 case LTT_TYPE_COMPACT :
1149 case LTT_TYPE_NONE :
1150 default :
dd69719a 1151 printf("Warning : Unrecognized format type! Skipping! (Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1getParsedData)");
f22ebb30
WB
1152 break;
1153 }
da2e7cfd 1154
f22ebb30 1155}
da2e7cfd 1156/*
dd69719a
WB
1157#
1158### */
This page took 0.078325 seconds and 4 git commands to generate.