// 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
|