summaryrefslogtreecommitdiffstats
path: root/llvm/lib/XRay/LogBuilderConsumer.cpp
diff options
context:
space:
mode:
authorDean Michael Berris <dberris@google.com>2018-08-31 08:04:56 +0000
committerDean Michael Berris <dberris@google.com>2018-08-31 08:04:56 +0000
commit146d5791d9b8b20eaca0ca3434f81359046edfbe (patch)
tree22faadb9b0f041131b54591dc8b71f8f6083c067 /llvm/lib/XRay/LogBuilderConsumer.cpp
parent24f590fca688c6abf333faa1da659826da0e3f95 (diff)
downloadbcm5719-llvm-146d5791d9b8b20eaca0ca3434f81359046edfbe.tar.gz
bcm5719-llvm-146d5791d9b8b20eaca0ca3434f81359046edfbe.zip
[XRay] FDR Record Producer/Consumer Implementation
Summary: This patch defines two new base types called `RecordProducer` and `RecordConsumer` which have default implementations for convenience (particularly for testing). A `RecordProducer` implementation has one member function called `produce()` which serves as a factory constructor for `Record` instances. This code exercises the `RecordInitializer` code path in the implementation for `FileBasedRecordProducer`. A `RecordConsumer` has a single member function called `consume(...)` which, as the name implies, consumes instances of `std::unique_ptr<Record>`. We have two implementations, one of which is used in the test to generate a vector of `std::unique_ptr<Record>` similar to how the `LogBuilder` implementation works. We introduce a test in `FDRProducerConsumerTest` which ensures that records we write through the `FDRTraceWriter` can be loaded by the `FileBasedRecordProducer`. The record(s) loaded this way are written again through the `FDRTraceWriter` into a separate string, which we then compare. This ensures that the read-in bytes to create the `Record` instances in memory can be replicated when written out through the `FDRTraceWriter`. This change depends on D51210 and is part of the refactoring of D50441 into smaller, more focused changes. Reviewers: eizan, kpw Subscribers: mgorny, hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D51289 llvm-svn: 341180
Diffstat (limited to 'llvm/lib/XRay/LogBuilderConsumer.cpp')
-rw-r--r--llvm/lib/XRay/LogBuilderConsumer.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/lib/XRay/LogBuilderConsumer.cpp b/llvm/lib/XRay/LogBuilderConsumer.cpp
new file mode 100644
index 00000000000..88b7d2d728b
--- /dev/null
+++ b/llvm/lib/XRay/LogBuilderConsumer.cpp
@@ -0,0 +1,38 @@
+//===- FDRRecordConsumer.h - XRay Flight Data Recorder Mode Records -------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#include "llvm/XRay/FDRRecordConsumer.h"
+
+namespace llvm {
+namespace xray {
+
+Error LogBuilderConsumer::consume(std::unique_ptr<Record> R) {
+ if (!R)
+ return createStringError(
+ std::make_error_code(std::errc::invalid_argument),
+ "Must not call RecordConsumer::consume() with a null pointer.");
+ Records.push_back(std::move(R));
+ return Error::success();
+}
+
+Error PipelineConsumer::consume(std::unique_ptr<Record> R) {
+ if (!R)
+ return createStringError(
+ std::make_error_code(std::errc::invalid_argument),
+ "Must not call RecordConsumer::consume() with a null pointer.");
+
+ // We apply all of the visitors in order, and concatenate errors
+ // appropriately.
+ Error Result = Error::success();
+ for (auto *V : Visitors)
+ Result = joinErrors(std::move(Result), R->apply(*V));
+ return Result;
+}
+
+} // namespace xray
+} // namespace llvm
OpenPOWER on IntegriCloud