Skip to content

Commit 34a8bfd

Browse files
authored
Update profiling release field (#2371)
* updated profile schema: - replaced versionCode with an empty string on new envelopes - replaced versionName with release string * added test
1 parent 31f3e4c commit 34a8bfd

File tree

5 files changed

+56
-66
lines changed

5 files changed

+56
-66
lines changed

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

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import android.annotation.SuppressLint;
77
import android.app.ActivityManager;
88
import android.content.Context;
9-
import android.content.pm.PackageInfo;
109
import android.os.Build;
1110
import android.os.Debug;
1211
import android.os.Process;
@@ -61,7 +60,6 @@ final class AndroidTransactionProfiler implements ITransactionProfiler {
6160
private final @NotNull SentryAndroidOptions options;
6261
private final @NotNull IHub hub;
6362
private final @NotNull BuildInfoProvider buildInfoProvider;
64-
private final @Nullable PackageInfo packageInfo;
6563
private long transactionStartNanos = 0;
6664
private long profileStartCpuMillis = 0;
6765
private boolean isInitialized = false;
@@ -103,7 +101,6 @@ public AndroidTransactionProfiler(
103101
Objects.requireNonNull(frameMetricsCollector, "SentryFrameMetricsCollector is required");
104102
this.buildInfoProvider =
105103
Objects.requireNonNull(buildInfoProvider, "The BuildInfoProvider is required.");
106-
this.packageInfo = ContextUtils.getPackageInfo(context, options.getLogger(), buildInfoProvider);
107104
}
108105

109106
private void init() {
@@ -316,14 +313,8 @@ private void onLastTransactionFinished(final ITransaction transaction, final boo
316313
return;
317314
}
318315

319-
String versionName = "";
320-
String versionCode = "";
321316
String totalMem = "0";
322317
ActivityManager.MemoryInfo memInfo = getMemInfo();
323-
if (packageInfo != null) {
324-
versionName = ContextUtils.getVersionName(packageInfo);
325-
versionCode = ContextUtils.getVersionCode(packageInfo, buildInfoProvider);
326-
}
327318
if (memInfo != null) {
328319
totalMem = Long.toString(memInfo.totalMem);
329320
}
@@ -373,8 +364,7 @@ private void onLastTransactionFinished(final ITransaction transaction, final boo
373364
buildInfoProvider.isEmulator(),
374365
totalMem,
375366
options.getProguardUuid(),
376-
versionName,
377-
versionCode,
367+
options.getRelease(),
378368
options.getEnvironment(),
379369
isTimeout
380370
? ProfilingTraceData.TRUNCATION_REASON_TIMEOUT

sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,20 @@ class AndroidTransactionProfilerTest {
368368
}
369369

370370
@Test
371+
fun `profiling trace data contains release field`() {
372+
val profiler = fixture.getSut(context)
373+
profiler.onTransactionStart(fixture.transaction1)
374+
profiler.onTransactionFinish(fixture.transaction1)
375+
verify(fixture.hub).captureEnvelope(
376+
check {
377+
assertEnvelopeItem<ProfilingTraceData>(it.items.toList()) { _, item ->
378+
assertEquals(fixture.options.release, item.release)
379+
assertNotNull(item.release)
380+
}
381+
}
382+
)
383+
}
384+
371385
fun `profiler starts collecting frame metrics when the first transaction starts`() {
372386
val profiler = fixture.getSut(context)
373387
profiler.onTransactionStart(fixture.transaction1)

sentry/api/sentry.api

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ public final class io/sentry/ProfilingTraceData : io/sentry/JsonSerializable, io
836836
public static final field TRUNCATION_REASON_NORMAL Ljava/lang/String;
837837
public static final field TRUNCATION_REASON_TIMEOUT Ljava/lang/String;
838838
public fun <init> (Ljava/io/File;Lio/sentry/ITransaction;)V
839-
public fun <init> (Ljava/io/File;Ljava/util/List;Lio/sentry/ITransaction;Ljava/lang/String;ILjava/lang/String;Ljava/util/concurrent/Callable;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
839+
public fun <init> (Ljava/io/File;Ljava/util/List;Lio/sentry/ITransaction;Ljava/lang/String;ILjava/lang/String;Ljava/util/concurrent/Callable;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
840840
public fun getAndroidApiLevel ()I
841841
public fun getBuildId ()Ljava/lang/String;
842842
public fun getCpuArchitecture ()Ljava/lang/String;
@@ -853,6 +853,7 @@ public final class io/sentry/ProfilingTraceData : io/sentry/JsonSerializable, io
853853
public fun getMeasurementsMap ()Ljava/util/Map;
854854
public fun getPlatform ()Ljava/lang/String;
855855
public fun getProfileId ()Ljava/lang/String;
856+
public fun getRelease ()Ljava/lang/String;
856857
public fun getSampledProfile ()Ljava/lang/String;
857858
public fun getTraceFile ()Ljava/io/File;
858859
public fun getTraceId ()Ljava/lang/String;
@@ -861,8 +862,6 @@ public final class io/sentry/ProfilingTraceData : io/sentry/JsonSerializable, io
861862
public fun getTransactions ()Ljava/util/List;
862863
public fun getTruncationReason ()Ljava/lang/String;
863864
public fun getUnknown ()Ljava/util/Map;
864-
public fun getVersionCode ()Ljava/lang/String;
865-
public fun getVersionName ()Ljava/lang/String;
866865
public fun isDeviceIsEmulator ()Z
867866
public fun readDeviceCpuFrequencies ()V
868867
public fun serialize (Lio/sentry/JsonObjectWriter;Lio/sentry/ILogger;)V
@@ -880,15 +879,14 @@ public final class io/sentry/ProfilingTraceData : io/sentry/JsonSerializable, io
880879
public fun setDurationNs (Ljava/lang/String;)V
881880
public fun setEnvironment (Ljava/lang/String;)V
882881
public fun setProfileId (Ljava/lang/String;)V
882+
public fun setRelease (Ljava/lang/String;)V
883883
public fun setSampledProfile (Ljava/lang/String;)V
884884
public fun setTraceId (Ljava/lang/String;)V
885885
public fun setTransactionId (Ljava/lang/String;)V
886886
public fun setTransactionName (Ljava/lang/String;)V
887887
public fun setTransactions (Ljava/util/List;)V
888888
public fun setTruncationReason (Ljava/lang/String;)V
889889
public fun setUnknown (Ljava/util/Map;)V
890-
public fun setVersionCode (Ljava/lang/String;)V
891-
public fun setVersionName (Ljava/lang/String;)V
892890
}
893891

894892
public final class io/sentry/ProfilingTraceData$Deserializer : io/sentry/JsonDeserializer {
@@ -915,14 +913,14 @@ public final class io/sentry/ProfilingTraceData$JsonKeys {
915913
public static final field MEASUREMENTS Ljava/lang/String;
916914
public static final field PLATFORM Ljava/lang/String;
917915
public static final field PROFILE_ID Ljava/lang/String;
916+
public static final field RELEASE Ljava/lang/String;
918917
public static final field SAMPLED_PROFILE Ljava/lang/String;
919918
public static final field TRACE_ID Ljava/lang/String;
920919
public static final field TRANSACTION_ID Ljava/lang/String;
921920
public static final field TRANSACTION_LIST Ljava/lang/String;
922921
public static final field TRANSACTION_NAME Ljava/lang/String;
923922
public static final field TRUNCATION_REASON Ljava/lang/String;
924923
public static final field VERSION_CODE Ljava/lang/String;
925-
public static final field VERSION_NAME Ljava/lang/String;
926924
public fun <init> ()V
927925
}
928926

sentry/src/main/java/io/sentry/ProfilingTraceData.java

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ public final class ProfilingTraceData implements JsonUnknown, JsonSerializable {
5555
private @NotNull String durationNs;
5656

5757
// App info
58-
private @NotNull String versionName;
5958
private @NotNull String versionCode;
59+
private @NotNull String release;
6060

6161
// Stacktrace context
6262
private @NotNull String transactionId;
@@ -93,29 +93,27 @@ public ProfilingTraceData(
9393
null,
9494
null,
9595
null,
96-
null,
9796
TRUNCATION_REASON_NORMAL,
9897
new HashMap<>());
9998
}
10099

101100
public ProfilingTraceData(
102-
final @NotNull File traceFile,
103-
final @NotNull List<ProfilingTransactionData> transactions,
104-
final @NotNull ITransaction transaction,
105-
final @NotNull String durationNanos,
106-
final int sdkInt,
107-
final @NotNull String cpuArchitecture,
108-
final @NotNull Callable<List<Integer>> deviceCpuFrequenciesReader,
109-
final @Nullable String deviceManufacturer,
110-
final @Nullable String deviceModel,
111-
final @Nullable String deviceOsVersion,
112-
final @Nullable Boolean deviceIsEmulator,
113-
final @Nullable String devicePhysicalMemoryBytes,
114-
final @Nullable String buildId,
115-
final @Nullable String versionName,
116-
final @Nullable String versionCode,
117-
final @Nullable String environment,
118-
final @NotNull String truncationReason,
101+
@NotNull File traceFile,
102+
@NotNull List<ProfilingTransactionData> transactions,
103+
@NotNull ITransaction transaction,
104+
@NotNull String durationNanos,
105+
int sdkInt,
106+
@NotNull String cpuArchitecture,
107+
@NotNull Callable<List<Integer>> deviceCpuFrequenciesReader,
108+
@Nullable String deviceManufacturer,
109+
@Nullable String deviceModel,
110+
@Nullable String deviceOsVersion,
111+
@Nullable Boolean deviceIsEmulator,
112+
@Nullable String devicePhysicalMemoryBytes,
113+
@Nullable String buildId,
114+
@Nullable String release,
115+
@Nullable String environment,
116+
@NotNull String truncationReason,
119117
final @NotNull Map<String, ProfileMeasurement> measurementsMap) {
120118
this.traceFile = traceFile;
121119
this.cpuArchitecture = cpuArchitecture;
@@ -141,8 +139,8 @@ public ProfilingTraceData(
141139
this.durationNs = durationNanos;
142140

143141
// App info
144-
this.versionName = versionName != null ? versionName : "";
145-
this.versionCode = versionCode != null ? versionCode : "";
142+
this.versionCode = "";
143+
this.release = release != null ? release : "";
146144

147145
// Stacktrace context
148146
this.transactionId = transaction.getEventId().toString();
@@ -216,12 +214,8 @@ public boolean isDeviceIsEmulator() {
216214
return transactionName;
217215
}
218216

219-
public @NotNull String getVersionName() {
220-
return versionName;
221-
}
222-
223-
public @NotNull String getVersionCode() {
224-
return versionCode;
217+
public @NotNull String getRelease() {
218+
return release;
225219
}
226220

227221
public @NotNull String getTransactionId() {
@@ -328,12 +322,8 @@ public void setDurationNs(final @NotNull String durationNs) {
328322
this.durationNs = durationNs;
329323
}
330324

331-
public void setVersionName(final @NotNull String versionName) {
332-
this.versionName = versionName;
333-
}
334-
335-
public void setVersionCode(final @NotNull String versionCode) {
336-
this.versionCode = versionCode;
325+
public void setRelease(@NotNull String release) {
326+
this.release = release;
337327
}
338328

339329
public void setTransactionId(final @NotNull String transactionId) {
@@ -382,7 +372,7 @@ public static final class JsonKeys {
382372
public static final String BUILD_ID = "build_id";
383373
public static final String TRANSACTION_NAME = "transaction_name";
384374
public static final String DURATION_NS = "duration_ns";
385-
public static final String VERSION_NAME = "version_name";
375+
public static final String RELEASE = "version_name";
386376
public static final String VERSION_CODE = "version_code";
387377
public static final String TRANSACTION_LIST = "transactions";
388378
public static final String TRANSACTION_ID = "transaction_id";
@@ -414,7 +404,7 @@ public void serialize(final @NotNull JsonObjectWriter writer, final @NotNull ILo
414404
writer.name(JsonKeys.BUILD_ID).value(buildId);
415405
writer.name(JsonKeys.TRANSACTION_NAME).value(transactionName);
416406
writer.name(JsonKeys.DURATION_NS).value(durationNs);
417-
writer.name(JsonKeys.VERSION_NAME).value(versionName);
407+
writer.name(JsonKeys.RELEASE).value(release);
418408
writer.name(JsonKeys.VERSION_CODE).value(versionCode);
419409
if (!transactions.isEmpty()) {
420410
writer.name(JsonKeys.TRANSACTION_LIST).value(logger, transactions);
@@ -552,18 +542,18 @@ public static final class Deserializer implements JsonDeserializer<ProfilingTrac
552542
data.durationNs = durationNs;
553543
}
554544
break;
555-
case JsonKeys.VERSION_NAME:
556-
String versionName = reader.nextStringOrNull();
557-
if (versionName != null) {
558-
data.versionName = versionName;
559-
}
560-
break;
561545
case JsonKeys.VERSION_CODE:
562546
String versionCode = reader.nextStringOrNull();
563547
if (versionCode != null) {
564548
data.versionCode = versionCode;
565549
}
566550
break;
551+
case JsonKeys.RELEASE:
552+
String versionName = reader.nextStringOrNull();
553+
if (versionName != null) {
554+
data.release = versionName;
555+
}
556+
break;
567557
case JsonKeys.TRANSACTION_LIST:
568558
List<ProfilingTransactionData> transactions =
569559
reader.nextList(logger, new ProfilingTransactionData.Deserializer());

sentry/src/test/java/io/sentry/JsonSerializerTest.kt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -509,8 +509,7 @@ class JsonSerializerTest {
509509
)
510510
profilingTraceData.transactionName = "transactionName"
511511
profilingTraceData.durationNs = "100"
512-
profilingTraceData.versionName = "versionName"
513-
profilingTraceData.versionCode = "versionCode"
512+
profilingTraceData.release = "release"
514513
profilingTraceData.transactionId = "transactionId"
515514
profilingTraceData.traceId = "traceId"
516515
profilingTraceData.profileId = "profileId"
@@ -585,8 +584,8 @@ class JsonSerializerTest {
585584
)
586585
assertEquals("transactionName", element["transaction_name"] as String)
587586
assertEquals("100", element["duration_ns"] as String)
588-
assertEquals("versionName", element["version_name"] as String)
589-
assertEquals("versionCode", element["version_code"] as String)
587+
assertEquals("release", element["version_name"] as String)
588+
assertEquals("", element["version_code"] as String)
590589
assertEquals("transactionId", element["transaction_id"] as String)
591590
assertEquals("traceId", element["trace_id"] as String)
592591
assertEquals("profileId", element["profile_id"] as String)
@@ -643,8 +642,8 @@ class JsonSerializerTest {
643642
},
644643
"transaction_name":"transactionName",
645644
"duration_ns":"100",
646-
"version_name":"versionName",
647-
"version_code":"versionCode",
645+
"version_name":"release",
646+
"version_code":"",
648647
"transaction_id":"transactionId",
649648
"trace_id":"traceId",
650649
"profile_id":"profileId",
@@ -697,8 +696,7 @@ class JsonSerializerTest {
697696
assertEquals(expectedMeasurements, profilingTraceData.measurementsMap)
698697
assertEquals("transactionName", profilingTraceData.transactionName)
699698
assertEquals("100", profilingTraceData.durationNs)
700-
assertEquals("versionName", profilingTraceData.versionName)
701-
assertEquals("versionCode", profilingTraceData.versionCode)
699+
assertEquals("release", profilingTraceData.release)
702700
assertEquals("transactionId", profilingTraceData.transactionId)
703701
assertEquals("traceId", profilingTraceData.traceId)
704702
assertEquals("profileId", profilingTraceData.profileId)

0 commit comments

Comments
 (0)