summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDean Michael Berris <dberris@google.com>2018-09-18 23:59:32 +0000
committerDean Michael Berris <dberris@google.com>2018-09-18 23:59:32 +0000
commitb64f71b0296f45bd2a527a5da37b2692f665fcb3 (patch)
tree1f4949ae4dfbf1adce2a4499e36c62623f21ee10 /llvm
parenta4c53284c131bdd1ba2d330d918f42159af4eee2 (diff)
downloadbcm5719-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.h13
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
OpenPOWER on IntegriCloud