Home | History | Annotate | Line # | Download | only in XRay
      1 //===- FDRRecordProducer.h - XRay FDR Mode Record Producer ----------------===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 #ifndef LLVM_XRAY_FDRRECORDPRODUCER_H
      9 #define LLVM_XRAY_FDRRECORDPRODUCER_H
     10 
     11 #include "llvm/Support/Error.h"
     12 #include "llvm/XRay/FDRRecords.h"
     13 #include "llvm/XRay/XRayRecord.h"
     14 #include <memory>
     15 
     16 namespace llvm {
     17 namespace xray {
     18 
     19 class RecordProducer {
     20 public:
     21   /// All producer implementations must yield either an Error or a non-nullptr
     22   /// unique_ptr<Record>.
     23   virtual Expected<std::unique_ptr<Record>> produce() = 0;
     24   virtual ~RecordProducer() = default;
     25 };
     26 
     27 class FileBasedRecordProducer : public RecordProducer {
     28   const XRayFileHeader &Header;
     29   DataExtractor &E;
     30   uint64_t &OffsetPtr;
     31   uint32_t CurrentBufferBytes = 0;
     32 
     33   // Helper function which gets the next record by speculatively reading through
     34   // the log, finding a buffer extents record.
     35   Expected<std::unique_ptr<Record>> findNextBufferExtent();
     36 
     37 public:
     38   FileBasedRecordProducer(const XRayFileHeader &FH, DataExtractor &DE,
     39                           uint64_t &OP)
     40       : Header(FH), E(DE), OffsetPtr(OP) {}
     41 
     42   /// This producer encapsulates the logic for loading a File-backed
     43   /// RecordProducer hidden behind a DataExtractor.
     44   Expected<std::unique_ptr<Record>> produce() override;
     45 };
     46 
     47 } // namespace xray
     48 } // namespace llvm
     49 
     50 #endif // LLVM_XRAY_FDRRECORDPRODUCER_H
     51