mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[XRay][compiler-rt] FDRLogWriter Abstraction
Summary: This change introduces an `FDRLogWriter` type which is responsible for serialising metadata and function records to character buffers. This is the first step in a refactoring of the implementation of the FDR runtime to allow for more granular testing of the individual components of the implementation. The main contribution of this change is a means of hiding the details of how specific records are written to a buffer, and for managing the extents of these buffers. We make use of C++ features (templates and some metaprogramming) to reduce repetition in the act of writing out specific kinds of records to the buffer. In this process, we make a number of changes across both LLVM and compiler-rt to allow us to use the `Trace` abstraction defined in the LLVM project in the testing of the runtime implementation. This gives us a closer end-to-end test which version-locks the runtime implementation with the loading implementation in LLVM. We also allow using gmock in compiler-rt unit tests, by adding the requisite definitions in the `AddCompilerRT.cmake` module. We also add the terminfo library detection along with inclusion of the appropriate compiler flags for header include lookup. Finally, we've gone ahead and updated the FDR logging implementation to use the FDRLogWriter for the lowest-level record-writing details. Following patches will isolate the state machine transitions which manage the set-up and tear-down of the buffers we're using in multiple threads. Reviewers: mboerger, eizan Subscribers: mgorny, jfb, llvm-commits Differential Revision: https://reviews.llvm.org/D52220 llvm-svn: 342617
This commit is contained in:
parent
7b8d4f4b37
commit
005b3bfebc
@ -46,20 +46,25 @@ namespace xray {
|
||||
///
|
||||
class Trace {
|
||||
XRayFileHeader FileHeader;
|
||||
std::vector<XRayRecord> Records;
|
||||
using RecordVector = std::vector<XRayRecord>;
|
||||
RecordVector Records;
|
||||
|
||||
typedef std::vector<XRayRecord>::const_iterator citerator;
|
||||
|
||||
friend Expected<Trace> loadTrace(const DataExtractor &, bool);
|
||||
|
||||
public:
|
||||
using size_type = RecordVector::size_type;
|
||||
using value_type = RecordVector::value_type;
|
||||
using const_iterator = RecordVector::const_iterator;
|
||||
|
||||
/// Provides access to the loaded XRay trace file header.
|
||||
const XRayFileHeader &getFileHeader() const { return FileHeader; }
|
||||
|
||||
citerator begin() const { return Records.begin(); }
|
||||
citerator end() const { return Records.end(); }
|
||||
const_iterator begin() const { return Records.begin(); }
|
||||
const_iterator end() const { return Records.end(); }
|
||||
bool empty() const { return Records.empty(); }
|
||||
size_t size() const { return Records.size(); }
|
||||
size_type size() const { return Records.size(); }
|
||||
};
|
||||
|
||||
/// This function will attempt to load XRay trace records from the provided
|
||||
|
Loading…
Reference in New Issue
Block a user