diff options
-rw-r--r-- | llvm/include/llvm/XRay/FDRRecords.h | 5 | ||||
-rw-r--r-- | llvm/lib/XRay/RecordInitializer.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/XRay/RecordPrinter.cpp | 2 | ||||
-rw-r--r-- | llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt | 2 | ||||
-rw-r--r-- | llvm/unittests/XRay/FDRBlockIndexerTest.cpp | 6 | ||||
-rw-r--r-- | llvm/unittests/XRay/FDRBlockVerifierTest.cpp | 14 | ||||
-rw-r--r-- | llvm/unittests/XRay/FDRProducerConsumerTest.cpp | 2 | ||||
-rw-r--r-- | llvm/unittests/XRay/FDRRecordPrinterTest.cpp | 4 | ||||
-rw-r--r-- | llvm/unittests/XRay/FDRRecordsTest.cpp | 8 | ||||
-rw-r--r-- | llvm/unittests/XRay/FDRTraceWriterTest.cpp | 6 |
11 files changed, 36 insertions, 26 deletions
diff --git a/llvm/include/llvm/XRay/FDRRecords.h b/llvm/include/llvm/XRay/FDRRecords.h index ab98a030129..c524dab2a33 100644 --- a/llvm/include/llvm/XRay/FDRRecords.h +++ b/llvm/include/llvm/XRay/FDRRecords.h @@ -119,16 +119,19 @@ public: class NewCPUIDRecord : public MetadataRecord { uint16_t CPUId = 0; + uint64_t TSC = 0; friend class RecordInitializer; public: NewCPUIDRecord() = default; - explicit NewCPUIDRecord(uint16_t C) : MetadataRecord(), CPUId(C) {} + NewCPUIDRecord(uint16_t C, uint64_t T) : MetadataRecord(), CPUId(C), TSC(T) {} MetadataType metadataType() const override { return MetadataType::NewCPUId; } uint16_t cpuid() const { return CPUId; } + uint64_t tsc() const { return TSC; } + Error apply(RecordVisitor &V) override; }; diff --git a/llvm/lib/XRay/RecordInitializer.cpp b/llvm/lib/XRay/RecordInitializer.cpp index de4e68bc966..7f9fd4c9627 100644 --- a/llvm/lib/XRay/RecordInitializer.cpp +++ b/llvm/lib/XRay/RecordInitializer.cpp @@ -61,13 +61,20 @@ Error RecordInitializer::visit(NewCPUIDRecord &R) { return createStringError(std::make_error_code(std::errc::bad_address), "Invalid offset for a new cpu id record (%d).", OffsetPtr); + auto BeginOffset = OffsetPtr; auto PreReadOffset = OffsetPtr; R.CPUId = E.getU16(&OffsetPtr); if (OffsetPtr == PreReadOffset) return createStringError(std::make_error_code(std::errc::bad_message), "Cannot read CPU id at offset %d.", OffsetPtr); - OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - PreReadOffset); + PreReadOffset = OffsetPtr; + R.TSC = E.getU64(&OffsetPtr); + if (OffsetPtr == PreReadOffset) + return createStringError(std::make_error_code(std::errc::bad_message), + "Cannot read CPU TSC at offset %d.", OffsetPtr); + + OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - BeginOffset); return Error::success(); } diff --git a/llvm/lib/XRay/RecordPrinter.cpp b/llvm/lib/XRay/RecordPrinter.cpp index d2943e4bad3..09b25ddba25 100644 --- a/llvm/lib/XRay/RecordPrinter.cpp +++ b/llvm/lib/XRay/RecordPrinter.cpp @@ -25,7 +25,7 @@ Error RecordPrinter::visit(WallclockRecord &R) { } Error RecordPrinter::visit(NewCPUIDRecord &R) { - OS << formatv("<CPU ID: {0}>", R.cpuid()) << Delim; + OS << formatv("<CPU: id = {0}, tsc = {1}>", R.cpuid(), R.tsc()) << Delim; return Error::success(); } diff --git a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt index de35cfab754..35303016af9 100644 --- a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt +++ b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt @@ -8,8 +8,8 @@ ; CHECK-NEXT: <PID: 2631> ; CHECK-EMPTY: ; CHECK-NEXT: Body: -; CHECK-NEXT: <CPU ID: 6> -; CHECK-NEXT: <CPU ID: 6> +; CHECK-NEXT: <CPU: id = 6, tsc = 2034042117104344> +; CHECK-NEXT: <CPU: id = 6, tsc = 2034042117104344> ; CHECK-NEXT: <TSC Wrap: base = 2034042117104344> ; CHECK-EMPTY: ; CHECK-NEXT: - <Function Enter: #3 delta = +3> diff --git a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt index 76cd98e7113..df39f6ddd5f 100644 --- a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt +++ b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt @@ -6,7 +6,7 @@ ; CHECK-NEXT: <Wall Time: seconds = 1452786.250689> ; CHECK-EMPTY: ; CHECK-NEXT: Body: -; CHECK-NEXT: <CPU ID: 49> +; CHECK-NEXT: <CPU: id = 49, tsc = 18828908666540172> ; CHECK-NEXT: <TSC Wrap: base = 18828908666540172> ; CHECK-EMPTY: ; CHECK-NEXT: - <Function Enter: #1 delta = +1> diff --git a/llvm/unittests/XRay/FDRBlockIndexerTest.cpp b/llvm/unittests/XRay/FDRBlockIndexerTest.cpp index 6f9d3eed33f..558840b111a 100644 --- a/llvm/unittests/XRay/FDRBlockIndexerTest.cpp +++ b/llvm/unittests/XRay/FDRBlockIndexerTest.cpp @@ -30,7 +30,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -39,7 +39,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -48,7 +48,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3) { .add<NewBufferRecord>(2) .add<WallclockRecord>(1, 2) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(2) + .add<NewCPUIDRecord>(2, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); diff --git a/llvm/unittests/XRay/FDRBlockVerifierTest.cpp b/llvm/unittests/XRay/FDRBlockVerifierTest.cpp index bc95d1b9ca1..a6e0a8cd388 100644 --- a/llvm/unittests/XRay/FDRBlockVerifierTest.cpp +++ b/llvm/unittests/XRay/FDRBlockVerifierTest.cpp @@ -28,7 +28,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -37,7 +37,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -46,7 +46,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3) { .add<NewBufferRecord>(2) .add<WallclockRecord>(1, 2) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(2) + .add<NewCPUIDRecord>(2, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -75,7 +75,7 @@ TEST(FDRBlockVerifierTest, MissingPIDRecord) { .add<BufferExtents>(20) .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -89,7 +89,7 @@ TEST(FDRBlockVerifierTest, MissingBufferExtents) { auto Block = LogBuilder() .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -103,7 +103,7 @@ TEST(FDRBlockVerifierTest, IgnoreRecordsAfterEOB) { auto Block = LogBuilder() .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<EndBufferRecord>() .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) @@ -118,7 +118,7 @@ TEST(FDRBlockVerifierTest, MalformedV2) { auto Block = LogBuilder() .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 2) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .add<NewBufferRecord>(2) diff --git a/llvm/unittests/XRay/FDRProducerConsumerTest.cpp b/llvm/unittests/XRay/FDRProducerConsumerTest.cpp index 58e252dd25b..838e6ca9bf1 100644 --- a/llvm/unittests/XRay/FDRProducerConsumerTest.cpp +++ b/llvm/unittests/XRay/FDRProducerConsumerTest.cpp @@ -42,7 +42,7 @@ template <> std::unique_ptr<Record> MakeRecord<NewBufferRecord>() { } template <> std::unique_ptr<Record> MakeRecord<NewCPUIDRecord>() { - return make_unique<NewCPUIDRecord>(1); + return make_unique<NewCPUIDRecord>(1, 2); } template <> std::unique_ptr<Record> MakeRecord<TSCWrapRecord>() { diff --git a/llvm/unittests/XRay/FDRRecordPrinterTest.cpp b/llvm/unittests/XRay/FDRRecordPrinterTest.cpp index f4cebf8d1f4..339d4b0d428 100644 --- a/llvm/unittests/XRay/FDRRecordPrinterTest.cpp +++ b/llvm/unittests/XRay/FDRRecordPrinterTest.cpp @@ -39,10 +39,10 @@ template <> struct Helper<WallclockRecord> { template <> struct Helper<NewCPUIDRecord> { static std::unique_ptr<Record> construct() { - return make_unique<NewCPUIDRecord>(1); + return make_unique<NewCPUIDRecord>(1, 2); } - static const char *expected() { return "<CPU ID: 1>"; } + static const char *expected() { return "<CPU: id = 1, tsc = 2>"; } }; template <> struct Helper<TSCWrapRecord> { diff --git a/llvm/unittests/XRay/FDRRecordsTest.cpp b/llvm/unittests/XRay/FDRRecordsTest.cpp index 24ff7a5ad51..1cce1c2b2c1 100644 --- a/llvm/unittests/XRay/FDRRecordsTest.cpp +++ b/llvm/unittests/XRay/FDRRecordsTest.cpp @@ -75,7 +75,7 @@ TEST(XRayFDRTest, BuilderAndBlockVerifier) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 1) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .consume(); BlockVerifier Verifier; for (auto &R : Block) @@ -89,7 +89,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 1) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -98,7 +98,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 1) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -107,7 +107,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 1) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); diff --git a/llvm/unittests/XRay/FDRTraceWriterTest.cpp b/llvm/unittests/XRay/FDRTraceWriterTest.cpp index e9a35fe67b6..e78b71d6ff7 100644 --- a/llvm/unittests/XRay/FDRTraceWriterTest.cpp +++ b/llvm/unittests/XRay/FDRTraceWriterTest.cpp @@ -47,7 +47,7 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion3) { .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 1) .add<PIDRecord>(1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -92,7 +92,7 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion2) { .add<BufferExtents>(64) .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .consume(); @@ -143,7 +143,7 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion1) { auto L = LogBuilder() .add<NewBufferRecord>(1) .add<WallclockRecord>(1, 1) - .add<NewCPUIDRecord>(1) + .add<NewCPUIDRecord>(1, 2) .add<FunctionRecord>(RecordTypes::ENTER, 1, 1) .add<FunctionRecord>(RecordTypes::EXIT, 1, 100) .add<EndBufferRecord>() |