diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-04-26 15:17:53 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-04-26 15:17:53 +0200 |
commit | 077869e1bdf42433947b52d8787683ea431196ca (patch) | |
tree | a554ec3c25a49771914bbec4196b1d70836f1b12 /vespajlib | |
parent | be717cbb0d681e1e9d0afaf9d6321dc51e556932 (diff) |
Add MallInfo
Diffstat (limited to 'vespajlib')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java | 14 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java | 29 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java | 4 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/nativec/NativeC.java | 4 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java | 4 | ||||
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/nativec/GlibCTestCase.java (renamed from vespajlib/src/test/java/com/yahoo/nativec/PosixFAdviseTestCase.java) | 13 | ||||
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/nativec/MallInfoTestCase.java (renamed from vespajlib/src/test/java/com/yahoo/nativec/MallInfo2TestCase.java) | 10 |
7 files changed, 70 insertions, 8 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..b404e5b00df --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java @@ -0,0 +1,14 @@ +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; + public GLibcVersion() { + version = gnu_get_libc_version(); + } + private native static String gnu_get_libc_version(); + public String version() { return version; } +} 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..c9d781ddd4d --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java @@ -0,0 +1,29 @@ +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; + } + // Equivalent JNA mapping + private 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 index 1db73710d76..73adcc5f9a2 100644 --- a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java +++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java @@ -2,8 +2,8 @@ package com.yahoo.nativec; import com.sun.jna.Structure; -public class MallInfo2 extends NativeC { - private final static Throwable initException = loadLibrary(); +public class MallInfo2 { + private final static Throwable initException = NativeC.loadLibrary(MallInfo2.class); public static Throwable init() { return initException; } diff --git a/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java index e86fe16d3f7..4d808b4b155 100644 --- a/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java +++ b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java @@ -4,10 +4,10 @@ import com.sun.jna.Native; import com.sun.jna.Platform; class NativeC { - protected static Throwable loadLibrary() { + static Throwable loadLibrary(Class<?> cls) { if (Platform.isLinux()) { try { - Native.register(Platform.C_LIBRARY_NAME); + Native.register(cls, Platform.C_LIBRARY_NAME); } catch (Throwable e) { return e; } diff --git a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java index b29ff889a25..3e2c26d2ef2 100644 --- a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java +++ b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java @@ -2,9 +2,9 @@ package com.yahoo.nativec; import com.sun.jna.LastErrorException; -public class PosixFAdvise extends NativeC { +public class PosixFAdvise { public static final int POSIX_FADV_DONTNEED = 4; // See /usr/include/linux/fadvise.h - private final static Throwable initException = loadLibrary(); + private final static Throwable initException = NativeC.loadLibrary(PosixFAdvise.class); public static Throwable init() { return initException; } diff --git a/vespajlib/src/test/java/com/yahoo/nativec/PosixFAdviseTestCase.java b/vespajlib/src/test/java/com/yahoo/nativec/GlibCTestCase.java index 8750dcb0a86..25ff67182f6 100644 --- a/vespajlib/src/test/java/com/yahoo/nativec/PosixFAdviseTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/nativec/GlibCTestCase.java @@ -4,9 +4,10 @@ import com.sun.jna.Platform; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNull; -public class PosixFAdviseTestCase { +public class GlibCTestCase { @Test public void requireThatPosixFAdviseIsDetected() { if (Platform.isLinux()) { @@ -15,4 +16,14 @@ public class PosixFAdviseTestCase { assertEquals("Platform is unsúpported. Only supported on linux.", PosixFAdvise.init().getMessage()); } } + + @Test + public void requireGlibcVersionIsDetected() { + if (Platform.isLinux()) { + assertNull(GLibcVersion.init()); + assertNotEquals("", new GLibcVersion().version()); + } else { + assertEquals("Platform is unsúpported. Only supported on linux.", PosixFAdvise.init().getMessage()); + } + } } diff --git a/vespajlib/src/test/java/com/yahoo/nativec/MallInfo2TestCase.java b/vespajlib/src/test/java/com/yahoo/nativec/MallInfoTestCase.java index 87a92a2d640..378e994fe84 100644 --- a/vespajlib/src/test/java/com/yahoo/nativec/MallInfo2TestCase.java +++ b/vespajlib/src/test/java/com/yahoo/nativec/MallInfoTestCase.java @@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; -public class MallInfo2TestCase { +public class MallInfoTestCase { @Test public void requireThatMallInfo2IsDetected() { if (Platform.isLinux()) { @@ -15,4 +15,12 @@ public class MallInfo2TestCase { assertEquals("Platform is unsúpported. Only supported on linux.", MallInfo2.init().getMessage()); } } + @Test + public void requireThatMallInfoIsDetected() { + if (Platform.isLinux()) { + assertNull(MallInfo.init()); + } else { + assertEquals("Platform is unsúpported. Only supported on linux.", MallInfo.init().getMessage()); + } + } } |