diff options
14 files changed, 28 insertions, 0 deletions
diff --git a/simpleperf/Android.bp b/simpleperf/Android.bp index 5f9b0de2..4b9dd99b 100644 --- a/simpleperf/Android.bp +++ b/simpleperf/Android.bp @@ -656,3 +656,8 @@ python_library_host { "scripts/bin/windows/**/*.dll", ], } + +filegroup { + name: "system-extras-simpleperf-testdata", + srcs: ["CtsSimpleperfTestCases_testdata/**/*"], +} diff --git a/simpleperf/CtsSimpleperfTestCases_testdata b/simpleperf/CtsSimpleperfTestCases_testdata new file mode 120000 index 00000000..fb94ebfb --- /dev/null +++ b/simpleperf/CtsSimpleperfTestCases_testdata @@ -0,0 +1 @@ +testdata/
\ No newline at end of file diff --git a/simpleperf/RecordReadThread.cpp b/simpleperf/RecordReadThread.cpp index 16af9292..bbdf4897 100644 --- a/simpleperf/RecordReadThread.cpp +++ b/simpleperf/RecordReadThread.cpp @@ -487,6 +487,13 @@ bool RecordReadThread::ReadRecordsFromKernelBuffer() { if (!has_data) { break; } + // Having collected everything available, this is a good time to + // try to re-enabled any events that might have been disabled by + // the kernel. + for (auto event_fd : event_fds_disabled_by_kernel_) { + event_fd->SetEnableEvent(true); + } + event_fds_disabled_by_kernel_.clear(); if (!SendDataNotificationToMainThread()) { return false; } @@ -568,6 +575,18 @@ void RecordReadThread::PushRecordToRecordBuffer(KernelRecordReader* kernel_recor char* p = record_buffer_.AllocWriteSpace(header.size); if (p != nullptr) { kernel_record_reader->ReadRecord(0, header.size, p); + if (header.type == PERF_RECORD_AUX) { + AuxRecord r{attr_, p}; + if (r.data->flags & PERF_AUX_FLAG_TRUNCATED) { + // When the kernel sees aux output flagged with PERF_AUX_FLAG_TRUNCATED, + // it sets a pending disable on the event: + // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/kernel/events/ring_buffer.c?h=v5.13#n516 + // The truncated flag is set by the Coresight driver when some trace was lost, + // which can be caused by a full buffer. Therefore, try to re-enable the event + // only after we have collected the aux data. + event_fds_disabled_by_kernel_.insert(kernel_record_reader->GetEventFd()); + } + } record_buffer_.FinishWrite(); } else { if (header.type == PERF_RECORD_SAMPLE) { diff --git a/simpleperf/RecordReadThread.h b/simpleperf/RecordReadThread.h index 321dc8c5..2c3ddeee 100644 --- a/simpleperf/RecordReadThread.h +++ b/simpleperf/RecordReadThread.h @@ -24,6 +24,7 @@ #include <memory> #include <mutex> #include <thread> +#include <unordered_set> #include <android-base/macros.h> #include <android-base/unique_fd.h> @@ -208,6 +209,8 @@ class RecordReadThread { std::vector<KernelRecordReader> kernel_record_readers_; pid_t exclude_pid_ = -1; + std::unordered_set<EventFd*> event_fds_disabled_by_kernel_; + RecordStat stat_; }; diff --git a/simpleperf/scripts/bin/android/arm/simpleperf b/simpleperf/scripts/bin/android/arm/simpleperf Binary files differindex bf1dfad2..81927acd 100755 --- a/simpleperf/scripts/bin/android/arm/simpleperf +++ b/simpleperf/scripts/bin/android/arm/simpleperf diff --git a/simpleperf/scripts/bin/android/arm64/simpleperf b/simpleperf/scripts/bin/android/arm64/simpleperf Binary files differindex 47724a36..f915514d 100755 --- a/simpleperf/scripts/bin/android/arm64/simpleperf +++ b/simpleperf/scripts/bin/android/arm64/simpleperf diff --git a/simpleperf/scripts/bin/android/x86/simpleperf b/simpleperf/scripts/bin/android/x86/simpleperf Binary files differindex 972f7693..850e75ce 100755 --- a/simpleperf/scripts/bin/android/x86/simpleperf +++ b/simpleperf/scripts/bin/android/x86/simpleperf diff --git a/simpleperf/scripts/bin/android/x86_64/simpleperf b/simpleperf/scripts/bin/android/x86_64/simpleperf Binary files differindex 662650ec..e23b9e18 100755 --- a/simpleperf/scripts/bin/android/x86_64/simpleperf +++ b/simpleperf/scripts/bin/android/x86_64/simpleperf diff --git a/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib b/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib Binary files differindex 0ab54a6b..276de8c6 100755 --- a/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib +++ b/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib diff --git a/simpleperf/scripts/bin/darwin/x86_64/simpleperf b/simpleperf/scripts/bin/darwin/x86_64/simpleperf Binary files differindex 08d6ccf1..b17efa59 100755 --- a/simpleperf/scripts/bin/darwin/x86_64/simpleperf +++ b/simpleperf/scripts/bin/darwin/x86_64/simpleperf diff --git a/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so b/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so Binary files differindex aa9ef525..6131000b 100755 --- a/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so +++ b/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so diff --git a/simpleperf/scripts/bin/linux/x86_64/simpleperf b/simpleperf/scripts/bin/linux/x86_64/simpleperf Binary files differindex 8af1ec4f..15a3b4d6 100755 --- a/simpleperf/scripts/bin/linux/x86_64/simpleperf +++ b/simpleperf/scripts/bin/linux/x86_64/simpleperf diff --git a/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll b/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll Binary files differindex d8abe0d0..9fef11d8 100755 --- a/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll +++ b/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll diff --git a/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe b/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe Binary files differindex 3815bda3..d44b082d 100755 --- a/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe +++ b/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe |