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