In this change, we overhaul the implementation for loading
llvm::xray::Trace objects from files by using the combination of
specific FDR Record types and visitors breaking up the logic to
reconstitute an execution trace from flight-data recorder mode traces.
This change allows us to handle out-of-temporal order blocks as written
in files, and more consistently recreate an execution trace spanning
multiple blocks and threads. To do this, we use the WallclockRecord
associated with each block to maintain temporal order of blocks, before
attempting to recreate an execution trace.
The new addition in this change is the TraceExpander type which can be
thought of as a decompression/decoding routine. This allows us to
maintain the state of an execution environment (thread+process) and
create XRayRecord instances that fit nicely into the Trace
container. We don't have a specific unit test for the TraceExpander
type, since the end-to-end tests for the llvm-xray convert tools
already cover precisely this codepath.
This change completes the refactoring started with D50441.
Depends on D51911.