From: Alexandre Montplaisir Date: Thu, 5 Apr 2012 21:15:57 +0000 (-0400) Subject: Fix: Make the JNI interface actually work X-Git-Tag: v2.0.2~9 X-Git-Url: https://git.lttng.org/?p=lttng-ust.git;a=commitdiff_plain;h=46adf653a1d01b8e87baa30cc9b92616eee1a788 Fix: Make the JNI interface actually work Now a user can import LTTngUst.java (which is now in a proper package) and then define tracepoints in his application with: LTTngUst.tracepointString(name, args); We could eventually ship it in a .jar when the JNI interface is enabled. It's still very basic, only string payloads are implemented, and there is no mechanism to enable/disable trace points call sites at runtime (they are always enabled). The event under which these events appear is "lttng_ust_java:string". Signed-off-by: Alexandre Montplaisir Signed-off-by: Mathieu Desnoyers --- diff --git a/liblttng-ust-java/.gitignore b/liblttng-ust-java/.gitignore index ab97d041..677373ea 100644 --- a/liblttng-ust-java/.gitignore +++ b/liblttng-ust-java/.gitignore @@ -1,2 +1,2 @@ -UST.class -UST.h +org_lttng_ust_LTTngUst.h +org/ diff --git a/liblttng-ust-java/LTTNG_UST.c b/liblttng-ust-java/LTTNG_UST.c deleted file mode 100644 index af29c1e9..00000000 --- a/liblttng-ust-java/LTTNG_UST.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2011-2012 Mathieu Desnoyers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; only - * version 2.1 of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include - -#define TRACEPOINT_DEFINE -#define TRACEPOINT_CREATE_PROBES -#include "lttng_ust_java.h" - -JNIEXPORT void JNICALL Java_LTTNG_UST_ust_1java_1event (JNIEnv *env, - jobject jobj, - jstring ev_name, - jstring args) -{ - jboolean iscopy; - const char *ev_name_cstr = (*env)->GetStringUTFChars(env, ev_name, - &iscopy); - const char *args_cstr = (*env)->GetStringUTFChars(env, args, &iscopy); - - tracepoint(lttng_ust_java, string, ev_name_cstr, args_cstr); -} diff --git a/liblttng-ust-java/LTTNG_UST.java b/liblttng-ust-java/LTTNG_UST.java deleted file mode 100644 index 7ec61103..00000000 --- a/liblttng-ust-java/LTTNG_UST.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2011-2012 Mathieu Desnoyers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; only - * version 2.1 of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -class LTTNG_UST { - public static native void lttng_ust_java_string(String name, String arg); - static { - System.loadLibrary("lttng-ust-java"); - } -} - diff --git a/liblttng-ust-java/LTTngUst.c b/liblttng-ust-java/LTTngUst.c new file mode 100644 index 00000000..3d23d6a1 --- /dev/null +++ b/liblttng-ust-java/LTTngUst.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2011-2012 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#define TRACEPOINT_DEFINE +#define TRACEPOINT_CREATE_PROBES +#include "lttng_ust_java.h" + +JNIEXPORT void JNICALL Java_org_lttng_ust_LTTngUst_tracepointString(JNIEnv *env, + jobject jobj, + jstring ev_name, + jstring args) +{ + jboolean iscopy; + const char *ev_name_cstr = (*env)->GetStringUTFChars(env, ev_name, + &iscopy); + const char *args_cstr = (*env)->GetStringUTFChars(env, args, &iscopy); + + tracepoint(lttng_ust_java, string, ev_name_cstr, args_cstr); + + (*env)->ReleaseStringUTFChars(env, ev_name, ev_name_cstr); + (*env)->ReleaseStringUTFChars(env, args, args_cstr); +} diff --git a/liblttng-ust-java/LTTngUst.java b/liblttng-ust-java/LTTngUst.java new file mode 100644 index 00000000..d3f1edaf --- /dev/null +++ b/liblttng-ust-java/LTTngUst.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2011-2012 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package org.lttng.ust; + +class LTTngUst { + public static native void tracepointString(String name, String arg); + static { + System.loadLibrary("lttng-ust-java"); + } +} + diff --git a/liblttng-ust-java/Makefile.am b/liblttng-ust-java/Makefile.am index 31915d0d..9e01e045 100644 --- a/liblttng-ust-java/Makefile.am +++ b/liblttng-ust-java/Makefile.am @@ -3,19 +3,20 @@ if BUILD_JNI_INTERFACE AM_CPPFLAGS = -I$(top_srcdir)/include lib_LTLIBRARIES = liblttng-ust-java.la -liblttng_ust_java_la_SOURCES = LTTNG_UST.c LTTNG_UST.h lttng_ust_java.h -dist_noinst_DATA = LTTNG_UST.java +liblttng_ust_java_la_SOURCES = LTTngUst.c org_lttng_ust_LTTngUst.h lttng_ust_java.h +dist_noinst_DATA = LTTngUst.java liblttng_ust_java_la_LIBADD = -lc -L$(top_builddir)/liblttng-ust/.libs -llttng-ust -all: LTTNG_UST.class LTTNG_UST.h +all: LTTngUst.class org_lttng_ust_LTTngUst.h clean-local: - rm -rf LTTNG_UST.h LTTNG_UST.class + rm org_lttng_ust_LTTngUst.h + rm -rf org/ -LTTNG_UST.class: LTTNG_UST.java - javac -d "$(builddir)" "$(srcdir)/LTTNG_UST.java" +LTTngUst.class: LTTngUst.java + javac -d "$(builddir)" "$(srcdir)/LTTngUst.java" -LTTNG_UST.h: LTTNG_UST.class - javah -classpath ./ -jni LTTNG_UST +org_lttng_ust_LTTngUst.h: LTTngUst.class + javah org.lttng.ust.LTTngUst endif