diff options
| author | Yabin Cui <yabinc@google.com> | 2018-10-30 17:14:35 -0700 |
|---|---|---|
| committer | Yabin Cui <yabinc@google.com> | 2018-10-30 17:36:09 -0700 |
| commit | 0fe48f943dc87b2713a6369b16d0b1158754da1b (patch) | |
| tree | 602bad22a16af1e1694490ca66484b2ddbacba80 /libprocinfo | |
| parent | e94eb5140c9cdeac370b50208ba9a00ba059bafa (diff) | |
| download | system_core-0fe48f943dc87b2713a6369b16d0b1158754da1b.tar.gz system_core-0fe48f943dc87b2713a6369b16d0b1158754da1b.tar.bz2 system_core-0fe48f943dc87b2713a6369b16d0b1158754da1b.zip | |
libprocinfo: provide MapInfo structure for reading maps.
Bug: none
Test: run libprocinfo_test.
Change-Id: I4d3c0f3012e91571aef7ebf4b154df1c9c5addc2
Diffstat (limited to 'libprocinfo')
| -rw-r--r-- | libprocinfo/include/procinfo/process_map.h | 19 | ||||
| -rw-r--r-- | libprocinfo/process_map_benchmark.cpp | 13 | ||||
| -rw-r--r-- | libprocinfo/process_map_test.cpp | 26 |
3 files changed, 33 insertions, 25 deletions
diff --git a/libprocinfo/include/procinfo/process_map.h b/libprocinfo/include/procinfo/process_map.h index 3771f9f88..0fc420186 100644 --- a/libprocinfo/include/procinfo/process_map.h +++ b/libprocinfo/include/procinfo/process_map.h @@ -22,6 +22,7 @@ #include <functional> #include <string> +#include <vector> #include <android-base/file.h> @@ -147,5 +148,23 @@ inline bool ReadProcessMaps( return ReadMapFile("/proc/" + std::to_string(pid) + "/maps", callback); } +struct MapInfo { + uint64_t start; + uint64_t end; + uint16_t flags; + uint64_t pgoff; + std::string name; + + MapInfo(uint64_t start, uint64_t end, uint16_t flags, uint64_t pgoff, const char* name) + : start(start), end(end), flags(flags), pgoff(pgoff), name(name) {} +}; + +inline bool ReadProcessMaps(pid_t pid, std::vector<MapInfo>* maps) { + return ReadProcessMaps( + pid, [&](uint64_t start, uint64_t end, uint16_t flags, uint64_t pgoff, const char* name) { + maps->emplace_back(start, end, flags, pgoff, name); + }); +} + } /* namespace procinfo */ } /* namespace android */ diff --git a/libprocinfo/process_map_benchmark.cpp b/libprocinfo/process_map_benchmark.cpp index d9e8a4dee..04995d4cb 100644 --- a/libprocinfo/process_map_benchmark.cpp +++ b/libprocinfo/process_map_benchmark.cpp @@ -27,21 +27,10 @@ #include <benchmark/benchmark.h> -struct MapInfo { - uint64_t start; - uint64_t end; - uint16_t flags; - uint64_t pgoff; - const std::string name; - - MapInfo(uint64_t start, uint64_t end, uint16_t flags, uint64_t pgoff, const char* name) - : start(start), end(end), flags(flags), pgoff(pgoff), name(name) {} -}; - static void BM_ReadMapFile(benchmark::State& state) { std::string map_file = android::base::GetExecutableDirectory() + "/testdata/maps"; for (auto _ : state) { - std::vector<MapInfo> maps; + std::vector<android::procinfo::MapInfo> maps; android::procinfo::ReadMapFile( map_file, [&](uint64_t start, uint64_t end, uint16_t flags, uint64_t pgoff, const char* name) { maps.emplace_back(start, end, flags, pgoff, name); }); diff --git a/libprocinfo/process_map_test.cpp b/libprocinfo/process_map_test.cpp index 4b93c5b1e..170a806f3 100644 --- a/libprocinfo/process_map_test.cpp +++ b/libprocinfo/process_map_test.cpp @@ -22,20 +22,9 @@ #include <gtest/gtest.h> -struct MapInfo { - uint64_t start; - uint64_t end; - uint16_t flags; - uint64_t pgoff; - const std::string name; - - MapInfo(uint64_t start, uint64_t end, uint16_t flags, uint64_t pgoff, const char* name) - : start(start), end(end), flags(flags), pgoff(pgoff), name(name) {} -}; - -TEST(process_map, smoke) { +TEST(process_map, ReadMapFile) { std::string map_file = android::base::GetExecutableDirectory() + "/testdata/maps"; - std::vector<MapInfo> maps; + std::vector<android::procinfo::MapInfo> maps; ASSERT_TRUE(android::procinfo::ReadMapFile( map_file, [&](uint64_t start, uint64_t end, uint16_t flags, uint64_t pgoff, const char* name) { maps.emplace_back(start, end, flags, pgoff, name); })); @@ -58,3 +47,14 @@ TEST(process_map, smoke) { "[anon:dalvik-classes.dex extracted in memory from " "/data/app/com.google.sample.tunnel-HGGRU03Gu1Mwkf_-RnFmvw==/base.apk]"); } + +TEST(process_map, ReadProcessMaps) { + std::vector<android::procinfo::MapInfo> maps; + ASSERT_TRUE(android::procinfo::ReadProcessMaps( + getpid(), [&](uint64_t start, uint64_t end, uint16_t flags, uint64_t pgoff, + const char* name) { maps.emplace_back(start, end, flags, pgoff, name); })); + ASSERT_GT(maps.size(), 0u); + maps.clear(); + ASSERT_TRUE(android::procinfo::ReadProcessMaps(getpid(), &maps)); + ASSERT_GT(maps.size(), 0u); +} |
