Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 48eab9a2 authored by Yabin Cui's avatar Yabin Cui Committed by android-build-merger
Browse files

Merge "libprocinfo: provide MapInfo structure for reading maps." am: cc684eb0 am: 9091ab6f

am: 636b99a2

Change-Id: I672175bd07796012d7c62cc80ea01185ce014827
parents 98002dd8 636b99a2
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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 */
+1 −12
Original line number Diff line number Diff line
@@ -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); });
+13 −13
Original line number Diff line number Diff line
@@ -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);
}