Skip to content

[Debugger] improve snapshot performance#5419

Merged
watson merged 8 commits intomasterfrom
improve-debugger-perf
Apr 1, 2025
Merged

[Debugger] improve snapshot performance#5419
watson merged 8 commits intomasterfrom
improve-debugger-perf

Conversation

@BridgeAR
Copy link
Copy Markdown
Member

The sync code got a tad optimized (dense instead of sparse arrays and some other minor improvements). The async parts now also run in parallel.
These changes do not make a big difference effectively due to the overhead of the inspector calls themselves.

@BridgeAR BridgeAR requested a review from watson March 14, 2025 14:49
@BridgeAR BridgeAR requested review from a team as code owners March 14, 2025 14:49
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 14, 2025

Overall package size

Self size: 9.14 MB
Deduped: 101.67 MB
No deduping: 102.19 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.5.0 | 29.83 MB | 29.83 MB | | @datadog/native-appsec | 8.5.1 | 19.26 MB | 19.27 MB | | @datadog/native-iast-taint-tracking | 3.3.0 | 13.77 MB | 13.78 MB | | @datadog/pprof | 5.6.0 | 9.79 MB | 10.16 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.4.0 | 2.77 MB | 5.42 MB | | @datadog/native-iast-rewriter | 2.8.0 | 2.6 MB | 2.74 MB | | @datadog/native-metrics | 3.1.0 | 1.06 MB | 1.46 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.13.1 | 117.64 kB | 839.26 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.0 | 29.34 kB | 29.34 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | dc-polyfill | 0.1.6 | 24.56 kB | 24.56 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 | | 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.3 | 4.47 kB | 4.47 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@datadog-datadog-prod-us1
Copy link
Copy Markdown

datadog-datadog-prod-us1 Bot commented Mar 14, 2025

Datadog Report

Branch report: improve-debugger-perf
Commit report: 070c197
Test service: dd-trace-js-integration-tests

✅ 0 Failed, 928 Passed, 0 Skipped, 12m 33.24s Total Time

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Mar 14, 2025

Benchmarks

Benchmark execution time: 2025-04-01 11:41:01

Comparing candidate commit b72b37c in PR branch improve-debugger-perf with baseline commit 29485d9 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 949 metrics, 14 unstable metrics.

@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 14, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 79.18%. Comparing base (29485d9) to head (b72b37c).
Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5419      +/-   ##
==========================================
+ Coverage   78.99%   79.18%   +0.18%     
==========================================
  Files         505      512       +7     
  Lines       22899    23156     +257     
==========================================
+ Hits        18090    18337     +247     
- Misses       4809     4819      +10     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@BridgeAR BridgeAR marked this pull request as draft March 14, 2025 17:50

t.agent.on('debugger-input', ({ payload: [{ 'debugger.snapshot': { captures } }] }) => {
const { locals } = captures.lines[t.breakpoint.line]
const promise = once(t.agent, 'debugger-input')
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: I personally like this way of writing tests. That way it's somewhat easier for me to follow the logic and the events are always definitely going to cause the error to fail in case of an error.

// Allow for a variance of +50ms (time will tell if this is enough)
assert.isAtLeast(duration, 1000)
// Allow for a time variance (time will tell if this is enough). Timeouts can vary.
assert.isAtLeast(duration, 925)
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this is an indicator for the improved performance, but I did not understand the timeout logic here.

'fastify', 'getUndefined'
'fastify', 'getUndefined',
// Up to 3 properties from the local scope
'request', 'nil', 'undef'
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The order should not be important, right?

@BridgeAR BridgeAR marked this pull request as ready for review March 14, 2025 18:31
@BridgeAR
Copy link
Copy Markdown
Member Author

Seems like this is triggering the AsyncHooks issue we faced recently constantly on 18.
I guess we have to consider waiting for a new major release where we drop support for Node.js 18.

The sync code got a tad optimized (dense instead of sparse arrays
and some other minor improvements). The async parts now also run in
parallel.
These changes do not make a big difference effectively due to the
overhead of the inspector calls themselves.
@BridgeAR BridgeAR force-pushed the improve-debugger-perf branch from 60cb3b5 to c00730a Compare March 28, 2025 19:02
This aligns the behavior, allows to update the action easier and
it makes sure we always use consistent versions.
@BridgeAR BridgeAR requested review from a team as code owners March 31, 2025 11:56
Comment thread packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js Outdated
watson
watson previously approved these changes Mar 31, 2025
Copy link
Copy Markdown
Collaborator

@watson watson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once the .github changes have been merged in a separate PR, this looks very good 👍

Comment thread packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js Outdated
@watson watson merged commit b4b2969 into master Apr 1, 2025
427 checks passed
@watson watson deleted the improve-debugger-perf branch April 1, 2025 11:44
wconti27 pushed a commit that referenced this pull request Apr 8, 2025
The sync code got a tad optimized (dense instead of sparse arrays
and some other minor improvements). The async parts now also run in
parallel.
These changes do not make a big difference effectively due to the
overhead of the inspector calls themselves.

Co-authored-by: Thomas Watson <w@tson.dk>
@wconti27 wconti27 mentioned this pull request Apr 8, 2025
wconti27 pushed a commit that referenced this pull request Apr 9, 2025
The sync code got a tad optimized (dense instead of sparse arrays
and some other minor improvements). The async parts now also run in
parallel.
These changes do not make a big difference effectively due to the
overhead of the inspector calls themselves.

Co-authored-by: Thomas Watson <w@tson.dk>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants