Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use smart subclassing in
ActionExecutionValue
to save memory.
There are currently four fields in `ActionExecutionValue`: 1. `ImmutableMap` for file outputs 2. `ImmutableMap` for tree artifact outputs 3. `ImmutableList` for fileset output symlinks 4. `NestedSet` for discovered modules However, some of these fields are mutually exclusive, and some only occur with a single file output. Subclasses are created for each distinct category of action. The majority of the memory savings in this change come from the `SingleOutputFile` class, which is used for the vast majority of actions. It saves memory by storing the single `Artifact` and `FileArtifactValue` as fields without even using a `Map`. Actions which output multiple files or trees still retain an `ImmutableMap`, but for those, additional memory is saved by using `Map#forEach` for iteration instead of `Map#entrySet`, which instantiates and retains a reference to the entry set. Some unit tests had to be cleaned up to match the newly enforced preconditions checks. Serialization tests for `ActionExecutionValue` are moved to `ActionExecutionValueTest`. PiperOrigin-RevId: 515420002 Change-Id: If4b84ee938a715733bcd817a7e70a1493413588e
- Loading branch information