// 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& GetPerfDataFiles() { static const std::vector* files = new std::vector{ // 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& GetPerfPipedDataFiles() { static const std::vector* files = new std::vector{ "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& GetCorruptedPerfPipedDataFiles() { static const std::vector* files = new std::vector{ // 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& GetPerfDataProtoFiles() { static const std::vector* files = new std::vector{ "perf.callgraph.pb_text", }; return *files; } } // namespace perf_test_files