From 8f61e4cdd67906ce3216da015aec65cd14b18d78 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Thu, 5 Feb 2015 12:58:34 +0100 Subject: [PATCH] Give compiler hint about inline functions Motivation: Some of the methods are frequently called and so should be inlined if possible. Modifications: Give the compiler a hint that we want to inline these methods. Result: Better performance if inlined. --- .../main/c/io_netty_channel_epoll_Native.c | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c b/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c index 85f3078683..27b0086e99 100644 --- a/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c +++ b/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c @@ -89,25 +89,25 @@ static int socketType; static const char* ip4prefix = "::ffff:"; // util methods -void throwRuntimeException(JNIEnv* env, char* message) { +static inline void throwRuntimeException(JNIEnv* env, char* message) { (*env)->ThrowNew(env, runtimeExceptionClass, message); } -void throwIOException(JNIEnv* env, char* message) { +static inline void throwIOException(JNIEnv* env, char* message) { (*env)->ThrowNew(env, ioExceptionClass, message); } -void throwClosedChannelException(JNIEnv* env) { +static inline void throwClosedChannelException(JNIEnv* env) { jobject exception = (*env)->NewObject(env, closedChannelExceptionClass, closedChannelExceptionMethodId); (*env)->Throw(env, exception); } -void throwOutOfMemoryError(JNIEnv* env) { +static inline void throwOutOfMemoryError(JNIEnv* env) { jclass exceptionClass = (*env)->FindClass(env, "java/lang/OutOfMemoryError"); (*env)->ThrowNew(env, exceptionClass, ""); } -char* exceptionMessage(char* msg, int error) { +static inline char* exceptionMessage(char* msg, int error) { char* err = strerror(error); char* result = malloc(strlen(msg) + strlen(err) + 1); strcpy(result, msg); @@ -115,9 +115,8 @@ char* exceptionMessage(char* msg, int error) { return result; } -jint epollCtl(JNIEnv* env, jint efd, int op, jint fd, jint flags) { +static inline jint epollCtl(JNIEnv* env, jint efd, int op, jint fd, jint flags) { uint32_t events = flags; - struct epoll_event ev = { .data.fd = fd, .events = events @@ -126,7 +125,7 @@ jint epollCtl(JNIEnv* env, jint efd, int op, jint fd, jint flags) { return epoll_ctl(efd, op, fd, &ev); } -jint getOption(JNIEnv* env, jint fd, int level, int optname, void* optval, socklen_t optlen) { +static inline jint getOption(JNIEnv* env, jint fd, int level, int optname, void* optval, socklen_t optlen) { int code; code = getsockopt(fd, level, optname, optval, &optlen); if (code == 0) { @@ -137,7 +136,7 @@ jint getOption(JNIEnv* env, jint fd, int level, int optname, void* optval, sockl return code; } -int setOption(JNIEnv* env, jint fd, int level, int optname, const void* optval, socklen_t len) { +static inline int setOption(JNIEnv* env, jint fd, int level, int optname, const void* optval, socklen_t len) { int rc = setsockopt(fd, level, optname, optval, len); if (rc < 0) { int err = errno; @@ -174,7 +173,7 @@ jobject createInetSocketAddress(JNIEnv* env, struct sockaddr_storage addr) { return socketAddr; } -jbyteArray createInetSocketAddressArray(JNIEnv* env, struct sockaddr_storage addr) { +static jbyteArray createInetSocketAddressArray(JNIEnv* env, struct sockaddr_storage addr) { int port; if (addr.ss_family == AF_INET) { struct sockaddr_in* s = (struct sockaddr_in*) &addr; @@ -236,7 +235,7 @@ jbyteArray createInetSocketAddressArray(JNIEnv* env, struct sockaddr_storage add } } -jobject createDatagramSocketAddress(JNIEnv* env, struct sockaddr_storage addr, int len) { +static jobject createDatagramSocketAddress(JNIEnv* env, struct sockaddr_storage addr, int len) { char ipstr[INET6_ADDRSTRLEN]; int port; jstring ipString; @@ -265,7 +264,7 @@ jobject createDatagramSocketAddress(JNIEnv* env, struct sockaddr_storage addr, i return socketAddr; } -int init_sockaddr(JNIEnv* env, jbyteArray address, jint scopeId, jint jport, struct sockaddr_storage* addr) { +static int init_sockaddr(JNIEnv* env, jbyteArray address, jint scopeId, jint jport, struct sockaddr_storage* addr) { uint16_t port = htons((uint16_t) jport); // Use GetPrimitiveArrayCritical and ReleasePrimitiveArrayCritical to signal the VM that we really would like // to not do a memory copy here. This is ok as we not do any blocking action here anyway. @@ -308,7 +307,7 @@ static int socket_type() { } } -int init_in_addr(JNIEnv* env, jbyteArray address, struct in_addr* addr) { +static int init_in_addr(JNIEnv* env, jbyteArray address, struct in_addr* addr) { // Use GetPrimitiveArrayCritical and ReleasePrimitiveArrayCritical to signal the VM that we really would like // to not do a memory copy here. This is ok as we not do any blocking action here anyway. // This is important as the VM may suspend GC for the time! @@ -667,7 +666,7 @@ JNIEXPORT void JNICALL Java_io_netty_channel_epoll_Native_epollCtlDel(JNIEnv* en } } -jint _write(JNIEnv* env, jclass clazz, jint fd, void* buffer, jint pos, jint limit) { +static inline jint _write(JNIEnv* env, jclass clazz, jint fd, void* buffer, jint pos, jint limit) { ssize_t res; int err; do { @@ -694,7 +693,7 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_writeAddress0(JNIEnv* return _write(env, clazz, fd, (void*) address, pos, limit); } -jint _sendTo(JNIEnv* env, jint fd, void* buffer, jint pos, jint limit ,jbyteArray address, jint scopeId, jint port) { +static inline jint _sendTo(JNIEnv* env, jint fd, void* buffer, jint pos, jint limit ,jbyteArray address, jint scopeId, jint port) { struct sockaddr_storage addr; if (init_sockaddr(env, address, scopeId, port, &addr) == -1) { return -1; @@ -790,7 +789,7 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_sendmmsg0(JNIEnv* env, return (jint) res; } -jobject recvFrom0(JNIEnv* env, jint fd, void* buffer, jint pos, jint limit) { +static inline jobject recvFrom0(JNIEnv* env, jint fd, void* buffer, jint pos, jint limit) { struct sockaddr_storage addr; socklen_t addrlen = sizeof(addr); ssize_t res; @@ -831,7 +830,7 @@ JNIEXPORT jobject JNICALL Java_io_netty_channel_epoll_Native_recvFromAddress(JNI return recvFrom0(env, fd, (void*) address, pos, limit); } -jlong _writev(JNIEnv* env, jclass clazz, jint fd, struct iovec* iov, jint length) { +static inline jlong _writev(JNIEnv* env, jclass clazz, jint fd, struct iovec* iov, jint length) { ssize_t res; int err; do { @@ -891,7 +890,7 @@ JNIEXPORT jlong JNICALL Java_io_netty_channel_epoll_Native_writevAddresses0(JNIE return _writev(env, clazz, fd, iov, length); } -jint _read(JNIEnv* env, jclass clazz, jint fd, void* buffer, jint pos, jint limit) { +static inline jint _read(JNIEnv* env, jclass clazz, jint fd, void* buffer, jint pos, jint limit) { ssize_t res; int err; do { @@ -940,7 +939,7 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_shutdown0(JNIEnv* env, return 0; } -jint socket0(JNIEnv* env, jclass clazz, int type) { +static inline jint socket0(JNIEnv* env, jclass clazz, int type) { // TODO: Maybe also respect -Djava.net.preferIPv4Stack=true int fd = socket(socketType, type | SOCK_NONBLOCK, 0); if (fd == -1) {