Files
sdk/runtime/tests
Martin Kustermann 1504dc6362 [vm] Extend analyze_snapshot tool to emit more detailed information
In release builds most `Field` objects are tree shaken,
but if an instance field is e.g. a `late final` field then the `Field`
object is retained in the snapshot for the `LateInitializationError`
slow path. Though `Field` will not appear in `Class.fields()`, it
will only be referenced in the `ObjectPool`.

=> Instead of dumping `Class.fields()` we collect all `Field`s with
   the same owner and dump those (a superset of `Class.fields()`)

We dump more information for a `Field`: Whether it's a reference field
or unboxed field (in which case we dump what unboxed type it is). We
also dump field flags (e.g. `late`, `final`, `static`).

We also dump now a `instance_slots` property on the class which
describes every slot in the instance. If a slot in an instance
  * has a corresponding `Field` we emit `instance_field` type and
    the id of the `Field` object.
  * has no corresponding `Field` we emit a `unknown_slot` type
  * we emit whether the slot is a reference field

This brings the information the `analyze_snapshot` tool dumps closer to
what Blutter uses, but some differences remain, e.g.:

  * Blutter seems to scan constant instances of classes (if there's any)
    and tries to determine based on those constants what unboxed slots
    could mean.
    It may look at 8 bytes and "guess" whether it's more likely to be an
    integer or a double. (Side note: It doesn't consider
    `Float32x4`/`Float64x2`)
    => The guess can be incorrect, so we do not do that.

  * Blutter seems to scan constant instances of classes (if there's any)
    and tries to guess the type of a reference field based on what that
    constant's field points to.
    => The guess can be incorrect, so we do not do that.

go/dart-ama

TEST=vm/dart/analyze_snapshot_binary_test

Change-Id: I116560ba5e5f89d4349f2227362b8494e3af7a1c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/425261
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2025-05-05 01:04:25 -07:00
..