Skip to content

Commit 7ed0f01

Browse files
committed
Merge branch 'main' into markushi/fix/wrong-timber-super-call
2 parents 243da18 + 539ca63 commit 7ed0f01

File tree

13 files changed

+206
-182
lines changed

13 files changed

+206
-182
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44

55
### Fixes
66

7+
- [ANR] Removed AndroidTransactionProfiler lock ([#4817](https://github.com/getsentry/sentry-java/pull/4817))
78
- Fix wrong .super() call in SentryTimberTree ([#4844](https://github.com/getsentry/sentry-java/pull/4844))
89

10+
### Improvements
11+
12+
- [ANR] Defer some class availability checks ([#4825](https://github.com/getsentry/sentry-java/pull/4825))
13+
914
### Dependencies
1015

1116
- Bump Native SDK from v0.11.2 to v0.11.3 ([#4810](https://github.com/getsentry/sentry-java/pull/4810))

sentry-android-core/src/main/java/io/sentry/android/core/ActivityFramesTracker.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.sentry.protocol.MeasurementValue;
1111
import io.sentry.protocol.SentryId;
1212
import io.sentry.util.AutoClosableReentrantLock;
13+
import io.sentry.util.LazyEvaluator;
1314
import java.util.HashMap;
1415
import java.util.Map;
1516
import java.util.WeakHashMap;
@@ -30,7 +31,7 @@
3031
*/
3132
public final class ActivityFramesTracker {
3233

33-
private @Nullable FrameMetricsAggregator frameMetricsAggregator = null;
34+
private @NotNull LazyEvaluator<FrameMetricsAggregator> frameMetricsAggregator;
3435
private @NotNull final SentryAndroidOptions options;
3536

3637
private final @NotNull Map<SentryId, Map<String, @NotNull MeasurementValue>>
@@ -41,17 +42,18 @@ public final class ActivityFramesTracker {
4142
private final @NotNull MainLooperHandler handler;
4243
protected @NotNull AutoClosableReentrantLock lock = new AutoClosableReentrantLock();
4344

45+
private final @NotNull LazyEvaluator<Boolean> androidXAvailable;
46+
4447
public ActivityFramesTracker(
4548
final @NotNull io.sentry.util.LoadClass loadClass,
4649
final @NotNull SentryAndroidOptions options,
4750
final @NotNull MainLooperHandler handler) {
4851

49-
final boolean androidXAvailable =
50-
loadClass.isClassAvailable("androidx.core.app.FrameMetricsAggregator", options.getLogger());
52+
androidXAvailable =
53+
loadClass.isClassAvailableLazy(
54+
"androidx.core.app.FrameMetricsAggregator", options.getLogger());
55+
frameMetricsAggregator = new LazyEvaluator<>(() -> new FrameMetricsAggregator());
5156

52-
if (androidXAvailable) {
53-
frameMetricsAggregator = new FrameMetricsAggregator();
54-
}
5557
this.options = options;
5658
this.handler = handler;
5759
}
@@ -67,15 +69,15 @@ public ActivityFramesTracker(
6769
final @NotNull io.sentry.util.LoadClass loadClass,
6870
final @NotNull SentryAndroidOptions options,
6971
final @NotNull MainLooperHandler handler,
70-
final @Nullable FrameMetricsAggregator frameMetricsAggregator) {
72+
final @NotNull FrameMetricsAggregator frameMetricsAggregator) {
7173

7274
this(loadClass, options, handler);
73-
this.frameMetricsAggregator = frameMetricsAggregator;
75+
this.frameMetricsAggregator = new LazyEvaluator<>(() -> frameMetricsAggregator);
7476
}
7577

7678
@VisibleForTesting
7779
public boolean isFrameMetricsAggregatorAvailable() {
78-
return frameMetricsAggregator != null
80+
return androidXAvailable.getValue()
7981
&& options.isEnableFramesTracking()
8082
&& !options.isEnablePerformanceV2();
8183
}
@@ -87,7 +89,8 @@ public void addActivity(final @NotNull Activity activity) {
8789
return;
8890
}
8991

90-
runSafelyOnUiThread(() -> frameMetricsAggregator.add(activity), "FrameMetricsAggregator.add");
92+
runSafelyOnUiThread(
93+
() -> frameMetricsAggregator.getValue().add(activity), "FrameMetricsAggregator.add");
9194
snapshotFrameCountsAtStart(activity);
9295
}
9396
}
@@ -104,11 +107,11 @@ private void snapshotFrameCountsAtStart(final @NotNull Activity activity) {
104107
return null;
105108
}
106109

107-
if (frameMetricsAggregator == null) {
110+
if (!androidXAvailable.getValue()) {
108111
return null;
109112
}
110113

111-
final @Nullable SparseIntArray[] framesRates = frameMetricsAggregator.getMetrics();
114+
final @Nullable SparseIntArray[] framesRates = frameMetricsAggregator.getValue().getMetrics();
112115

113116
int totalFrames = 0;
114117
int slowFrames = 0;
@@ -153,7 +156,7 @@ public void setMetrics(final @NotNull Activity activity, final @NotNull SentryId
153156
// there was no
154157
// Observers, See
155158
// https://android.googlesource.com/platform/frameworks/base/+/140ff5ea8e2d99edc3fbe63a43239e459334c76b
156-
runSafelyOnUiThread(() -> frameMetricsAggregator.remove(activity), null);
159+
runSafelyOnUiThread(() -> frameMetricsAggregator.getValue().remove(activity), null);
157160

158161
final @Nullable FrameCounts frameCounts = diffFrameCountsAtEnd(activity);
159162

@@ -215,8 +218,9 @@ public void setMetrics(final @NotNull Activity activity, final @NotNull SentryId
215218
public void stop() {
216219
try (final @NotNull ISentryLifecycleToken ignored = lock.acquire()) {
217220
if (isFrameMetricsAggregatorAvailable()) {
218-
runSafelyOnUiThread(() -> frameMetricsAggregator.stop(), "FrameMetricsAggregator.stop");
219-
frameMetricsAggregator.reset();
221+
runSafelyOnUiThread(
222+
() -> frameMetricsAggregator.getValue().stop(), "FrameMetricsAggregator.stop");
223+
frameMetricsAggregator.getValue().reset();
220224
}
221225
activityMeasurements.clear();
222226
}

sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ static void initializeIntegrationsAndProcessors(
200200
options.setVersionDetector(new DefaultVersionDetector(options));
201201
}
202202

203-
final boolean isAndroidXScrollViewAvailable =
204-
loadClass.isClassAvailable("androidx.core.view.ScrollingView", options);
203+
final @NotNull LazyEvaluator<Boolean> isAndroidXScrollViewAvailable =
204+
loadClass.isClassAvailableLazy("androidx.core.view.ScrollingView", options);
205205
final boolean isComposeUpstreamAvailable =
206206
loadClass.isClassAvailable(COMPOSE_CLASS_NAME, options);
207207

sentry-android-core/src/main/java/io/sentry/android/core/AndroidProfiler.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public ProfileEndData(
9494
private final @NotNull Map<String, ProfileMeasurement> measurementsMap = new HashMap<>();
9595
private final @Nullable ISentryExecutorService timeoutExecutorService;
9696
private final @NotNull ILogger logger;
97-
private boolean isRunning = false;
97+
private volatile boolean isRunning = false;
9898
protected final @NotNull AutoClosableReentrantLock lock = new AutoClosableReentrantLock();
9999

100100
public AndroidProfiler(
@@ -354,4 +354,8 @@ private void putPerformanceCollectionDataInMeasurements(
354354
}
355355
}
356356
}
357+
358+
boolean isRunning() {
359+
return isRunning;
360+
}
357361
}

0 commit comments

Comments
 (0)