diff options
Diffstat (limited to 'simpleperf/cmd_inject_test.cpp')
-rw-r--r-- | simpleperf/cmd_inject_test.cpp | 72 |
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); +} |