From 0da80fbe3af4024110d25be62cd7035bba0ac7c9 Mon Sep 17 00:00:00 2001 From: yuanye Date: Mon, 30 Dec 2024 11:13:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dspe=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=87=8F=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yuanye --- src/perf_event_record.cpp | 5 +- .../common/native/perf_event_record_test.cpp | 53 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/perf_event_record.cpp b/src/perf_event_record.cpp index 930e4ae..95bad19 100644 --- a/src/perf_event_record.cpp +++ b/src/perf_event_record.cpp @@ -182,7 +182,10 @@ void PerfEventRecord::InitHeader(uint8_t* p) void PerfRecordAuxtrace::Init(uint8_t* data, const perf_event_attr& attr) { - if (data == nullptr || header_.size > sizeof(perf_event_header)) { + data_ = {}; + rawData_ = nullptr; + if (data == nullptr) { + PerfEventRecord::InitHeader(data); HLOGE("Init failed"); return; } diff --git a/test/unittest/common/native/perf_event_record_test.cpp b/test/unittest/common/native/perf_event_record_test.cpp index 3babdb1..eda941e 100644 --- a/test/unittest/common/native/perf_event_record_test.cpp +++ b/test/unittest/common/native/perf_event_record_test.cpp @@ -892,6 +892,59 @@ HWTEST_F(PerfEventRecordTest, CreatePerfRecordAuxtrace, TestSize.Level1) free(p); } +HWTEST_F(PerfEventRecordTest, CreatePerfRecordAuxtrace2, TestSize.Level1) +{ + PerfRecordAuxtrace* record = new PerfRecordAuxtrace(); + record->Init(nullptr, {}); + + EXPECT_EQ(record->header_.type, PERF_RECORD_MMAP); + EXPECT_EQ(record->header_.misc, PERF_RECORD_MISC_USER); + EXPECT_EQ(record->header_.size, 0); + + EXPECT_EQ(record->data_.size, 0); + EXPECT_EQ(record->data_.offset, 0); + EXPECT_EQ(record->data_.reference, 0); + EXPECT_EQ(record->data_.idx, 0); + EXPECT_EQ(record->data_.tid, 0); + EXPECT_EQ(record->data_.cpu, 0); + EXPECT_EQ(record->data_.reserved__, 0); + + EXPECT_EQ(record->rawData_, nullptr); +} + +HWTEST_F(PerfEventRecordTest, CreatePerfRecordAuxtrace3, TestSize.Level1) +{ + PerfRecordAuxtrace* record = new PerfRecordAuxtrace(); + record->Init(nullptr, {}); + record->header_.type = PERF_RECORD_AUXTRACE; + record->header_.misc = PERF_RECORD_MISC_KERNEL; + record->header_.size = PERF_RECORD_AUXTRACE; + record->data_.size = 1; + record->data_.offset = 1; + record->data_.reference = 1; + record->data_.idx = 1; + record->data_.tid = 1; + record->data_.cpu = 1; + record->data_.reserved__ = 1; + std::shared_ptr ptr = std::make_shared(); + record->rawData_ = ptr.get(); + + record->Init(nullptr, {}); + EXPECT_EQ(record->header_.type, PERF_RECORD_MMAP); + EXPECT_EQ(record->header_.misc, PERF_RECORD_MISC_USER); + EXPECT_EQ(record->header_.size, 0); + + EXPECT_EQ(record->data_.size, 0); + EXPECT_EQ(record->data_.offset, 0); + EXPECT_EQ(record->data_.reference, 0); + EXPECT_EQ(record->data_.idx, 0); + EXPECT_EQ(record->data_.tid, 0); + EXPECT_EQ(record->data_.cpu, 0); + EXPECT_EQ(record->data_.reserved__, 0); + + EXPECT_EQ(record->rawData_, nullptr); +} + HWTEST_F(PerfEventRecordTest, CreatePerfRecordSample, TestSize.Level1) { pid_t pid = fork(); -- Gitee