diff options
author | Dean Michael Berris <dberris@google.com> | 2018-09-18 23:59:32 +0000 |
---|---|---|
committer | Dean Michael Berris <dberris@google.com> | 2018-09-18 23:59:32 +0000 |
commit | b64f71b0296f45bd2a527a5da37b2692f665fcb3 (patch) | |
tree | 1f4949ae4dfbf1adce2a4499e36c62623f21ee10 /llvm | |
parent | a4c53284c131bdd1ba2d330d918f42159af4eee2 (diff) | |
download | bcm5719-llvm-b64f71b0296f45bd2a527a5da37b2692f665fcb3.tar.gz bcm5719-llvm-b64f71b0296f45bd2a527a5da37b2692f665fcb3.zip |
[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.
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: 342518
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/XRay/Trace.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/include/llvm/XRay/Trace.h b/llvm/include/llvm/XRay/Trace.h index 262ff96bc23..924addd1560 100644 --- a/llvm/include/llvm/XRay/Trace.h +++ b/llvm/include/llvm/XRay/Trace.h @@ -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 |