-
Notifications
You must be signed in to change notification settings - Fork 309
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
[DI] Adhere to maxCollectionSize limit in snapshots #4780
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Overall package sizeSelf size: 7.58 MB Dependency sizes| name | version | self size | total size | |------|---------|-----------|------------| | @datadog/native-appsec | 8.1.1 | 18.67 MB | 18.68 MB | | @datadog/native-iast-taint-tracking | 3.1.0 | 12.27 MB | 12.28 MB | | @datadog/pprof | 5.3.0 | 9.85 MB | 10.22 MB | | protobufjs | 7.2.5 | 2.77 MB | 5.16 MB | | @datadog/native-iast-rewriter | 2.5.0 | 2.51 MB | 2.65 MB | | @opentelemetry/core | 1.14.0 | 872.87 kB | 1.47 MB | | @datadog/native-metrics | 2.0.0 | 898.77 kB | 1.3 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.11.2 | 112.74 kB | 826.22 kB | | msgpack-lite | 0.1.26 | 201.16 kB | 281.59 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.0 | 109.9 kB | 109.9 kB | | semver | 7.6.3 | 95.82 kB | 95.82 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.1 | 51.46 kB | 51.46 kB | | int64-buffer | 0.1.10 | 49.18 kB | 49.18 kB | | shell-quote | 1.8.1 | 44.96 kB | 44.96 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.3.1 | 25.21 kB | 25.21 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | dc-polyfill | 0.1.4 | 23.1 kB | 23.1 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | path-to-regexp | 0.1.10 | 6.38 kB | 6.38 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 |
BenchmarksBenchmark execution time: 2024-10-22 13:15:56 Comparing candidate commit 879b353 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 260 metrics, 6 unstable metrics. |
8012b31
to
5c33caf
Compare
The maxCollectionSize limit affects the following types: - Array - Map / WeakMap - Set / WeakSet - All TypedArray types This limit contols the maximum about of elements collected for those types. The default is 100.
5c33caf
to
879b353
Compare
if (collection) { | ||
// Trim the collection if it's too large. | ||
// Collections doesn't contain private properties, so the code in this block doesn't have to deal with it. | ||
removeNonEnumerableProperties(result) // remove the `length` property | ||
const size = result.length | ||
if (size > opts.maxCollectionSize) { | ||
result.splice(opts.maxCollectionSize) | ||
result[collectionSizeSym] = size | ||
} | ||
} else if (privateProperties) { | ||
result.push(...privateProperties) | ||
} |
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.
Note: It's on purpose that I do not take into account the scenario where collection === true
and privateProperties !== undefined
. This is because, currently, the only time collection === true
, is when we're either getting the properties of an Array
or a TypedArray
. For those two object types, we know in advance that there's no private properties, so we can make the code simpler by not having to deal with that edge case.
If we wanted to deal with this, the code would look like this:
if (collection) { | |
// Trim the collection if it's too large. | |
// Collections doesn't contain private properties, so the code in this block doesn't have to deal with it. | |
removeNonEnumerableProperties(result) // remove the `length` property | |
const size = result.length | |
if (size > opts.maxCollectionSize) { | |
result.splice(opts.maxCollectionSize) | |
result[collectionSizeSym] = size | |
} | |
} else if (privateProperties) { | |
result.push(...privateProperties) | |
} | |
if (collection) { | |
const privatePropertiesSize = privateProperties?.length ?? 0 | |
const totalSize = countEnumerableProperties(result) + privatePropertiesSize | |
if (totalSize > opts.maxCollectionSize) { | |
// Prioritize private properties over regular properties | |
const spaceForNonPrivateProperties = Math.max(opts.maxCollectionSize - privatePropertiesSize, 0) | |
result = result.slice(0, spaceForNonPrivateProperties) | |
result[collectionSizeSym] = totalSize | |
if (privateProperties) { | |
const remainingSize = opts.maxCollectionSize - result.length | |
if (privatePropertiesSize > remainingSize) { | |
privateProperties = privateProperties.slice(0, remainingSize) | |
} | |
} | |
} | |
} | |
if (privateProperties) result.push(...privateProperties) |
The maxCollectionSize limit affects the following types: - Array - Map / WeakMap - Set / WeakSet - All TypedArray types This limit contols the maximum about of elements collected for those types. The default is 100.
The maxCollectionSize limit affects the following types: - Array - Map / WeakMap - Set / WeakSet - All TypedArray types This limit contols the maximum about of elements collected for those types. The default is 100.
The maxCollectionSize limit affects the following types: - Array - Map / WeakMap - Set / WeakSet - All TypedArray types This limit contols the maximum about of elements collected for those types. The default is 100.
The maxCollectionSize limit affects the following types: - Array - Map / WeakMap - Set / WeakSet - All TypedArray types This limit contols the maximum about of elements collected for those types. The default is 100.
The maxCollectionSize limit affects the following types: - Array - Map / WeakMap - Set / WeakSet - All TypedArray types This limit contols the maximum about of elements collected for those types. The default is 100.
The
maxCollectionSize
limit affects the following types:Array
Map
/WeakMap
Set
/WeakSet
TypedArray
types (UInt8Array
etc)This limit contols the maximum about of elements collected for those types. The default is 100.
If, for example, an array contains more than the allowed amount of elements, a
notCapturedReason
ofcollectionSize
is added to the collected array and the original size of the array is also captured.