diff options
author | Yabin Cui <yabinc@google.com> | 2021-06-21 19:58:09 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-06-21 19:58:09 +0000 |
commit | ad23023571d235b5a0c399e23a8e73878e831ffc (patch) | |
tree | 6dc57a36ffbf286372c05eb2d1782f4ecececca4 | |
parent | 3387c68feb8567aaeb1a33ebec5c9dfbafea5737 (diff) | |
parent | 5cac9f0abba7db330f7bded033c5201c57e5b141 (diff) | |
download | extras-ad23023571d235b5a0c399e23a8e73878e831ffc.tar.gz |
simpleperf: update testdata used for testing reading dex files. am: 5cac9f0abb
Original change: https://googleplex-android-review.googlesource.com/c/platform/system/extras/+/15031587
Change-Id: I7c9adbabddff14b07176ea2196b58158f8bfe79b
-rw-r--r-- | simpleperf/dso_test.cpp | 36 | ||||
-rw-r--r-- | simpleperf/get_test_data.h | 28 | ||||
-rw-r--r-- | simpleperf/read_dex_file_test.cpp | 24 | ||||
-rw-r--r-- | simpleperf/testdata/base_with_cdex_v1.vdex (renamed from simpleperf/testdata/base.vdex) | bin | 2046136 -> 2046136 bytes | |||
-rw-r--r-- | simpleperf/testdata/base_with_cdex_v2.vdex | bin | 0 -> 2626976 bytes |
5 files changed, 63 insertions, 25 deletions
diff --git a/simpleperf/dso_test.cpp b/simpleperf/dso_test.cpp index 02958ce6..c8618036 100644 --- a/simpleperf/dso_test.cpp +++ b/simpleperf/dso_test.cpp @@ -152,24 +152,28 @@ TEST(DebugElfFileFinder, build_id_mismatch) { TEST(dso, dex_file_dso) { #if defined(__linux__) for (DsoType dso_type : {DSO_DEX_FILE, DSO_ELF_FILE}) { - std::unique_ptr<Dso> dso = Dso::CreateDso(dso_type, GetTestData("base.vdex")); - ASSERT_TRUE(dso); - dso->AddDexFileOffset(0x28); - ASSERT_EQ(DSO_DEX_FILE, dso->type()); - const Symbol* symbol = dso->FindSymbol(0x6c77e); - ASSERT_NE(symbol, nullptr); - ASSERT_EQ(symbol->addr, static_cast<uint64_t>(0x6c77e)); - ASSERT_EQ(symbol->len, static_cast<uint64_t>(0x16)); - ASSERT_STREQ(symbol->DemangledName(), - "com.example.simpleperf.simpleperfexamplewithnative.MixActivity$1.run"); - uint64_t min_vaddr; - uint64_t file_offset_of_min_vaddr; - dso->GetMinExecutableVaddr(&min_vaddr, &file_offset_of_min_vaddr); - ASSERT_EQ(min_vaddr, 0); - ASSERT_EQ(file_offset_of_min_vaddr, 0); + for (const DexFileTestData& entry : dex_file_test_data) { + if (entry.filename == "base_with_cdex_v1.vdex") { + continue; // TODO: reenable it. + } + std::unique_ptr<Dso> dso = Dso::CreateDso(dso_type, GetTestData(entry.filename)); + ASSERT_TRUE(dso); + dso->AddDexFileOffset(entry.dexfile_offset); + ASSERT_EQ(DSO_DEX_FILE, dso->type()); + const Symbol* symbol = dso->FindSymbol(entry.symbol_addr); + ASSERT_NE(symbol, nullptr); + ASSERT_EQ(symbol->addr, entry.symbol_addr); + ASSERT_EQ(symbol->len, entry.symbol_len); + ASSERT_STREQ(symbol->DemangledName(), entry.symbol_name.c_str()); + uint64_t min_vaddr; + uint64_t file_offset_of_min_vaddr; + dso->GetMinExecutableVaddr(&min_vaddr, &file_offset_of_min_vaddr); + ASSERT_EQ(min_vaddr, 0); + ASSERT_EQ(file_offset_of_min_vaddr, 0); + } // Don't crash on not exist zip entry. - dso = Dso::CreateDso(dso_type, GetTestData("base.zip!/not_exist_entry")); + std::unique_ptr<Dso> dso = Dso::CreateDso(dso_type, GetTestData("base.zip!/not_exist_entry")); ASSERT_TRUE(dso); ASSERT_EQ(nullptr, dso->FindSymbol(0)); } diff --git a/simpleperf/get_test_data.h b/simpleperf/get_test_data.h index 1ef663b9..b6a7999e 100644 --- a/simpleperf/get_test_data.h +++ b/simpleperf/get_test_data.h @@ -149,4 +149,32 @@ static const std::string PERF_DATA_WITH_IP_ZERO_IN_CALLCHAIN = // generated by `simpleperf record -e cs-etm:u ./etm_test_loop` static const std::string PERF_DATA_ETM_TEST_LOOP = "etm/perf.data"; +struct DexFileTestData { + std::string filename; + uint64_t dexfile_offset; + size_t symbol_count; + // One symbol in the dex file. + uint64_t symbol_addr; + uint64_t symbol_len; + std::string symbol_name; +}; + +static DexFileTestData dex_file_test_data[] = { + DexFileTestData{ + "base_with_cdex_v1.vdex", + 0x28, + 12435, + 0x6c77e, + 0x16, + "com.example.simpleperf.simpleperfexamplewithnative.MixActivity$1.run", + }, + DexFileTestData{ + "base_with_cdex_v2.vdex", + 0x40, + 16891, + 0x169b84, + 0x25a, + "com.android.calculator2.Calculator.onButtonClick", + }}; + #endif // SIMPLE_PERF_GET_TEST_DATA_H_ diff --git a/simpleperf/read_dex_file_test.cpp b/simpleperf/read_dex_file_test.cpp index 843a964c..fc72ceda 100644 --- a/simpleperf/read_dex_file_test.cpp +++ b/simpleperf/read_dex_file_test.cpp @@ -32,12 +32,18 @@ TEST(read_dex_file, smoke) { auto symbol_callback = [&](DexFileSymbol* symbol) { symbols.emplace_back(symbol->name, symbol->addr, symbol->size); }; - ASSERT_TRUE(ReadSymbolsFromDexFile(GetTestData("base.vdex"), {0x28}, symbol_callback)); - ASSERT_EQ(12435u, symbols.size()); - auto it = std::find_if(symbols.begin(), symbols.end(), - [](const Symbol& symbol) { return symbol.addr == 0x6c77e; }); - ASSERT_NE(it, symbols.end()); - ASSERT_EQ(it->addr, 0x6c77e); - ASSERT_EQ(it->len, 0x16); - ASSERT_STREQ(it->Name(), "com.example.simpleperf.simpleperfexamplewithnative.MixActivity$1.run"); -} + for (DexFileTestData& entry : dex_file_test_data) { + if (entry.filename == "base_with_cdex_v1.vdex") { + continue; // TODO: reenable it. + } + ASSERT_TRUE(ReadSymbolsFromDexFile(GetTestData(entry.filename), {entry.dexfile_offset}, + symbol_callback)); + ASSERT_EQ(entry.symbol_count, symbols.size()); + auto it = std::find_if(symbols.begin(), symbols.end(), + [&](const Symbol& symbol) { return symbol.addr == entry.symbol_addr; }); + ASSERT_NE(it, symbols.end()); + ASSERT_EQ(it->addr, entry.symbol_addr); + ASSERT_EQ(it->len, entry.symbol_len); + ASSERT_STREQ(it->Name(), entry.symbol_name.c_str()); + } +}
\ No newline at end of file diff --git a/simpleperf/testdata/base.vdex b/simpleperf/testdata/base_with_cdex_v1.vdex Binary files differindex b0ea0184..b0ea0184 100644 --- a/simpleperf/testdata/base.vdex +++ b/simpleperf/testdata/base_with_cdex_v1.vdex diff --git a/simpleperf/testdata/base_with_cdex_v2.vdex b/simpleperf/testdata/base_with_cdex_v2.vdex Binary files differnew file mode 100644 index 00000000..16ecc6fd --- /dev/null +++ b/simpleperf/testdata/base_with_cdex_v2.vdex |