summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--simpleperf/Android.bp5
l---------simpleperf/CtsSimpleperfTestCases_testdata1
-rw-r--r--simpleperf/RecordReadThread.cpp19
-rw-r--r--simpleperf/RecordReadThread.h3
-rwxr-xr-xsimpleperf/scripts/bin/android/arm/simpleperfbin2743140 -> 2742492 bytes
-rwxr-xr-xsimpleperf/scripts/bin/android/arm64/simpleperfbin3745752 -> 3745552 bytes
-rwxr-xr-xsimpleperf/scripts/bin/android/x86/simpleperfbin4317664 -> 4316708 bytes
-rwxr-xr-xsimpleperf/scripts/bin/android/x86_64/simpleperfbin4178768 -> 4177936 bytes
-rwxr-xr-xsimpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylibbin5161784 -> 5161840 bytes
-rwxr-xr-xsimpleperf/scripts/bin/darwin/x86_64/simpleperfbin6028916 -> 6028972 bytes
-rwxr-xr-xsimpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.sobin7142984 -> 7141496 bytes
-rwxr-xr-xsimpleperf/scripts/bin/linux/x86_64/simpleperfbin7126408 -> 7124856 bytes
-rwxr-xr-xsimpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dllbin4808192 -> 4808192 bytes
-rwxr-xr-xsimpleperf/scripts/bin/windows/x86_64/simpleperf.exebin4602880 -> 4602880 bytes
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
index bf1dfad2..81927acd 100755
--- a/simpleperf/scripts/bin/android/arm/simpleperf
+++ b/simpleperf/scripts/bin/android/arm/simpleperf
Binary files differ
diff --git a/simpleperf/scripts/bin/android/arm64/simpleperf b/simpleperf/scripts/bin/android/arm64/simpleperf
index 47724a36..f915514d 100755
--- a/simpleperf/scripts/bin/android/arm64/simpleperf
+++ b/simpleperf/scripts/bin/android/arm64/simpleperf
Binary files differ
diff --git a/simpleperf/scripts/bin/android/x86/simpleperf b/simpleperf/scripts/bin/android/x86/simpleperf
index 972f7693..850e75ce 100755
--- a/simpleperf/scripts/bin/android/x86/simpleperf
+++ b/simpleperf/scripts/bin/android/x86/simpleperf
Binary files differ
diff --git a/simpleperf/scripts/bin/android/x86_64/simpleperf b/simpleperf/scripts/bin/android/x86_64/simpleperf
index 662650ec..e23b9e18 100755
--- a/simpleperf/scripts/bin/android/x86_64/simpleperf
+++ b/simpleperf/scripts/bin/android/x86_64/simpleperf
Binary files differ
diff --git a/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib b/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib
index 0ab54a6b..276de8c6 100755
--- a/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib
+++ b/simpleperf/scripts/bin/darwin/x86_64/libsimpleperf_report.dylib
Binary files differ
diff --git a/simpleperf/scripts/bin/darwin/x86_64/simpleperf b/simpleperf/scripts/bin/darwin/x86_64/simpleperf
index 08d6ccf1..b17efa59 100755
--- a/simpleperf/scripts/bin/darwin/x86_64/simpleperf
+++ b/simpleperf/scripts/bin/darwin/x86_64/simpleperf
Binary files differ
diff --git a/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so b/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so
index aa9ef525..6131000b 100755
--- a/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so
+++ b/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so
Binary files differ
diff --git a/simpleperf/scripts/bin/linux/x86_64/simpleperf b/simpleperf/scripts/bin/linux/x86_64/simpleperf
index 8af1ec4f..15a3b4d6 100755
--- a/simpleperf/scripts/bin/linux/x86_64/simpleperf
+++ b/simpleperf/scripts/bin/linux/x86_64/simpleperf
Binary files differ
diff --git a/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll b/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll
index d8abe0d0..9fef11d8 100755
--- a/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll
+++ b/simpleperf/scripts/bin/windows/x86_64/libsimpleperf_report.dll
Binary files differ
diff --git a/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe b/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe
index 3815bda3..d44b082d 100755
--- a/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe
+++ b/simpleperf/scripts/bin/windows/x86_64/simpleperf.exe
Binary files differ