File tree Expand file tree Collapse file tree 3 files changed +16
-4
lines changed
sentry-android-core/src/main/java/io/sentry/android/core/internal/modules
sentry/src/main/java/io/sentry/internal/modules Expand file tree Collapse file tree 3 files changed +16
-4
lines changed Original file line number Diff line number Diff line change 18
18
### Improvements
19
19
20
20
- Make user interaction tracing faster and do fewer allocations ([ #4347 ] ( https://github.com/getsentry/sentry-java/pull/4347 ) )
21
+ - Pre-load modules on a background thread upon SDK init ([ #4348 ] ( https://github.com/getsentry/sentry-java/pull/4348 ) )
21
22
22
23
## 8.8.0
23
24
Original file line number Diff line number Diff line change @@ -21,6 +21,10 @@ public final class AssetsModulesLoader extends ModulesLoader {
21
21
public AssetsModulesLoader (final @ NotNull Context context , final @ NotNull ILogger logger ) {
22
22
super (logger );
23
23
this .context = ContextUtils .getApplicationContext (context );
24
+
25
+ // pre-load modules on a bg thread to avoid doing so on the main thread in case of a crash/error
26
+ //noinspection Convert2MethodRef
27
+ new Thread (() -> getOrLoadModules ()).start ();
24
28
}
25
29
26
30
@ Override
Original file line number Diff line number Diff line change 1
1
package io .sentry .internal .modules ;
2
2
3
3
import io .sentry .ILogger ;
4
+ import io .sentry .ISentryLifecycleToken ;
4
5
import io .sentry .SentryLevel ;
6
+ import io .sentry .util .AutoClosableReentrantLock ;
5
7
import java .io .BufferedReader ;
6
8
import java .io .IOException ;
7
9
import java .io .InputStream ;
@@ -21,18 +23,23 @@ public abstract class ModulesLoader implements IModulesLoader {
21
23
22
24
public static final String EXTERNAL_MODULES_FILENAME = "sentry-external-modules.txt" ;
23
25
protected final @ NotNull ILogger logger ;
24
- private @ Nullable Map <String , String > cachedModules = null ;
26
+
27
+ private final @ NotNull AutoClosableReentrantLock modulesLock = new AutoClosableReentrantLock ();
28
+ private volatile @ Nullable Map <String , String > cachedModules = null ;
25
29
26
30
public ModulesLoader (final @ NotNull ILogger logger ) {
27
31
this .logger = logger ;
28
32
}
29
33
30
34
@ Override
31
35
public @ Nullable Map <String , String > getOrLoadModules () {
32
- if (cachedModules != null ) {
33
- return cachedModules ;
36
+ if (cachedModules == null ) {
37
+ try (final @ NotNull ISentryLifecycleToken ignored = modulesLock .acquire ()) {
38
+ if (cachedModules == null ) {
39
+ cachedModules = loadModules ();
40
+ }
41
+ }
34
42
}
35
- cachedModules = loadModules ();
36
43
return cachedModules ;
37
44
}
38
45
You can’t perform that action at this time.
0 commit comments