This CL effectively expands the zone of influence of https://webrtc-review.googlesource.com/64160, forcing 16-byte stack alignment of generated JNI methods for the Android x86 platform. Bug: webrtc:9085 Change-Id: Idc40c00ea3fb52dbbbeac7b58ceda2a9a44733d8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159928 Commit-Queue: Sami Kalliomäki <sakal@webrtc.org> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29858}
81 lines
2.6 KiB
C++
81 lines
2.6 KiB
C++
/*
|
|
* Copyright 2015 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
// This file contain convenience functions and classes for JNI.
|
|
// Before using any of the methods, InitGlobalJniVariables must be called.
|
|
|
|
#ifndef SDK_ANDROID_SRC_JNI_JNI_HELPERS_H_
|
|
#define SDK_ANDROID_SRC_JNI_JNI_HELPERS_H_
|
|
|
|
#include <jni.h>
|
|
#include <string>
|
|
|
|
#include "sdk/android/native_api/jni/java_types.h"
|
|
#include "sdk/android/native_api/jni/scoped_java_ref.h"
|
|
#include "sdk/android/src/jni/jvm.h"
|
|
|
|
// Convenience macro defining JNI-accessible methods in the org.webrtc package.
|
|
// Eliminates unnecessary boilerplate and line-wraps, reducing visual clutter.
|
|
#if defined(WEBRTC_ARCH_X86)
|
|
// Dalvik JIT generated code doesn't guarantee 16-byte stack alignment on
|
|
// x86 - use force_align_arg_pointer to realign the stack at the JNI
|
|
// boundary. crbug.com/655248
|
|
#define JNI_FUNCTION_DECLARATION(rettype, name, ...) \
|
|
__attribute__((force_align_arg_pointer)) extern "C" JNIEXPORT rettype \
|
|
JNICALL Java_org_webrtc_##name(__VA_ARGS__)
|
|
#else
|
|
#define JNI_FUNCTION_DECLARATION(rettype, name, ...) \
|
|
extern "C" JNIEXPORT rettype JNICALL Java_org_webrtc_##name(__VA_ARGS__)
|
|
#endif
|
|
|
|
namespace webrtc {
|
|
namespace jni {
|
|
|
|
// TODO(sakal): Remove once clients have migrated.
|
|
using ::webrtc::JavaToStdMapStrings;
|
|
|
|
// Deprecated, use NativeToJavaPointer.
|
|
inline long jlongFromPointer(void* ptr) {
|
|
return NativeToJavaPointer(ptr);
|
|
}
|
|
|
|
ScopedJavaLocalRef<jobject> NewDirectByteBuffer(JNIEnv* env,
|
|
void* address,
|
|
jlong capacity);
|
|
|
|
jobject NewGlobalRef(JNIEnv* jni, jobject o);
|
|
|
|
void DeleteGlobalRef(JNIEnv* jni, jobject o);
|
|
|
|
// Scope Java local references to the lifetime of this object. Use in all C++
|
|
// callbacks (i.e. entry points that don't originate in a Java callstack
|
|
// through a "native" method call).
|
|
class ScopedLocalRefFrame {
|
|
public:
|
|
explicit ScopedLocalRefFrame(JNIEnv* jni);
|
|
~ScopedLocalRefFrame();
|
|
|
|
private:
|
|
JNIEnv* jni_;
|
|
};
|
|
|
|
} // namespace jni
|
|
} // namespace webrtc
|
|
|
|
// TODO(magjed): Remove once external clients are updated.
|
|
namespace webrtc_jni {
|
|
|
|
using webrtc::AttachCurrentThreadIfNeeded;
|
|
using webrtc::jni::InitGlobalJniVariables;
|
|
|
|
} // namespace webrtc_jni
|
|
|
|
#endif // SDK_ANDROID_SRC_JNI_JNI_HELPERS_H_
|