summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-06-23 02:25:30 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-06-23 02:25:30 +0000
commit4ab66e2d5bac96af5eea2cbcde376e16b2d1dc18 (patch)
tree6dc57a36ffbf286372c05eb2d1782f4ecececca4
parent527143ba308f6361a7d8f63d48de6bfe1da71fcf (diff)
parentf75eef15c12ad8023e41b0237184e1ca67794b11 (diff)
downloadextras-android12-mainline-documentsui-release.tar.gz
Snap for 7483611 from f75eef15c12ad8023e41b0237184e1ca67794b11 to mainline-documentsui-releaseandroid-mainline-12.0.0_r26android-mainline-12.0.0_r2aml_doc_310851020android12-mainline-documentsui-release
Change-Id: Ia887a7d37925254ce32287d91c5965f8ac4158a2
-rw-r--r--simpleperf/dso_test.cpp36
-rw-r--r--simpleperf/get_test_data.h28
-rw-r--r--simpleperf/read_dex_file_test.cpp24
-rw-r--r--simpleperf/testdata/base_with_cdex_v1.vdex (renamed from simpleperf/testdata/base.vdex)bin2046136 -> 2046136 bytes
-rw-r--r--simpleperf/testdata/base_with_cdex_v2.vdexbin0 -> 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
index b0ea0184..b0ea0184 100644
--- a/simpleperf/testdata/base.vdex
+++ b/simpleperf/testdata/base_with_cdex_v1.vdex
Binary files differ
diff --git a/simpleperf/testdata/base_with_cdex_v2.vdex b/simpleperf/testdata/base_with_cdex_v2.vdex
new file mode 100644
index 00000000..16ecc6fd
--- /dev/null
+++ b/simpleperf/testdata/base_with_cdex_v2.vdex
Binary files differ