diff --git a/CHANGELOG.md b/CHANGELOG.md index 03a5c523ed..71cae8b0f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ - Add `sendModules` option for disable sending modules ([#2926](https://github.com/getsentry/sentry-java/pull/2926)) - Send `db.system` and `db.name` in span data for androidx.sqlite spans ([#2928](https://github.com/getsentry/sentry-java/pull/2928)) +### Fixes + +- Always send memory stats for transactions ([#2936](https://github.com/getsentry/sentry-java/pull/2936)) + - This makes it possible to query transactions by the `device.class` tag on Sentry + ### Dependencies - Bump Gradle from v8.2.1 to v8.3.0 ([#2900](https://github.com/getsentry/sentry-java/pull/2900)) diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/DeviceInfoUtil.java b/sentry-android-core/src/main/java/io/sentry/android/core/DeviceInfoUtil.java index d74a8b1e2d..9d23d264b0 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/DeviceInfoUtil.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/DeviceInfoUtil.java @@ -132,9 +132,20 @@ public Device collectDeviceInformation( device.setProcessorCount(cpuFrequencies.size()); } + final @Nullable ActivityManager.MemoryInfo memInfo = + ContextUtils.getMemInfo(context, options.getLogger()); + if (memInfo != null) { + // in bytes + device.setMemorySize(getMemorySize(memInfo)); + if (collectDynamicData) { + device.setFreeMemory(memInfo.availMem); + device.setLowMemory(memInfo.lowMemory); + } + } + // setting such values require IO hence we don't run for transactions if (collectDeviceIO && options.isCollectAdditionalContext()) { - setDeviceIO(device, collectDynamicData); + setDeviceIO(device); } return device; @@ -171,7 +182,7 @@ public ContextUtils.SideLoadedInfo getSideLoadedInfo() { return sideLoadedInfo; } - private void setDeviceIO(final @NotNull Device device, final boolean includeDynamicData) { + private void setDeviceIO(final @NotNull Device device) { final Intent batteryIntent = getBatteryIntent(); if (batteryIntent != null) { device.setBatteryLevel(getBatteryLevel(batteryIntent)); @@ -192,19 +203,6 @@ private void setDeviceIO(final @NotNull Device device, final boolean includeDyna } device.setOnline(connected); - final @Nullable ActivityManager.MemoryInfo memInfo = - ContextUtils.getMemInfo(context, options.getLogger()); - if (memInfo != null) { - // in bytes - device.setMemorySize(getMemorySize(memInfo)); - if (includeDynamicData) { - device.setFreeMemory(memInfo.availMem); - device.setLowMemory(memInfo.lowMemory); - } - // there are runtime.totalMemory() and runtime.freeMemory(), but I kept the same for - // compatibility - } - // this way of getting the size of storage might be problematic for storages bigger than 2GB // check the use of // https://developer.android.com/reference/java/io/File.html#getFreeSpace%28%29 diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/DeviceInfoUtilTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/DeviceInfoUtilTest.kt index 5c90395e3b..2854383dce 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/DeviceInfoUtilTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/DeviceInfoUtilTest.kt @@ -98,19 +98,6 @@ class DeviceInfoUtilTest { assertNotNull(deviceInfo.freeStorage) } - @Test - fun `does not include device io data when disabled`() { - val options = SentryAndroidOptions().apply { - isCollectAdditionalContext = true - } - val deviceInfoUtil = DeviceInfoUtil.getInstance(context, options) - val deviceInfo = deviceInfoUtil.collectDeviceInformation(false, false) - - assertNull(deviceInfo.memorySize) - assertNull(deviceInfo.storageSize) - assertNull(deviceInfo.freeStorage) - } - @Test fun `does include dynamic data when enabled`() { val options = SentryAndroidOptions().apply {