Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- FDRTraceExpander.h - XRay FDR Mode Log Expander --------------------===//
  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. //
  9. // We define an FDR record visitor which can re-constitute XRayRecord instances
  10. // from a sequence of FDR mode records in arrival order into a collection.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. #ifndef LLVM_XRAY_FDRTRACEEXPANDER_H
  14. #define LLVM_XRAY_FDRTRACEEXPANDER_H
  15.  
  16. #include "llvm/ADT/STLExtras.h"
  17. #include "llvm/XRay/FDRRecords.h"
  18. #include "llvm/XRay/XRayRecord.h"
  19.  
  20. namespace llvm {
  21. namespace xray {
  22.  
  23. class TraceExpander : public RecordVisitor {
  24.   // Type-erased callback for handling individual XRayRecord instances.
  25.   function_ref<void(const XRayRecord &)> C;
  26.   int32_t PID = 0;
  27.   int32_t TID = 0;
  28.   uint64_t BaseTSC = 0;
  29.   XRayRecord CurrentRecord{0, 0, RecordTypes::ENTER, 0, 0, 0, 0, {}, {}};
  30.   uint16_t CPUId = 0;
  31.   uint16_t LogVersion = 0;
  32.   bool BuildingRecord = false;
  33.   bool IgnoringRecords = false;
  34.  
  35.   void resetCurrentRecord();
  36.  
  37. public:
  38.   explicit TraceExpander(function_ref<void(const XRayRecord &)> F, uint16_t L)
  39.       : C(std::move(F)), LogVersion(L) {}
  40.  
  41.   Error visit(BufferExtents &) override;
  42.   Error visit(WallclockRecord &) override;
  43.   Error visit(NewCPUIDRecord &) override;
  44.   Error visit(TSCWrapRecord &) override;
  45.   Error visit(CustomEventRecord &) override;
  46.   Error visit(CallArgRecord &) override;
  47.   Error visit(PIDRecord &) override;
  48.   Error visit(NewBufferRecord &) override;
  49.   Error visit(EndBufferRecord &) override;
  50.   Error visit(FunctionRecord &) override;
  51.   Error visit(CustomEventRecordV5 &) override;
  52.   Error visit(TypedEventRecord &) override;
  53.  
  54.   // Must be called after all the records have been processed, to handle the
  55.   // most recent record generated.
  56.   Error flush();
  57. };
  58.  
  59. } // namespace xray
  60. } // namespace llvm
  61.  
  62. #endif // LLVM_XRAY_FDRTRACEEXPANDER_H
  63.