Skip to content

Commit c4e9681

Browse files
authored
Merge e72af42 into ab8a72d
2 parents ab8a72d + e72af42 commit c4e9681

31 files changed

+28
-2652
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## Unreleased
44

5+
### Features
6+
7+
- Remove vendored code and upgrade to async profiler 4.2 ([#4856](https://github.com/getsentry/sentry-java/pull/4856))
8+
59
### Improvements
610

711
- Fallback to distinct-id as user.id logging attribute when user is not set ([#4847](https://github.com/getsentry/sentry-java/pull/4847))

sentry-async-profiler/api/sentry-async-profiler.api

Lines changed: 5 additions & 294 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ public final class io/sentry/asyncprofiler/BuildConfig {
33
public static final field VERSION_NAME Ljava/lang/String;
44
}
55

6-
public final class io/sentry/asyncprofiler/convert/JfrAsyncProfilerToSentryProfileConverter : io/sentry/asyncprofiler/vendor/asyncprofiler/convert/JfrConverter {
7-
public fun <init> (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrReader;Lio/sentry/asyncprofiler/vendor/asyncprofiler/convert/Arguments;Lio/sentry/SentryStackTraceFactory;Lio/sentry/ILogger;)V
6+
public final class io/sentry/asyncprofiler/convert/JfrAsyncProfilerToSentryProfileConverter : one/convert/JfrConverter {
7+
public fun <init> (Lone/jfr/JfrReader;Lone/convert/Arguments;Lio/sentry/SentryStackTraceFactory;Lio/sentry/ILogger;)V
88
public static fun convertFromFileStatic (Ljava/lang/String;)Lio/sentry/protocol/profiling/SentryProfile;
99
}
1010

11-
public final class io/sentry/asyncprofiler/convert/NonAggregatingEventCollector : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector {
11+
public final class io/sentry/asyncprofiler/convert/NonAggregatingEventCollector : one/jfr/event/EventCollector {
1212
public fun <init> ()V
1313
public fun afterChunk ()V
1414
public fun beforeChunk ()V
15-
public fun collect (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)V
15+
public fun collect (Lone/jfr/event/Event;)V
1616
public fun finish ()Z
17-
public fun forEach (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector$Visitor;)V
17+
public fun forEach (Lone/jfr/event/EventCollector$Visitor;)V
1818
}
1919

2020
public final class io/sentry/asyncprofiler/profiling/JavaContinuousProfiler : io/sentry/IContinuousProfiler, io/sentry/transport/RateLimiter$IRateLimitObserver {
@@ -45,292 +45,3 @@ public final class io/sentry/asyncprofiler/provider/AsyncProfilerProfileConverte
4545
public fun convertFromFile (Ljava/lang/String;)Lio/sentry/protocol/profiling/SentryProfile;
4646
}
4747

48-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/convert/Arguments {
49-
public field alloc Z
50-
public field bci Z
51-
public field classify Z
52-
public field cpu Z
53-
public field dot Z
54-
public field exclude Ljava/util/regex/Pattern;
55-
public final field files Ljava/util/List;
56-
public field from J
57-
public field grain D
58-
public field help Z
59-
public field highlight Ljava/lang/String;
60-
public field include Ljava/util/regex/Pattern;
61-
public field inverted Z
62-
public field leak Z
63-
public field lines Z
64-
public field live Z
65-
public field lock Z
66-
public field minwidth D
67-
public field nativemem Z
68-
public field norm Z
69-
public field output Ljava/lang/String;
70-
public field reverse Z
71-
public field simple Z
72-
public field skip I
73-
public field state Ljava/lang/String;
74-
public field threads Z
75-
public field title Ljava/lang/String;
76-
public field to J
77-
public field total Z
78-
public field wall Z
79-
public fun <init> ([Ljava/lang/String;)V
80-
}
81-
82-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/convert/Frame : java/util/HashMap {
83-
public static final field TYPE_C1_COMPILED B
84-
public static final field TYPE_CPP B
85-
public static final field TYPE_INLINED B
86-
public static final field TYPE_INTERPRETED B
87-
public static final field TYPE_JIT_COMPILED B
88-
public static final field TYPE_KERNEL B
89-
public static final field TYPE_NATIVE B
90-
}
91-
92-
public abstract class io/sentry/asyncprofiler/vendor/asyncprofiler/convert/JfrConverter {
93-
protected final field args Lio/sentry/asyncprofiler/vendor/asyncprofiler/convert/Arguments;
94-
protected final field collector Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector;
95-
protected final field jfr Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrReader;
96-
protected field methodNames Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
97-
public fun <init> (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrReader;Lio/sentry/asyncprofiler/vendor/asyncprofiler/convert/Arguments;)V
98-
protected fun collectEvents ()V
99-
public fun convert ()V
100-
protected fun convertChunk ()V
101-
protected fun createCollector (Lio/sentry/asyncprofiler/vendor/asyncprofiler/convert/Arguments;)Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector;
102-
public synthetic fun getCategory (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/StackTrace;)Lio/sentry/asyncprofiler/vendor/asyncprofiler/convert/Classifier$Category;
103-
public fun getClassName (J)Ljava/lang/String;
104-
public fun getMethodName (JB)Ljava/lang/String;
105-
public fun getPlainThreadName (I)Ljava/lang/String;
106-
public fun getStackTraceElement (JBI)Ljava/lang/StackTraceElement;
107-
public fun getThreadName (I)Ljava/lang/String;
108-
protected fun getThreadStates (Z)Ljava/util/BitSet;
109-
protected fun isNativeFrame (B)Z
110-
protected fun toThreadState (Ljava/lang/String;)I
111-
protected fun toTicks (J)J
112-
}
113-
114-
protected abstract class io/sentry/asyncprofiler/vendor/asyncprofiler/convert/JfrConverter$AggregatedEventVisitor : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector$Visitor {
115-
protected fun <init> (Lio/sentry/asyncprofiler/vendor/asyncprofiler/convert/JfrConverter;)V
116-
protected abstract fun visit (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;J)V
117-
public final fun visit (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;JJ)V
118-
}
119-
120-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/ClassRef {
121-
public final field name J
122-
public fun <init> (J)V
123-
}
124-
125-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary {
126-
public fun <init> ()V
127-
public fun <init> (I)V
128-
public fun clear ()V
129-
public fun forEach (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary$Visitor;)V
130-
public fun get (J)Ljava/lang/Object;
131-
public fun preallocate (I)I
132-
public fun put (JLjava/lang/Object;)V
133-
public fun size ()I
134-
}
135-
136-
public abstract interface class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary$Visitor {
137-
public abstract fun visit (JLjava/lang/Object;)V
138-
}
139-
140-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/DictionaryInt {
141-
public fun <init> ()V
142-
public fun <init> (I)V
143-
public fun clear ()V
144-
public fun forEach (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/DictionaryInt$Visitor;)V
145-
public fun get (J)I
146-
public fun get (JI)I
147-
public fun preallocate (I)I
148-
public fun put (JI)V
149-
}
150-
151-
public abstract interface class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/DictionaryInt$Visitor {
152-
public abstract fun visit (JI)V
153-
}
154-
155-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrClass {
156-
public fun field (Ljava/lang/String;)Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrField;
157-
}
158-
159-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrField {
160-
}
161-
162-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrReader : java/io/Closeable {
163-
public field chunkEndNanos J
164-
public field chunkStartNanos J
165-
public field chunkStartTicks J
166-
public final field classes Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
167-
public field endNanos J
168-
public final field enums Ljava/util/Map;
169-
public final field javaThreads Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
170-
public final field methods Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
171-
public final field settings Ljava/util/Map;
172-
public final field stackTraces Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
173-
public field startNanos J
174-
public field startTicks J
175-
public field stopAtNewChunk Z
176-
public final field strings Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
177-
public final field symbols Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
178-
public final field threads Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
179-
public field ticksPerSec J
180-
public final field types Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/Dictionary;
181-
public final field typesByName Ljava/util/Map;
182-
public fun <init> (Ljava/lang/String;)V
183-
public fun <init> (Ljava/nio/ByteBuffer;)V
184-
public fun close ()V
185-
public fun durationNanos ()J
186-
public fun eof ()Z
187-
public fun getBytes ()[B
188-
public fun getDouble ()D
189-
public fun getEnumKey (Ljava/lang/String;Ljava/lang/String;)I
190-
public fun getEnumValue (Ljava/lang/String;I)Ljava/lang/String;
191-
public fun getFloat ()F
192-
public fun getString ()Ljava/lang/String;
193-
public fun getVarint ()I
194-
public fun getVarlong ()J
195-
public fun hasMoreChunks ()Z
196-
public fun incomplete ()Z
197-
public fun readAllEvents ()Ljava/util/List;
198-
public fun readAllEvents (Ljava/lang/Class;)Ljava/util/List;
199-
public fun readEvent ()Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;
200-
public fun readEvent (Ljava/lang/Class;)Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;
201-
public fun registerEvent (Ljava/lang/String;Ljava/lang/Class;)V
202-
}
203-
204-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/MethodRef {
205-
public final field cls J
206-
public final field name J
207-
public final field sig J
208-
public fun <init> (JJJ)V
209-
}
210-
211-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/StackTrace {
212-
public final field locations [I
213-
public final field methods [J
214-
public final field types [B
215-
public fun <init> ([J[B[I)V
216-
}
217-
218-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/AllocationSample : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
219-
public final field allocationSize J
220-
public final field classId I
221-
public final field tlabSize J
222-
public fun <init> (JIIIJJ)V
223-
public fun classId ()J
224-
public fun hashCode ()I
225-
public fun sameGroup (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)Z
226-
public fun value ()J
227-
}
228-
229-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/CPULoad : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
230-
public final field jvmSystem F
231-
public final field jvmUser F
232-
public final field machineTotal F
233-
public fun <init> (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrReader;)V
234-
}
235-
236-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/ContendedLock : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
237-
public final field classId I
238-
public final field duration J
239-
public fun <init> (JIIJI)V
240-
public fun classId ()J
241-
public fun hashCode ()I
242-
public fun sameGroup (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)Z
243-
public fun value ()J
244-
}
245-
246-
public abstract class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event : java/lang/Comparable {
247-
public final field stackTraceId I
248-
public final field tid I
249-
public final field time J
250-
protected fun <init> (JII)V
251-
public fun classId ()J
252-
public fun compareTo (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)I
253-
public synthetic fun compareTo (Ljava/lang/Object;)I
254-
public fun hashCode ()I
255-
public fun sameGroup (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)Z
256-
public fun samples ()J
257-
public fun toString ()Ljava/lang/String;
258-
public fun value ()J
259-
}
260-
261-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventAggregator : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector {
262-
public fun <init> (ZD)V
263-
public fun afterChunk ()V
264-
public fun beforeChunk ()V
265-
public fun coarsen (D)V
266-
public fun collect (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)V
267-
public fun collect (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;JJ)V
268-
public fun finish ()Z
269-
public fun forEach (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector$Visitor;)V
270-
public fun size ()I
271-
}
272-
273-
public abstract interface class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector {
274-
public abstract fun afterChunk ()V
275-
public abstract fun beforeChunk ()V
276-
public abstract fun collect (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)V
277-
public abstract fun finish ()Z
278-
public abstract fun forEach (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector$Visitor;)V
279-
}
280-
281-
public abstract interface class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector$Visitor {
282-
public abstract fun visit (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;JJ)V
283-
}
284-
285-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/ExecutionSample : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
286-
public final field samples I
287-
public final field threadState I
288-
public fun <init> (JIIII)V
289-
public fun samples ()J
290-
public fun value ()J
291-
}
292-
293-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/GCHeapSummary : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
294-
public final field afterGC Z
295-
public final field committed J
296-
public final field gcId I
297-
public final field reserved J
298-
public final field used J
299-
public fun <init> (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrReader;)V
300-
}
301-
302-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/LiveObject : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
303-
public final field allocationSize J
304-
public final field allocationTime J
305-
public final field classId I
306-
public fun <init> (JIIIJJ)V
307-
public fun classId ()J
308-
public fun hashCode ()I
309-
public fun sameGroup (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)Z
310-
public fun value ()J
311-
}
312-
313-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/MallocEvent : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
314-
public final field address J
315-
public final field size J
316-
public fun <init> (JIIJJ)V
317-
public fun value ()J
318-
}
319-
320-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/MallocLeakAggregator : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector {
321-
public fun <init> (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector;)V
322-
public fun afterChunk ()V
323-
public fun beforeChunk ()V
324-
public fun collect (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event;)V
325-
public fun finish ()Z
326-
public fun forEach (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/EventCollector$Visitor;)V
327-
}
328-
329-
public final class io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/ObjectCount : io/sentry/asyncprofiler/vendor/asyncprofiler/jfr/event/Event {
330-
public final field classId I
331-
public final field count J
332-
public final field gcId I
333-
public final field totalSize J
334-
public fun <init> (Lio/sentry/asyncprofiler/vendor/asyncprofiler/jfr/JfrReader;)V
335-
}
336-

sentry-async-profiler/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ kotlin { explicitApi() }
2020
dependencies {
2121
api(projects.sentry)
2222

23-
implementation("tools.profiler:async-profiler:3.0")
23+
implementation("tools.profiler:async-profiler:4.2")
24+
implementation("tools.profiler:jfr-converter:4.2")
2425

2526
compileOnly(libs.jetbrains.annotations)
2627
compileOnly(libs.nopen.annotations)

sentry-async-profiler/src/main/java/io/sentry/asyncprofiler/convert/JfrAsyncProfilerToSentryProfileConverter.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@
55
import io.sentry.Sentry;
66
import io.sentry.SentryLevel;
77
import io.sentry.SentryStackTraceFactory;
8-
import io.sentry.asyncprofiler.vendor.asyncprofiler.convert.Arguments;
9-
import io.sentry.asyncprofiler.vendor.asyncprofiler.convert.JfrConverter;
10-
import io.sentry.asyncprofiler.vendor.asyncprofiler.jfr.JfrReader;
11-
import io.sentry.asyncprofiler.vendor.asyncprofiler.jfr.StackTrace;
12-
import io.sentry.asyncprofiler.vendor.asyncprofiler.jfr.event.Event;
13-
import io.sentry.asyncprofiler.vendor.asyncprofiler.jfr.event.EventCollector;
148
import io.sentry.protocol.SentryStackFrame;
159
import io.sentry.protocol.profiling.SentryProfile;
1610
import io.sentry.protocol.profiling.SentrySample;
@@ -20,6 +14,12 @@
2014
import java.util.HashMap;
2115
import java.util.List;
2216
import java.util.Map;
17+
import one.convert.Arguments;
18+
import one.convert.JfrConverter;
19+
import one.jfr.JfrReader;
20+
import one.jfr.StackTrace;
21+
import one.jfr.event.Event;
22+
import one.jfr.event.EventCollector;
2323
import org.jetbrains.annotations.ApiStatus;
2424
import org.jetbrains.annotations.NotNull;
2525
import org.jetbrains.annotations.Nullable;
@@ -247,6 +247,11 @@ private String extractSanitizedClassName(String classNameWithLambdas) {
247247
}
248248
}
249249

250+
private String getPlainThreadName(int tid) {
251+
String threadName = jfr.threads.get(tid);
252+
return threadName == null ? "[tid=" + tid + ']' : threadName;
253+
}
254+
250255
private boolean hasPackageStructure(String className) {
251256
return className.lastIndexOf('.') > 0;
252257
}

sentry-async-profiler/src/main/java/io/sentry/asyncprofiler/convert/NonAggregatingEventCollector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.sentry.asyncprofiler.convert;
22

3-
import io.sentry.asyncprofiler.vendor.asyncprofiler.jfr.event.Event;
4-
import io.sentry.asyncprofiler.vendor.asyncprofiler.jfr.event.EventCollector;
53
import java.util.ArrayList;
64
import java.util.List;
5+
import one.jfr.event.Event;
6+
import one.jfr.event.EventCollector;
77
import org.jetbrains.annotations.ApiStatus;
88

99
@ApiStatus.Internal

sentry-async-profiler/src/main/java/io/sentry/asyncprofiler/profiling/JavaContinuousProfiler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,10 @@ private void start() {
230230
// Example command: start,jfr,event=wall,interval=9900us,file=/path/to/trace.jfr
231231
final String command =
232232
String.format(
233-
"start,jfr,event=wall,interval=%s,file=%s", profilingIntervalMicros, filename);
233+
"start,jfr,event=wall,nobatch,interval=%s,file=%s",
234+
profilingIntervalMicros, filename);
235+
236+
logger.log(SentryLevel.INFO, command);
234237

235238
profiler.execute(command);
236239

0 commit comments

Comments
 (0)