A way to dispose of unnecessary `Simulator` subscriptions
- Dominant language
- Dart
- Stars
- 489
- Forks
- 88
- Avg merge
- 3d 23h
- Merged PRs (30d)
- 10
Description
### Motivation
When running many tests, it may be necessary to build many versions of the same or different `Module`s, each with a variety of their own `Logic`s. The `_Wire`s within `Logic`s have automation to re-subscribe to `Simulator` events after a `Simulator.reset` so that they still functionally work (e.g. for reusing same hardware between tests/simulator resets). However, if you are "throwing away" the old reference to some DUT, and you don't want to simulate with it anymore, you don't care that the `Logic`s within are properly simulating and triggering events like `changed`. In this case, each time you throw away hardware, you're paying a penalty for future simulations on `Simulator` events.
One of the most problematic issues is that `Simulator.resetRequested` is re-subscribed every time. Then, if you have a `tearDown` where `Simulator.reset()` is called, the call will get progressively slower as it has to restart more and more subscriptions each test.
This only really impacts test files with many `Simulator.reset` calls (many tests, many DUTs, etc.).
### Desired solution
Some mechanism to signal that `Simulator` subscriptions should be disposed of, rather than just restarted. A way to clean up all the old hardware between tests.
### Alternatives considered
- A new event that the `Simulator` can send out indicating things should be disposed of permanently
- A way to "trick" things that attempt into resubscribing into actually re-subscribing to the same old event before it is removed (i.e. lying to subscribers about the new subscription being ready to use)
- Something else?
### Additional details
_No response_
Contributor guide
Assessment
This issue has not been assessed yet.