-
Notifications
You must be signed in to change notification settings - Fork 344
Use symbol instead of weak map for associating data with contexts #6276
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Overall package sizeSelf size: 11.35 MB Dependency sizes| name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.1.0 | 20.37 MB | 20.37 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.9.0 | 9.77 MB | 10.14 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 | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.14.2 | 122.36 kB | 850.93 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 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 | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 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❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #6276 +/- ##
==========================================
- Coverage 83.97% 82.95% -1.02%
==========================================
Files 471 462 -9
Lines 19516 19571 +55
==========================================
- Hits 16388 16235 -153
- Misses 3128 3336 +208 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
042b8bb
to
a5bd5f9
Compare
BenchmarksBenchmark execution time: 2025-08-13 12:07:34 Comparing candidate commit a5bd5f9 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 1271 metrics, 52 unstable metrics. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice change! LGTM
…ntexts (#6276) * Use symbol instead of weak map for associating data with contexts * Use private fields in EventPlugin
…ntexts (#6276) * Use symbol instead of weak map for associating data with contexts * Use private fields in EventPlugin
…ntexts (#6276) * Use symbol instead of weak map for associating data with contexts * Use private fields in EventPlugin
What does this PR do?
Binds profiler event specific data into context objects using a symbol instead of using a WeakMap.
Motivation
As discussed in #6267, the WeakMap solution strongly referenced the callback context object (the key in the map) from the value. Binding the data we need to track in a symbol property of the context object itself solves this problem.
As an additional bonus, since the context object is passed to the
finish
method we no longer need to keep track of it instart
, reducing the data set to only the event start time. This way, we could eliminate the need for an intermediate object for storing the tuple of{ startEvent, startTime }
.Additional info
I took the opportunity to also introduce private fields in the
EventPlugin
class – this is broken into its own commit for ease of review.