Files
sdk/pkg/dart2wasm/test/ir_tests/import_name.wat
Martin Kustermann 3030208174 [dart2wasm] Implement fine grained deferred module splitting
This shrinks essentials main module by 13% (-1.4 MB)

Before this CL the splitting of the application into wasm modules
was done on a library granularity level.

Now we split the application based on "static element" granularity -
those elements are:

  * Static fields
  * Static getters, setters, methods
  * Constructors
  * Class (all instance fields & methods)

This means that moving a class or static methods/fields from one library
to another will have no effect on the partitioning.

Differences to dart2js:

  * No tracking of local functions
  * No tracking of types
  * No split constraint support (yet)
  * (Works on Kernel AST instead of dart2js element/entity model)

The code is organized into

* `pkg/dart2wasm/lib/deferred_load/import_set.dart`
   This is almost identical to the dartj2s version with minor differences:
    - works on `LibraryDependency` objects
    - does not assign names to parts
    - no split constraint support (yet)

* `pkg/dart2wasm/lib/deferred_load/dependencies.dart`
   This is a new implementation that collects dependencies of
   `Reference`s/`Constant`s and in case of `Reference` whether the
   dependencies are deferred or not.

* `pkg/dart2wasm/lib/deferred_load/partition.dart`
   This is the main algorithm (core logic is the same as in dart2js)
   `Reference`s/`Constant`s and (in case of `Reference`) whether the
   dependencies are accessed under deferred loading guard or not.

Change-Id: I0fcdf86f5226060738671a1f69bb14cfffd631e8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/467041
Reviewed-by: Ömer Ağacan <omersa@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2025-12-11 04:50:39 -08:00

2 lines
18 B
WebAssembly Text Format