summaryrefslogtreecommitdiff
path: root/simpleperf/cmd_inject_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simpleperf/cmd_inject_test.cpp')
-rw-r--r--simpleperf/cmd_inject_test.cpp72
1 files changed, 67 insertions, 5 deletions
diff --git a/simpleperf/cmd_inject_test.cpp b/simpleperf/cmd_inject_test.cpp
index 23347b90..b6e6456c 100644
--- a/simpleperf/cmd_inject_test.cpp
+++ b/simpleperf/cmd_inject_test.cpp
@@ -51,22 +51,24 @@ static bool RunInjectCmd(std::vector<std::string>&& args, std::string* output) {
return true;
}
-static void CheckMatchingExpectedData(std::string& data) {
+static void CheckMatchingExpectedData(const std::string& name, std::string& data) {
std::string expected_data;
ASSERT_TRUE(android::base::ReadFileToString(
- GetTestData(std::string("etm") + OS_PATH_SEPARATOR + "perf_inject.data"), &expected_data));
+ GetTestData(std::string("etm") + OS_PATH_SEPARATOR + name), &expected_data));
data.erase(std::remove(data.begin(), data.end(), '\r'), data.end());
ASSERT_EQ(data, expected_data);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, smoke) {
std::string data;
ASSERT_TRUE(RunInjectCmd({}, &data));
// Test that we can find instr range in etm_test_loop binary.
ASSERT_NE(data.find("etm_test_loop"), std::string::npos);
- CheckMatchingExpectedData(data);
+ CheckMatchingExpectedData("perf_inject.data", data);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, binary_option) {
// Test that data for etm_test_loop is generated when selected by --binary.
std::string data;
@@ -86,10 +88,12 @@ TEST(cmd_inject, binary_option) {
ASSERT_EQ(data.find("etm_test_loop"), std::string::npos);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, exclude_perf_option) {
ASSERT_TRUE(RunInjectCmd({"--exclude-perf"}, nullptr));
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, output_option) {
TemporaryFile tmpfile;
close(tmpfile.release());
@@ -97,9 +101,10 @@ TEST(cmd_inject, output_option) {
ASSERT_TRUE(RunInjectCmd({"--output", "branch-list", "-o", tmpfile.path}));
std::string autofdo_data;
ASSERT_TRUE(RunInjectCmd({"-i", tmpfile.path, "--output", "autofdo"}, &autofdo_data));
- CheckMatchingExpectedData(autofdo_data);
+ CheckMatchingExpectedData("perf_inject.data", autofdo_data);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, skip_empty_output_file) {
TemporaryFile tmpfile;
close(tmpfile.release());
@@ -110,6 +115,7 @@ TEST(cmd_inject, skip_empty_output_file) {
tmpfile.DoNotRemove();
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, inject_kernel_data) {
const std::string recording_file =
GetTestData(std::string("etm") + OS_PATH_SEPARATOR + "perf_kernel.data");
@@ -132,6 +138,7 @@ TEST(cmd_inject, inject_kernel_data) {
ASSERT_EQ(output, autofdo_output);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, unformatted_trace) {
std::string data;
std::string perf_with_unformatted_trace =
@@ -139,9 +146,10 @@ TEST(cmd_inject, unformatted_trace) {
ASSERT_TRUE(RunInjectCmd({"-i", perf_with_unformatted_trace}, &data));
// Test that we can find instr range in etm_test_loop binary.
ASSERT_NE(data.find("etm_test_loop"), std::string::npos);
- CheckMatchingExpectedData(data);
+ CheckMatchingExpectedData("perf_inject.data", data);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, multiple_input_files) {
std::string data;
std::string perf_data = GetTestData(PERF_DATA_ETM_TEST_LOOP);
@@ -165,6 +173,7 @@ TEST(cmd_inject, multiple_input_files) {
ASSERT_NE(data.find("106c->1074:200"), std::string::npos);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, merge_branch_list_files) {
TemporaryFile tmpfile;
close(tmpfile.release());
@@ -178,6 +187,7 @@ TEST(cmd_inject, merge_branch_list_files) {
ASSERT_NE(autofdo_data.find("106c->1074:200"), std::string::npos);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, report_warning_when_overflow) {
CapturedStderr capture;
std::vector<std::unique_ptr<TemporaryFile>> branch_list_files;
@@ -217,6 +227,7 @@ TEST(cmd_inject, report_warning_when_overflow) {
ASSERT_NE(autofdo_data.find("106c->1074:18446744073709551615"), std::string::npos);
}
+// @CddTest = 6.1/C-0-2
TEST(cmd_inject, accept_missing_aux_data) {
// Recorded with "-e cs-etm:u --user-buffer-size 64k sleep 1".
std::string perf_data = GetTestData("etm/perf_with_missing_aux_data.data");
@@ -224,3 +235,54 @@ TEST(cmd_inject, accept_missing_aux_data) {
close(tmpfile.release());
ASSERT_TRUE(RunInjectCmd({"--output", "branch-list", "-i", perf_data, "-o", tmpfile.path}));
}
+
+// @CddTest = 6.1/C-0-2
+TEST(cmd_inject, read_lbr_data) {
+ // Convert perf.data to AutoFDO text format.
+ std::string perf_data_path = GetTestData("lbr/perf_lbr.data");
+ std::string data;
+ ASSERT_TRUE(RunInjectCmd({"-i", perf_data_path}, &data));
+ data.erase(std::remove(data.begin(), data.end(), '\r'), data.end());
+
+ std::string expected_data;
+ ASSERT_TRUE(android::base::ReadFileToString(
+ GetTestData(std::string("lbr") + OS_PATH_SEPARATOR + "inject_lbr.data"), &expected_data));
+ ASSERT_EQ(data, expected_data);
+
+ // Convert perf.data to branch_list.proto format.
+ // Then convert branch_list.proto format to AutoFDO text format.
+ TemporaryFile branch_list_file;
+ close(branch_list_file.release());
+ ASSERT_TRUE(
+ RunInjectCmd({"-i", perf_data_path, "--output", "branch-list", "-o", branch_list_file.path}));
+ ASSERT_TRUE(RunInjectCmd({"-i", branch_list_file.path}, &data));
+ ASSERT_EQ(data, expected_data);
+
+ // Test binary filter on LBR data.
+ ASSERT_TRUE(RunInjectCmd({"-i", perf_data_path, "--binary", "no_lbr_test_loop"}, &data));
+ ASSERT_EQ(data.find("lbr_test_loop"), data.npos);
+
+ // Test binary filter on branch list file.
+ ASSERT_TRUE(RunInjectCmd({"-i", branch_list_file.path, "--binary", "no_lbr_test_loop"}, &data));
+ ASSERT_EQ(data.find("lbr_test_loop"), data.npos);
+
+ // Test multiple input files.
+ ASSERT_TRUE(RunInjectCmd(
+ {
+ "-i",
+ std::string(branch_list_file.path) + "," + branch_list_file.path,
+ },
+ &data));
+ ASSERT_NE(data.find("194d->1940:706"), data.npos);
+}
+
+// @CddTest = 6.1/C-0-2
+TEST(cmd_inject, inject_small_binary) {
+ // etm_test_loop_small, a binary compiled with
+ // "-Wl,-z,noseparate-code", where the file is smaller than its text
+ // section mapped into memory.
+ std::string data;
+ std::string perf_data = GetTestData("etm/perf_for_small_binary.data");
+ ASSERT_TRUE(RunInjectCmd({"-i", perf_data}, &data));
+ CheckMatchingExpectedData("perf_inject_small.data", data);
+}