From f1e2d842666edefe3bab2f7b56e9838fbc3049e2 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Fri, 30 Aug 2024 11:14:42 +0200 Subject: [PATCH 1/7] Bump sentry-native to feat/inproc_handler_strategy --- sentry-android-ndk/sentry-native | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-android-ndk/sentry-native b/sentry-android-ndk/sentry-native index 0f1d664759..d11359b7d4 160000 --- a/sentry-android-ndk/sentry-native +++ b/sentry-android-ndk/sentry-native @@ -1 +1 @@ -Subproject commit 0f1d664759cba187a846a562f9d55f3c62dffaa3 +Subproject commit d11359b7d4c96d9bfb74ca64a2a530476656caf7 From 439a49b68a433d49b474076bc144f5bbd59ba962 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Fri, 30 Aug 2024 11:21:07 +0200 Subject: [PATCH 2/7] Update Changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d26f36b970..a87c8e3d82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +### Dependencies + +- Alpha: Bump Native SDK to `d11359b` of [feat/inproc_handler_strategy](https://github.com/getsentry/sentry-native/pull/1027/) + - See the following issue for more details: https://github.com/getsentry/sentry-native/issues/1026 + ## 7.14.0 ### Features From 4871195345d9af778ea74032505358726d367850 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Fri, 30 Aug 2024 11:56:03 +0200 Subject: [PATCH 3/7] Add SentryAndroidOptions.setNativeHandlerStrategy --- .../api/sentry-android-core.api | 10 ++++++++++ .../android/core/NdkHandlerStrategy.java | 19 +++++++++++++++++++ .../android/core/SentryAndroidOptions.java | 13 +++++++++++++ .../android/core/SentryAndroidOptionsTest.kt | 13 +++++++++++++ sentry-android-ndk/src/main/jni/sentry.c | 5 +++++ 5 files changed, 60 insertions(+) create mode 100644 sentry-android-core/src/main/java/io/sentry/android/core/NdkHandlerStrategy.java diff --git a/sentry-android-core/api/sentry-android-core.api b/sentry-android-core/api/sentry-android-core.api index 478a1ddd3c..bcd6deb690 100644 --- a/sentry-android-core/api/sentry-android-core.api +++ b/sentry-android-core/api/sentry-android-core.api @@ -219,6 +219,14 @@ public final class io/sentry/android/core/LoadClass { public fun loadClass (Ljava/lang/String;Lio/sentry/ILogger;)Ljava/lang/Class; } +public final class io/sentry/android/core/NdkHandlerStrategy : java/lang/Enum { + public static final field SENTRY_HANDLER_STRATEGY_CHAIN_AT_START Lio/sentry/android/core/NdkHandlerStrategy; + public static final field SENTRY_HANDLER_STRATEGY_DEFAULT Lio/sentry/android/core/NdkHandlerStrategy; + public fun getValue ()I + public static fun valueOf (Ljava/lang/String;)Lio/sentry/android/core/NdkHandlerStrategy; + public static fun values ()[Lio/sentry/android/core/NdkHandlerStrategy; +} + public final class io/sentry/android/core/NdkIntegration : io/sentry/Integration, java/io/Closeable { public static final field SENTRY_NDK_CLASS_NAME Ljava/lang/String; public fun (Ljava/lang/Class;)V @@ -265,6 +273,7 @@ public final class io/sentry/android/core/SentryAndroidOptions : io/sentry/Sentr public fun getDebugImagesLoader ()Lio/sentry/android/core/IDebugImagesLoader; public fun getFrameMetricsCollector ()Lio/sentry/android/core/internal/util/SentryFrameMetricsCollector; public fun getNativeSdkName ()Ljava/lang/String; + public fun getNdkHandlerStrategy ()I public fun getProfilingTracesIntervalMillis ()I public fun getStartupCrashDurationThresholdMillis ()J public fun isAnrEnabled ()Z @@ -309,6 +318,7 @@ public final class io/sentry/android/core/SentryAndroidOptions : io/sentry/Sentr public fun setEnableScopeSync (Z)V public fun setEnableSystemEventBreadcrumbs (Z)V public fun setFrameMetricsCollector (Lio/sentry/android/core/internal/util/SentryFrameMetricsCollector;)V + public fun setNativeHandlerStrategy (Lio/sentry/android/core/NdkHandlerStrategy;)V public fun setNativeSdkName (Ljava/lang/String;)V public fun setProfilingTracesIntervalMillis (I)V public fun setReportHistoricalAnrs (Z)V diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/NdkHandlerStrategy.java b/sentry-android-core/src/main/java/io/sentry/android/core/NdkHandlerStrategy.java new file mode 100644 index 0000000000..74b446658d --- /dev/null +++ b/sentry-android-core/src/main/java/io/sentry/android/core/NdkHandlerStrategy.java @@ -0,0 +1,19 @@ +package io.sentry.android.core; + +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +public enum NdkHandlerStrategy { + SENTRY_HANDLER_STRATEGY_DEFAULT(0), + SENTRY_HANDLER_STRATEGY_CHAIN_AT_START(1); + + private final int value; + + NdkHandlerStrategy(final int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroidOptions.java b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroidOptions.java index 449834574a..6ac168fd8f 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroidOptions.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroidOptions.java @@ -157,6 +157,9 @@ public final class SentryAndroidOptions extends SentryOptions { /** Turns NDK on or off. Default is enabled. */ private boolean enableNdk = true; + @NotNull + private NdkHandlerStrategy ndkHandlerStrategy = + NdkHandlerStrategy.SENTRY_HANDLER_STRATEGY_DEFAULT; /** * Enable the Java to NDK Scope sync. The default value for sentry-java is disabled and enabled * for sentry-android. @@ -472,6 +475,16 @@ public void setNativeSdkName(final @Nullable String nativeSdkName) { this.nativeSdkName = nativeSdkName; } + @ApiStatus.Internal + public void setNativeHandlerStrategy(final @NotNull NdkHandlerStrategy ndkHandlerStrategy) { + this.ndkHandlerStrategy = ndkHandlerStrategy; + } + + @ApiStatus.Internal + public int getNdkHandlerStrategy() { + return ndkHandlerStrategy.getValue(); + } + /** * Returns the sdk name for the sentry native ndk module. * diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidOptionsTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidOptionsTest.kt index 5ed5de1c04..aa266d5c7a 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidOptionsTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidOptionsTest.kt @@ -167,6 +167,19 @@ class SentryAndroidOptionsTest { assertTrue(SentryAndroidOptions().isEnableScopeSync) } + @Test + fun `ndk handler option defaults to default strategy`() { + val sentryOptions = SentryAndroidOptions() + assertEquals(NdkHandlerStrategy.SENTRY_HANDLER_STRATEGY_DEFAULT.value, sentryOptions.ndkHandlerStrategy) + } + + @Test + fun `ndk handler strategy option can be changed`() { + val sentryOptions = SentryAndroidOptions() + sentryOptions.setNativeHandlerStrategy(NdkHandlerStrategy.SENTRY_HANDLER_STRATEGY_CHAIN_AT_START) + assertEquals(NdkHandlerStrategy.SENTRY_HANDLER_STRATEGY_CHAIN_AT_START.value, sentryOptions.ndkHandlerStrategy) + } + private class CustomDebugImagesLoader : IDebugImagesLoader { override fun loadDebugImages(): List? = null override fun clearDebugImages() {} diff --git a/sentry-android-ndk/src/main/jni/sentry.c b/sentry-android-ndk/src/main/jni/sentry.c index d62ef56123..b92e849523 100644 --- a/sentry-android-ndk/src/main/jni/sentry.c +++ b/sentry-android-ndk/src/main/jni/sentry.c @@ -255,6 +255,8 @@ Java_io_sentry_android_ndk_SentryNdk_initSentryNative( jmethodID native_sdk_name_mid = (*env)->GetMethodID(env, options_cls, "getNativeSdkName", "()Ljava/lang/String;"); + jmethodID handler_strategy_mid = (*env)->GetMethodID(env, options_cls, "getNdkHandlerStrategy", "()I"); + (*env)->DeleteLocalRef(env, options_cls); char *outbox_path = NULL; @@ -337,6 +339,9 @@ Java_io_sentry_android_ndk_SentryNdk_initSentryNative( sentry_free(native_sdk_name_str); } + jint handler_strategy = (jint) (*env)->CallIntMethod(env, sentry_sdk_options, handler_strategy_mid); + sentry_options_set_handler_strategy(options, handler_strategy); + sentry_init(options); return; From d5ee782e4dc24ff26f326fab857338f2a36490e8 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Fri, 30 Aug 2024 12:00:36 +0200 Subject: [PATCH 4/7] Update Changelog --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a87c8e3d82..6c8d2ff425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,13 @@ ## Unreleased +### Features + +- Add support for setting sentry-native handler_strategy ([#3671](https://github.com/getsentry/sentry-java/pull/3671)) + ### Dependencies -- Alpha: Bump Native SDK to `d11359b` of [feat/inproc_handler_strategy](https://github.com/getsentry/sentry-native/pull/1027/) +- Bump Native SDK to `d11359b` of [feat/inproc_handler_strategy](https://github.com/getsentry/sentry-native/pull/1027/) - See the following issue for more details: https://github.com/getsentry/sentry-native/issues/1026 ## 7.14.0 From 9a924af90e98a03ad5e40c3eadd3a71ead0e92a8 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Fri, 30 Aug 2024 12:02:36 +0200 Subject: [PATCH 5/7] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c8d2ff425..0a15dd935a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ ### Dependencies -- Bump Native SDK to `d11359b` of [feat/inproc_handler_strategy](https://github.com/getsentry/sentry-native/pull/1027/) +- Bump `sentry-native` SDK to `d11359b` of [feat/inproc_handler_strategy](https://github.com/getsentry/sentry-native/pull/1027/) - See the following issue for more details: https://github.com/getsentry/sentry-native/issues/1026 ## 7.14.0 From 1b4e33404b0e96235a7bee881efd2566820c59fc Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Fri, 30 Aug 2024 12:18:00 +0200 Subject: [PATCH 6/7] Exclude sentry-native submodule from formatting --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7985a55486..c888ddaa58 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -225,7 +225,7 @@ spotless { target("**/*.java") removeUnusedImports() googleJavaFormat() - targetExclude("**/generated/**", "**/vendor/**") + targetExclude("**/generated/**", "**/vendor/**", "**/sentry-native/**") } kotlin { target("**/*.kt") From c46816139cecc6e400afdbacf7f617cc266161a3 Mon Sep 17 00:00:00 2001 From: getsentry-bot Date: Fri, 30 Aug 2024 10:40:15 +0000 Subject: [PATCH 7/7] release: 7.15.0-alpha.1 --- CHANGELOG.md | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a15dd935a..ffb0307c88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Unreleased +## 7.15.0-alpha.1 ### Features diff --git a/gradle.properties b/gradle.properties index 514c0500b4..9439506d27 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ android.useAndroidX=true android.defaults.buildfeatures.buildconfig=true # Release information -versionName=7.14.0 +versionName=7.15.0-alpha.1 # Override the SDK name on native crashes on Android sentryAndroidSdkName=sentry.native.android