Adds a new scheduler component to drmemtrace which provides flexibility in combining input traces and is meant to supply key features for simulation of traces.
This first stage adds a base scheduler which only supports the two analyzer modes: parallel software thread streams or a single serial stream.
The input file opening code and the input-to-worker code is moved from the analyzer to the scheduler. The analyzer now has to look at the tid fields in the stream records to identify shards to tools, but the input-to-worker does belong in the scheduler.
Removes the analyzer external iterator interface; tools should instead use the scheduler directly. Updates histogram_launcher and two tests to do this.
Adds a new scheduler unit test with a mocked reader that takes vectors of records, containing some initial sanity tests.
The scheduler takes in either file paths and opens its own readers for those, or it can be passed readers. This latter interface is used for online IPC readers, as well as for the unit test using a mocked reader. The IPC reader requires a delayed init() call which is handled by paying for a flag check on each stream advance.
To support -skip_instrs, region-of-interest code is implemented here. However, it requires fixing a problem in reader_t::skip_instructions() by adding a queue and a new use-prior-record method. (The queue can be merged with the file_reader_t queue later.) It might be nicer to separate that out but that would leave -skip_instrs not working.
Future work includes moving the serial mode interleaving from the file reader to the scheduler, and then adding new scheduling and simulation features.
Issue: #5843