dd-trace-js
dd-trace-js copied to clipboard
add event loop and gc configuration for runtime metrics
What does this PR do?
Add event loop and GC configuration for runtime metrics.
Motivation
Allow finer control on the types of metrics to collect, especially on the native front. Allowing to pick which GC collector to use can also be used to work around issues with one of the collector by temporarily switching to a different one.
Overall package size
Self size: 9.62 MB Deduped: 106.12 MB No deduping: 106.64 MB
Dependency sizes
| name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 8.5.2 | 19.33 MB | 19.34 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.8.2 | 9.56 MB | 9.93 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.3 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.14.0 | 120.58 kB | 841.68 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.2 | 53.63 kB | 53.63 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | dc-polyfill | 0.1.9 | 25.11 kB | 25.11 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.2 | 23.54 kB | 23.54 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |🤖 This report was automatically generated by heaviest-objects-in-the-universe
Codecov Report
Attention: Patch coverage is 96.15385% with 1 line in your changes missing coverage. Please review.
Project coverage is 79.44%. Comparing base (
9099b48) to head (b3cd2bb). Report is 3 commits behind head on master.
| Files with missing lines | Patch % | Lines |
|---|---|---|
| ...es/dd-trace/src/runtime_metrics/runtime_metrics.js | 90.00% | 1 Missing :warning: |
Additional details and impacted files
@@ Coverage Diff @@
## master #5913 +/- ##
==========================================
- Coverage 80.53% 79.44% -1.10%
==========================================
Files 454 432 -22
Lines 19372 18683 -689
==========================================
- Hits 15602 14843 -759
- Misses 3770 3840 +70
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
Datadog Report
Branch report: runtime-metrics-gc-loop-config
Commit report: ed30776
Test service: dd-trace-js-integration-tests
:white_check_mark: 0 Failed, 1260 Passed, 0 Skipped, 20m 22.87s Total Time
Benchmarks
Benchmark execution time: 2025-06-27 14:40:28
Comparing candidate commit b3cd2bbcbe2c9321a665543a59f42fc3844efeba in PR branch runtime-metrics-gc-loop-config with baseline commit 9099b48196c246f6bd4ff47fbbd440dc6cdf6108 in branch master.
Found 0 performance improvements and 0 performance regressions! Performance is the same for 1268 metrics, 55 unstable metrics.
I did not yet properly look into it. I just wonder if we really want to support different implementations almost indefinitely, since that is likely the outcome for gcCollector (or we would have to make it a noop).
I don't think we'd want to keep them indefitely, but they are likely to stay for at least a few years, and after that we can indeed deprecate them and make configuring any implementation that no longer exists fall back to the default.