diff options
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/nativec')
6 files changed, 118 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java b/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java new file mode 100644 index 00000000000..67ae30c84f5 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java @@ -0,0 +1,21 @@ +package com.yahoo.nativec; + +public class GLibcVersion { + private final static Throwable initException = NativeC.loadLibrary(GLibcVersion.class); + public static Throwable init() { + return initException; + } + private final String version; + private final int major; + private final int minor; + public GLibcVersion() { + version = gnu_get_libc_version(); + String [] parts = version.split("\\."); + major = parts.length > 0 ? Integer.valueOf(parts[0]) : -1; + minor = parts.length > 1 ? Integer.valueOf(parts[1]) : -1; + } + private native static String gnu_get_libc_version(); + public String version() { return version; } + public int major() { return major; } + public int minor() { return minor; } +} diff --git a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java new file mode 100644 index 00000000000..a4f5486ccf1 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java @@ -0,0 +1,30 @@ +package com.yahoo.nativec; + +import com.sun.jna.Structure; + +public class MallInfo { + private final static Throwable initException = NativeC.loadLibrary(MallInfo.class); + public static Throwable init() { + return initException; + } + + @Structure.FieldOrder({"arena", "ordblks", "smblks", "hblks", "hblkhd", "usmblks", "fsmblks", "uordblks", "fordblks", "keepcost"}) + public static class MallInfoStruct extends Structure { + public static class ByValue extends MallInfoStruct implements Structure.ByValue { } + public int arena; /* Non-mmapped space allocated (bytes) */ + public int ordblks; /* Number of free chunks */ + public int smblks; /* Number of free fastbin blocks */ + public int hblks; /* Number of mmapped regions */ + public int hblkhd; /* Space allocated in mmapped regions (bytes) */ + public int usmblks; /* See below */ + public int fsmblks; /* Space in freed fastbin blocks (bytes) */ + public int uordblks; /* Total allocated space (bytes) */ + public int fordblks; /* Total free space (bytes) */ + public int keepcost; /* Top-most, releasable space (bytes) */ + } + private static native MallInfoStruct.ByValue mallinfo(); + public MallInfo() { + mallinfo = mallinfo(); + } + private final MallInfoStruct mallinfo; +} diff --git a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java new file mode 100644 index 00000000000..1ae3bc590e2 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java @@ -0,0 +1,30 @@ +package com.yahoo.nativec; + +import com.sun.jna.Structure; + +public class MallInfo2 { + private final static Throwable initException = NativeC.loadLibrary(MallInfo2.class); + public static Throwable init() { + return initException; + } + + @Structure.FieldOrder({"arena", "ordblks", "smblks", "hblks", "hblkhd", "usmblks", "fsmblks", "uordblks", "fordblks", "keepcost"}) + public static class MallInfo2Struct extends Structure { + public static class ByValue extends MallInfo2Struct implements Structure.ByValue { } + public long arena; /* Non-mmapped space allocated (bytes) */ + public long ordblks; /* Number of free chunks */ + public long smblks; /* Number of free fastbin blocks */ + public long hblks; /* Number of mmapped regions */ + public long hblkhd; /* Space allocated in mmapped regions (bytes) */ + public long usmblks; /* See below */ + public long fsmblks; /* Space in freed fastbin blocks (bytes) */ + public long uordblks; /* Total allocated space (bytes) */ + public long fordblks; /* Total free space (bytes) */ + public long keepcost; /* Top-most, releasable space (bytes) */ + } + private static native MallInfo2Struct.ByValue mallinfo2(); + public MallInfo2() { + mallinfo = mallinfo2(); + } + private final MallInfo2Struct mallinfo; +} diff --git a/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java new file mode 100644 index 00000000000..4d808b4b155 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java @@ -0,0 +1,20 @@ +package com.yahoo.nativec; + +import com.sun.jna.Native; +import com.sun.jna.Platform; + +class NativeC { + static Throwable loadLibrary(Class<?> cls) { + if (Platform.isLinux()) { + try { + Native.register(cls, Platform.C_LIBRARY_NAME); + } catch (Throwable e) { + return e; + } + } else { + return new RuntimeException("Platform is unsúpported. Only supported on linux."); + } + return null; + } + +} diff --git a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java new file mode 100644 index 00000000000..3e2c26d2ef2 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java @@ -0,0 +1,12 @@ +package com.yahoo.nativec; + +import com.sun.jna.LastErrorException; + +public class PosixFAdvise { + public static final int POSIX_FADV_DONTNEED = 4; // See /usr/include/linux/fadvise.h + private final static Throwable initException = NativeC.loadLibrary(PosixFAdvise.class); + public static Throwable init() { + return initException; + } + public static native int posix_fadvise(int fd, long offset, long len, int flag) throws LastErrorException; +} diff --git a/vespajlib/src/main/java/com/yahoo/nativec/package-info.java b/vespajlib/src/main/java/com/yahoo/nativec/package-info.java new file mode 100644 index 00000000000..cdf497ea39b --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/package-info.java @@ -0,0 +1,5 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +package com.yahoo.nativec; + +import com.yahoo.osgi.annotation.ExportPackage; |