intel / intel/rohd

A way to dispose of unnecessary `Simulator` subscriptions

Open
#516 1 comment 0 reactions 0 assignees View on GitHub
enhancement
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.