Skip to content

Commit ba01011

Browse files
runningcodeclaude
andauthored
perf: Avoid boxing in doubleToBigDecimal timestamp serialization (#5551)
* perf: Avoid boxing in doubleToBigDecimal timestamp serialization Change DateUtils.doubleToBigDecimal to take a primitive double instead of a boxed Double, and route the four duplicated private copies (ProfileChunk, ProfileMeasurementValue, SentrySample, SentrySpan) through it. Callers that hold a primitive double timestamp no longer autobox on every serialization, and the duplicated helpers are consolidated into one. Behavior is unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * changelog --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent e52b4e4 commit ba01011

7 files changed

Lines changed: 11 additions & 27 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
### Improvements
1414

15-
- Reduce boxing to improve performance ([#5523](https://github.com/getsentry/sentry-java/pull/5523), [#5527](https://github.com/getsentry/sentry-java/pull/5527))
15+
- Reduce boxing to improve performance ([#5523](https://github.com/getsentry/sentry-java/pull/5523), [#5527](https://github.com/getsentry/sentry-java/pull/5527), [#5551](https://github.com/getsentry/sentry-java/pull/5551))
1616

1717
### Dependencies
1818

sentry/api/sentry.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ public final class io/sentry/DataCategory : java/lang/Enum {
384384
public final class io/sentry/DateUtils {
385385
public static fun dateToNanos (Ljava/util/Date;)J
386386
public static fun dateToSeconds (Ljava/util/Date;)D
387-
public static fun doubleToBigDecimal (Ljava/lang/Double;)Ljava/math/BigDecimal;
387+
public static fun doubleToBigDecimal (D)Ljava/math/BigDecimal;
388388
public static fun getCurrentDateTime ()Ljava/util/Date;
389389
public static fun getDateTime (J)Ljava/util/Date;
390390
public static fun getDateTime (Ljava/lang/String;)Ljava/util/Date;

sentry/src/main/java/io/sentry/DateUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public static long secondsToNanos(final @NotNull long seconds) {
166166
return seconds * (1000L * 1000L * 1000L);
167167
}
168168

169-
public static @NotNull BigDecimal doubleToBigDecimal(final @NotNull Double value) {
169+
public static @NotNull BigDecimal doubleToBigDecimal(final double value) {
170170
return BigDecimal.valueOf(value).setScale(6, RoundingMode.DOWN);
171171
}
172172
}

sentry/src/main/java/io/sentry/ProfileChunk.java

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

3+
import static io.sentry.DateUtils.doubleToBigDecimal;
4+
35
import io.sentry.profilemeasurements.ProfileMeasurement;
46
import io.sentry.protocol.DebugMeta;
57
import io.sentry.protocol.SdkVersion;
@@ -8,8 +10,6 @@
810
import io.sentry.vendor.gson.stream.JsonToken;
911
import java.io.File;
1012
import java.io.IOException;
11-
import java.math.BigDecimal;
12-
import java.math.RoundingMode;
1313
import java.util.HashMap;
1414
import java.util.Map;
1515
import java.util.Objects;
@@ -264,10 +264,6 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger
264264
writer.endObject();
265265
}
266266

267-
private @NotNull BigDecimal doubleToBigDecimal(final @NotNull Double value) {
268-
return BigDecimal.valueOf(value).setScale(6, RoundingMode.DOWN);
269-
}
270-
271267
@Nullable
272268
@Override
273269
public Map<String, Object> getUnknown() {

sentry/src/main/java/io/sentry/profilemeasurements/ProfileMeasurementValue.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.sentry.profilemeasurements;
22

3+
import static io.sentry.DateUtils.doubleToBigDecimal;
4+
35
import io.sentry.DateUtils;
46
import io.sentry.ILogger;
57
import io.sentry.JsonDeserializer;
@@ -10,8 +12,6 @@
1012
import io.sentry.util.Objects;
1113
import io.sentry.vendor.gson.stream.JsonToken;
1214
import java.io.IOException;
13-
import java.math.BigDecimal;
14-
import java.math.RoundingMode;
1515
import java.util.Date;
1616
import java.util.Map;
1717
import java.util.concurrent.ConcurrentHashMap;
@@ -92,10 +92,6 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger
9292
writer.endObject();
9393
}
9494

95-
private @NotNull BigDecimal doubleToBigDecimal(final @NotNull Double value) {
96-
return BigDecimal.valueOf(value).setScale(6, RoundingMode.DOWN);
97-
}
98-
9995
@Nullable
10096
@Override
10197
public Map<String, Object> getUnknown() {

sentry/src/main/java/io/sentry/protocol/SentrySpan.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.sentry.protocol;
22

3+
import static io.sentry.DateUtils.doubleToBigDecimal;
4+
35
import io.sentry.DateUtils;
46
import io.sentry.ILogger;
57
import io.sentry.JsonDeserializer;
@@ -16,8 +18,6 @@
1618
import io.sentry.util.Objects;
1719
import io.sentry.vendor.gson.stream.JsonToken;
1820
import java.io.IOException;
19-
import java.math.BigDecimal;
20-
import java.math.RoundingMode;
2121
import java.util.Date;
2222
import java.util.HashMap;
2323
import java.util.Map;
@@ -230,10 +230,6 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger
230230
writer.endObject();
231231
}
232232

233-
private @NotNull BigDecimal doubleToBigDecimal(final @NotNull Double value) {
234-
return BigDecimal.valueOf(value).setScale(6, RoundingMode.DOWN);
235-
}
236-
237233
@Nullable
238234
@Override
239235
public Map<String, Object> getUnknown() {

sentry/src/main/java/io/sentry/protocol/profiling/SentrySample.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.sentry.protocol.profiling;
22

3+
import static io.sentry.DateUtils.doubleToBigDecimal;
4+
35
import io.sentry.ILogger;
46
import io.sentry.JsonDeserializer;
57
import io.sentry.JsonSerializable;
@@ -8,8 +10,6 @@
810
import io.sentry.ObjectWriter;
911
import io.sentry.vendor.gson.stream.JsonToken;
1012
import java.io.IOException;
11-
import java.math.BigDecimal;
12-
import java.math.RoundingMode;
1313
import java.util.HashMap;
1414
import java.util.Map;
1515
import org.jetbrains.annotations.ApiStatus;
@@ -78,10 +78,6 @@ public void serialize(@NotNull ObjectWriter writer, @NotNull ILogger logger) thr
7878
writer.endObject();
7979
}
8080

81-
private @NotNull BigDecimal doubleToBigDecimal(final @NotNull Double value) {
82-
return BigDecimal.valueOf(value).setScale(6, RoundingMode.DOWN);
83-
}
84-
8581
@Nullable
8682
@Override
8783
public Map<String, Object> getUnknown() {

0 commit comments

Comments
 (0)