// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "perf_test_files.h"
namespace perf_test_files {
const std::vector<const char*>& GetPerfDataFiles() {
static const std::vector<const char*>* files = new std::vector<const char*>{
// The following perf data contains the following event types, as passed
// to perf record via the -e option:
// - cycles
// - instructions
// - cache-references
// - cache-misses
// - branches
// - branch-misses
// Obtained with "perf record -- echo > /dev/null"
"perf.data.singleprocess-3.4",
// Obtained with "perf record -a -- sleep $N", for N in {0, 1, 5}.
"perf.data.systemwide.0-3.4",
#ifdef TEST_LARGE_PERF_DATA
"perf.data.systemwide.1-3.4",
"perf.data.systemwide.5-3.4",
// Obtained with "perf record -a -- sleep $N", for N in {0, 1, 5}.
// While in the background, this loop is running:
// while true; do ls > /dev/null; done
"perf.data.busy.0-3.4",
"perf.data.busy.1-3.4",
"perf.data.busy.5-3.4",
#endif // defined(TEST_LARGE_PERF_DATA)
// Obtained with "perf record -a -- sleep 2"
// While in the background, this loop is running:
// while true; do restart powerd; sleep .2; done
"perf.data.forkexit-3.4",
#ifdef TEST_CALLGRAPH
// Obtained with "perf record -a -g -- sleep 2"
"perf.data.callgraph-3.4",
#endif
// Obtained with "perf record -a -b -- sleep 2"
"perf.data.branch-3.4",
#ifdef TEST_CALLGRAPH
// Obtained with "perf record -a -g -b -- sleep 2"
"perf.data.callgraph_and_branch-3.4",
#endif
// Obtained with "perf record -a -R -- sleep 2"
"perf.data.raw-3.4",
#ifdef TEST_CALLGRAPH
// Obtained with "perf record -a -R -g -b -- sleep 2"
"perf.data.raw_callgraph_branch-3.4",
#endif
// Data from other architectures.
"perf.data.i686-3.4", // 32-bit x86
"perf.data.armv7-3.4", // ARM v7
// Same as above, obtained from a system running kernel v3.8.
"perf.data.singleprocess-3.8",
"perf.data.systemwide.0-3.8",
#ifdef TEST_LARGE_PERF_DATA
"perf.data.systemwide.1-3.8",
"perf.data.systemwide.5-3.8",
"perf.data.busy.0-3.8",
"perf.data.busy.1-3.8",
"perf.data.busy.5-3.8",
#endif // defined(TEST_LARGE_PERF_DATA)
"perf.data.forkexit-3.8",
#ifdef TEST_CALLGRAPH
"perf.data.callgraph-3.8",
#endif
"perf.data.branch-3.8",
#ifdef TEST_CALLGRAPH
"perf.data.callgraph_and_branch-3.8",
#endif
"perf.data.armv7.perf_3.14-3.8", // ARM v7 obtained using perf 3.14.
// Obtained from a system that uses NUMA topology.
"perf.data.numatopology-3.2",
// Obtained to test GROUP_DESC feature
"perf.data.group_desc-4.4",
// Perf data that contains hardware and software events.
// Command:
// perf record -a -c 1000000 -e cycles,branch-misses,cpu-clock -- \
// sleep 2
// HW events are cycles and branch-misses, SW event is cpu-clock.
// This also tests non-consecutive event types.
"perf.data.hw_and_sw-3.4",
// This test first mmap()s a DSO, then fork()s to copy the mapping to the
// child and then modifies the mapping by mmap()ing a DSO on top of the
// old one. It then records SAMPLEs events in the child. It ensures the
// SAMPLEs in the child are attributed to the first DSO that was mmap()ed,
// not the second one.
"perf.data.remmap-3.2",
// This is sample with a frequency higher than the max frequency, so it
// has throttle and unthrottle events.
"perf.data.throttle-3.8",
// Perf data that contains intel pt events from perf-4.14
// Command:
// perf record -e intel_pt// -e cycles -o /tmp/perf.data.intel_pt-4.14
// -- echo "Hello, World!"
"perf.data.intel_pt-4.14",
};
return *files;
}
const std::vector<const char*>& GetPerfPipedDataFiles() {
static const std::vector<const char*>* files = new std::vector<const char*>{
"perf.data.piped.target-3.4",
"perf.data.piped.target.throttled-3.4",
"perf.data.piped.target-3.8",
/* Piped data that contains hardware and software events.
* Command:
* perf record -a -c 1000000 -e cycles,branch-misses,cpu-clock -o - \
* -- sleep 2
* HW events are cycles and branch-misses, SW event is cpu-clock.
*/
"perf.data.piped.hw_and_sw-3.4",
// Piped data with extra data at end.
"perf.data.piped.extrabyte-3.4",
"perf.data.piped.extradata-3.4",
// Perf data that contains intel pt events collected in piped mode from
// perf-4.14
// Command:
// perf record -e intel_pt// -e cycles -o - -- echo "Hello, World!" | \
// cat &> /tmp/perf.data.piped.intel_pt-4.14
"perf.data.piped.intel_pt-4.14",
};
return *files;
}
const std::vector<const char*>& GetCorruptedPerfPipedDataFiles() {
static const std::vector<const char*>* files = new std::vector<const char*>{
// Has a SAMPLE event with size set to zero. Don't go into an infinite
// loop.
"perf.data.piped.corrupted.zero_size_sample-3.2",
};
return *files;
}
const std::vector<const char*>& GetPerfDataProtoFiles() {
static const std::vector<const char*>* files = new std::vector<const char*>{
"perf.callgraph.pb_text",
};
return *files;
}
} // namespace perf_test_files