Port most of the remainder of //tools/android from GYP to GN
BUG=535389
TEST=None
Review URL: https://codereview.chromium.org/1369153002
Cr-Commit-Position: refs/heads/master@{#352282}
diff --git a/BUILD.gn b/BUILD.gn
index 1ede840..fb831ba6 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -228,6 +228,7 @@
"//build/android/rezip",
"//third_party/errorprone:chromium_errorprone",
"//tools/android:android_tools",
+ "//tools/android/heap_profiler:heap_profiler_unittests",
"//tools/imagediff($host_toolchain)",
# TODO(GYP): Remove these when the components_unittests work.
@@ -734,6 +735,7 @@
"//media/mojo/services:cdm_service",
"//media/mojo:tests",
"//mojo:tests",
+
# TODO(use-new-edk):
#"//mojo/edk/js/test:js_integration_tests",
#"//mojo/edk/js/tests:js_to_cpp_bindings_python",
diff --git a/build/gn_migration.gypi b/build/gn_migration.gypi
index 03fc48bc..609f4318 100644
--- a/build/gn_migration.gypi
+++ b/build/gn_migration.gypi
@@ -290,6 +290,7 @@
'../breakpad/breakpad.gyp:dump_syms',
'../build/android/rezip.gyp:rezip_apk_jar',
#"//clank" TODO(GYP) - conditional somehow?
+ '../tools/android/heap_profiler/heap_profiler_unittests_apk',
'../tools/imagediff/image_diff.gyp:image_diff#host',
'../tools/telemetry/telemetry.gyp:bitmaptools#host',
diff --git a/tools/android/BUILD.gn b/tools/android/BUILD.gn
index 5347bf4..0804c19d 100644
--- a/tools/android/BUILD.gn
+++ b/tools/android/BUILD.gn
@@ -5,10 +5,36 @@
# Intermediate target grouping the android tools needed to run native
# unittests and instrumentation test apks.
#
-# GYP: //android/tools/android_tools.gyp:android_tools
+# GYP: //tools/android/android_tools.gyp:android_tools
group("android_tools") {
deps = [
+ "//tools/android/adb_reboot",
+ "//tools/android/file_poller",
"//tools/android/forwarder2",
"//tools/android/md5sum",
+ "//tools/android/purge_ashmem",
+ "//tools/telemetry:bitmaptools($host_toolchain)",
+ ]
+}
+
+# GYP: //tools/android/android_tools.gyp:heap_profiler
+group("heap_profiler") {
+ deps = [
+ "//tools/android/heap_profiler:heap_dump",
+ "//tools/android/heap_profiler:heap_profiler",
+ ]
+}
+
+# GYP: //tools/android/android_tools.gyp:memdump
+group("memdump") {
+ deps = [
+ "//tools/android/memdump",
+ ]
+}
+
+# GYP: //tools/android/android_tools.gyp:ps_ext
+group("ps_ext") {
+ deps = [
+ "//tools/android/ps_ext",
]
}
diff --git a/tools/android/adb_reboot/BUILD.gn b/tools/android/adb_reboot/BUILD.gn
new file mode 100644
index 0000000..9c59f949
--- /dev/null
+++ b/tools/android/adb_reboot/BUILD.gn
@@ -0,0 +1,9 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+executable("adb_reboot") {
+ sources = [
+ "adb_reboot.c",
+ ]
+}
diff --git a/tools/android/android_tools.gyp b/tools/android/android_tools.gyp
index b2907159..e48fc29 100644
--- a/tools/android/android_tools.gyp
+++ b/tools/android/android_tools.gyp
@@ -21,6 +21,7 @@
],
},
{
+ # GN: //tools/android:heap_profiler
'target_name': 'heap_profiler',
'type': 'none',
'dependencies': [
@@ -29,6 +30,7 @@
],
},
{
+ # GN: //tools/android:memdump
'target_name': 'memdump',
'type': 'none',
'dependencies': [
@@ -43,6 +45,7 @@
],
},
{
+ # GN: //tools/android:ps_ext
'target_name': 'ps_ext',
'type': 'none',
'dependencies': [
@@ -50,6 +53,7 @@
],
},
{
+ # GN: //tools/android:customtabs_benchmark
'target_name': 'customtabs_benchmark',
'type': 'none',
'dependencies': [
diff --git a/tools/android/file_poller/BUILD.gn b/tools/android/file_poller/BUILD.gn
new file mode 100644
index 0000000..828dc56
--- /dev/null
+++ b/tools/android/file_poller/BUILD.gn
@@ -0,0 +1,15 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+executable("file_poller") {
+ sources = [
+ "file_poller.cc",
+ ]
+ deps = [
+ "//base",
+ ]
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [ "//build/config/compiler:no_chromium_code" ]
+}
diff --git a/tools/android/heap_profiler/BUILD.gn b/tools/android/heap_profiler/BUILD.gn
new file mode 100644
index 0000000..dd8da99e
--- /dev/null
+++ b/tools/android/heap_profiler/BUILD.gn
@@ -0,0 +1,63 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//testing/test.gni")
+
+shared_library("heap_profiler") {
+ sources = [
+ "heap_profiler_hooks_android.c",
+ ]
+ public_deps = [
+ ":heap_profiler_core",
+ ]
+}
+
+source_set("heap_profiler_core") {
+ sources = [
+ "heap_profiler.c",
+ "heap_profiler.h",
+ ]
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [ "//build/config/compiler:no_chromium_code" ]
+}
+
+executable("heap_dump") {
+ sources = [
+ "heap_dump.c",
+ ]
+
+ deps = [
+ ":heap_profiler_core",
+ ]
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [ "//build/config/compiler:no_chromium_code" ]
+}
+
+test("heap_profiler_unittests") {
+ sources = [
+ "heap_profiler_unittest.cc",
+ ]
+ deps = [
+ ":heap_profiler_core",
+ "//testing/gtest",
+ "//testing/gtest:gtest_main",
+ ]
+}
+
+executable("heap_profiler_integrationtest") {
+ testonly = true
+
+ sources = [
+ "heap_profiler_integrationtest.cc",
+ ]
+ deps = [
+ "//testing/gtest",
+ ":heap_profiler",
+ ]
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [ "//build/config/compiler:no_chromium_code" ]
+}
diff --git a/tools/android/heap_profiler/heap_profiler_integrationtest.cc b/tools/android/heap_profiler/heap_profiler_integrationtest.cc
index ba7ebea..5dac5c32 100644
--- a/tools/android/heap_profiler/heap_profiler_integrationtest.cc
+++ b/tools/android/heap_profiler/heap_profiler_integrationtest.cc
@@ -10,7 +10,6 @@
#include <unistd.h>
#include <map>
-#include "base/compiler_specific.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "tools/android/heap_profiler/heap_profiler.h"
diff --git a/tools/android/heap_profiler/heap_profiler_unittest.cc b/tools/android/heap_profiler/heap_profiler_unittest.cc
index 1771a88a..64b92b8 100644
--- a/tools/android/heap_profiler/heap_profiler_unittest.cc
+++ b/tools/android/heap_profiler/heap_profiler_unittest.cc
@@ -6,7 +6,6 @@
#include <string.h>
#include <map>
-#include "base/compiler_specific.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "tools/android/heap_profiler/heap_profiler.h"
@@ -74,7 +73,7 @@
if (st->alloc_bytes == 0)
continue;
++stack_traces_seen;
- EXPECT_EQ(1, stacktrace_bytes_by_alloc.count(st));
+ EXPECT_EQ(1u, stacktrace_bytes_by_alloc.count(st));
EXPECT_EQ(stacktrace_bytes_by_alloc[st], st->alloc_bytes);
}
@@ -90,9 +89,9 @@
heap_profiler_alloc((void*)0x1000, 1024, st1.frames, st1.depth, 0);
heap_profiler_alloc((void*)0x2000, 2048, st1.frames, st1.depth, 0);
- EXPECT_EQ(2, stats_.num_allocs);
- EXPECT_EQ(1, stats_.num_stack_traces);
- EXPECT_EQ(1024 + 2048, stats_.total_alloc_bytes);
+ EXPECT_EQ(2u, stats_.num_allocs);
+ EXPECT_EQ(1u, stats_.num_stack_traces);
+ EXPECT_EQ(1024u + 2048, stats_.total_alloc_bytes);
ExpectAlloc(0x1000, 0x13ff, st1, 0);
ExpectAlloc(0x2000, 0x27ff, st1, 0);
}
@@ -104,9 +103,9 @@
heap_profiler_alloc((void*)0x2000, 2048, st2.frames, st2.depth, 0);
heap_profiler_alloc((void*)0x3000, 32, st1.frames, st1.depth, 0);
- EXPECT_EQ(3, stats_.num_allocs);
- EXPECT_EQ(2, stats_.num_stack_traces);
- EXPECT_EQ(1024 + 2048 + 32, stats_.total_alloc_bytes);
+ EXPECT_EQ(3u, stats_.num_allocs);
+ EXPECT_EQ(2u, stats_.num_stack_traces);
+ EXPECT_EQ(1024u + 2048 + 32, stats_.total_alloc_bytes);
ExpectAlloc(0x1000, 0x13ff, st1, 0);
ExpectAlloc(0x2000, 0x27ff, st2, 0);
ExpectAlloc(0x3000, 0x301f, st1, 0);
@@ -117,9 +116,9 @@
heap_profiler_alloc((void*)0x1000, 1024, st1.frames, st1.depth, 0);
heap_profiler_free((void*)0x1000, 1024, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, Realloc) {
@@ -139,9 +138,9 @@
heap_profiler_free((void*)0x1000, 1024, NULL);
heap_profiler_free((void*)0x3000, 32, NULL);
- EXPECT_EQ(2, stats_.num_allocs);
- EXPECT_EQ(2, stats_.num_stack_traces);
- EXPECT_EQ(2048 + 64, stats_.total_alloc_bytes);
+ EXPECT_EQ(2u, stats_.num_allocs);
+ EXPECT_EQ(2u, stats_.num_stack_traces);
+ EXPECT_EQ(2048u + 64, stats_.total_alloc_bytes);
ExpectAlloc(0x2000, 0x27ff, st1, 0);
ExpectAlloc(0x4000, 0x403f, st2, 0);
}
@@ -159,9 +158,9 @@
heap_profiler_free((void*)0x3000, 32, NULL);
heap_profiler_free((void*)0x4000, 64, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, AllocAndFreeWithZeroSize) {
@@ -172,9 +171,9 @@
heap_profiler_free((void*)0x1000, 0, NULL);
- EXPECT_EQ(1, stats_.num_allocs);
- EXPECT_EQ(1, stats_.num_stack_traces);
- EXPECT_EQ(2048, stats_.total_alloc_bytes);
+ EXPECT_EQ(1u, stats_.num_allocs);
+ EXPECT_EQ(1u, stats_.num_stack_traces);
+ EXPECT_EQ(2048u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, AllocAndFreeContiguous) {
@@ -185,9 +184,9 @@
heap_profiler_free((void*)0x1000, 8192, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, SparseAllocsOneLargeOuterFree) {
@@ -200,9 +199,9 @@
heap_profiler_alloc((void*)0x9000, 4096, st2.frames, st2.depth, 0);
heap_profiler_free((void*)0x0800, 8192, NULL);
- EXPECT_EQ(1, stats_.num_allocs);
- EXPECT_EQ(1, stats_.num_stack_traces);
- EXPECT_EQ(4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(1u, stats_.num_allocs);
+ EXPECT_EQ(1u, stats_.num_stack_traces);
+ EXPECT_EQ(4096u, stats_.total_alloc_bytes);
ExpectAlloc(0x9000, 0x9fff, st2, 0);
}
@@ -223,9 +222,9 @@
heap_profiler_alloc((void*)0x3000, 1024, st3.frames, st3.depth, 0);
heap_profiler_free((void*)0x2040, 4096 - 64 - 64, NULL);
- EXPECT_EQ(4, stats_.num_allocs);
- EXPECT_EQ(3, stats_.num_stack_traces);
- EXPECT_EQ(1024 + 64 + 64 + 1024, stats_.total_alloc_bytes);
+ EXPECT_EQ(4u, stats_.num_allocs);
+ EXPECT_EQ(3u, stats_.num_stack_traces);
+ EXPECT_EQ(1024u + 64 + 64 + 1024, stats_.total_alloc_bytes);
ExpectAlloc(0x1000, 0x13ff, st1, 0);
ExpectAlloc(0x2000, 0x203f, st2, 0);
@@ -241,25 +240,25 @@
heap_profiler_alloc((void*)0x4000, 4096, st1.frames, st1.depth, 0);
heap_profiler_free((void*)0x800, 4096, NULL);
- EXPECT_EQ(4, stats_.num_allocs);
- EXPECT_EQ(2048 + 4096 + 4096 + 4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(4u, stats_.num_allocs);
+ EXPECT_EQ(2048u + 4096 + 4096 + 4096, stats_.total_alloc_bytes);
heap_profiler_free((void*)0x1800, 4096, NULL);
- EXPECT_EQ(3, stats_.num_allocs);
- EXPECT_EQ(2048 + 4096 + 4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(3u, stats_.num_allocs);
+ EXPECT_EQ(2048u + 4096 + 4096, stats_.total_alloc_bytes);
heap_profiler_free((void*)0x2800, 4096, NULL);
- EXPECT_EQ(2, stats_.num_allocs);
- EXPECT_EQ(2048 + 4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(2u, stats_.num_allocs);
+ EXPECT_EQ(2048u + 4096, stats_.total_alloc_bytes);
heap_profiler_free((void*)0x3800, 4096, NULL);
- EXPECT_EQ(1, stats_.num_allocs);
- EXPECT_EQ(2048, stats_.total_alloc_bytes);
+ EXPECT_EQ(1u, stats_.num_allocs);
+ EXPECT_EQ(2048u, stats_.total_alloc_bytes);
heap_profiler_free((void*)0x4800, 4096, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, AllocAndOverFreeContiguous) {
@@ -270,9 +269,9 @@
heap_profiler_free((void*)0, 16834, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, AllocContiguousAndPunchHole) {
@@ -284,9 +283,9 @@
// Punch a 4k hole in the middle of the two contiguous 4k allocs.
heap_profiler_free((void*)0x1800, 4096, NULL);
- EXPECT_EQ(2, stats_.num_allocs);
- EXPECT_EQ(2, stats_.num_stack_traces);
- EXPECT_EQ(4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(2u, stats_.num_allocs);
+ EXPECT_EQ(2u, stats_.num_stack_traces);
+ EXPECT_EQ(4096u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, AllocAndPartialFree) {
@@ -305,9 +304,9 @@
heap_profiler_free((void*)0x4000, 512, NULL); // Free up the 4th alloc...
heap_profiler_free((void*)0x4200, 512, NULL); // ...but do it in two halves.
- EXPECT_EQ(4, stats_.num_allocs); // 1 + 2 + two sides around the hole 3.
- EXPECT_EQ(3, stats_.num_stack_traces); // st4 should be gone.
- EXPECT_EQ(896 + 896 + 512, stats_.total_alloc_bytes);
+ EXPECT_EQ(4u, stats_.num_allocs); // 1 + 2 + two sides around the hole 3.
+ EXPECT_EQ(3u, stats_.num_stack_traces); // st4 should be gone.
+ EXPECT_EQ(896u + 896 + 512, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, RandomIndividualAllocAndFrees) {
@@ -364,21 +363,21 @@
TEST_F(HeapProfilerTest, NoUnwindShouldNotCrashButNoop) {
heap_profiler_alloc((void*)0x1000, 1024, NULL, 0, 0);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, FreeNonExisting) {
StackTrace st1 = GenStackTrace(5, 0x0);
heap_profiler_free((void*)0x1000, 1024, NULL);
heap_profiler_free((void*)0x1400, 1024, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
heap_profiler_alloc((void*)0x1000, 1024, st1.frames, st1.depth, 0);
- EXPECT_EQ(1, stats_.num_allocs);
- EXPECT_EQ(1024, stats_.total_alloc_bytes);
+ EXPECT_EQ(1u, stats_.num_allocs);
+ EXPECT_EQ(1024u, stats_.total_alloc_bytes);
}
TEST_F(HeapProfilerTest, FlagsConsistency) {
@@ -395,11 +394,11 @@
ExpectAlloc(0x1000, 0x17ff, st1, 42);
heap_profiler_free((void*)0x1000, 2048, &flags);
- EXPECT_EQ(42, flags);
+ EXPECT_EQ(42u, flags);
ExpectAlloc(0x2800, 0x2fff, st1, 142);
heap_profiler_free((void*)0x2800, 2048, &flags);
- EXPECT_EQ(142, flags);
+ EXPECT_EQ(142u, flags);
}
TEST_F(HeapProfilerTest, BeConsistentOnOOM) {
@@ -419,9 +418,9 @@
for (uintptr_t i = 0; i < NUM_ALLOCS; ++i)
heap_profiler_free((void*)(i * 32), 32, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
- EXPECT_EQ(0, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
}
#ifdef __LP64__
@@ -436,22 +435,22 @@
(void*)0xfffffffffffff000L, 4096, st3.frames, st3.depth, 0);
EXPECT_EQ(3, stats_.num_allocs);
EXPECT_EQ(3, stats_.num_stack_traces);
- EXPECT_EQ(4096 + 4096 + 4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(4096u + 4096 + 4096, stats_.total_alloc_bytes);
heap_profiler_free((void*)0x1000, 4096, NULL);
- EXPECT_EQ(2, stats_.num_allocs);
- EXPECT_EQ(2, stats_.num_stack_traces);
- EXPECT_EQ(4096 + 4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(2u, stats_.num_allocs);
+ EXPECT_EQ(2u, stats_.num_stack_traces);
+ EXPECT_EQ(4096u + 4096, stats_.total_alloc_bytes);
heap_profiler_free((void*)0x7ffffffffffff000L, 4096, NULL);
- EXPECT_EQ(1, stats_.num_allocs);
- EXPECT_EQ(1, stats_.num_stack_traces);
- EXPECT_EQ(4096, stats_.total_alloc_bytes);
+ EXPECT_EQ(1u, stats_.num_allocs);
+ EXPECT_EQ(1u, stats_.num_stack_traces);
+ EXPECT_EQ(4096u, stats_.total_alloc_bytes);
heap_profiler_free((void*)0xfffffffffffff000L, 4096, NULL);
- EXPECT_EQ(0, stats_.num_allocs);
- EXPECT_EQ(0, stats_.num_stack_traces);
- EXPECT_EQ(0, stats_.total_alloc_bytes);
+ EXPECT_EQ(0u, stats_.num_allocs);
+ EXPECT_EQ(0u, stats_.num_stack_traces);
+ EXPECT_EQ(0u, stats_.total_alloc_bytes);
}
#endif
diff --git a/tools/android/memdump/BUILD.gn b/tools/android/memdump/BUILD.gn
new file mode 100644
index 0000000..dafc7ec
--- /dev/null
+++ b/tools/android/memdump/BUILD.gn
@@ -0,0 +1,12 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+executable("memdump") {
+ sources = [
+ "memdump.cc",
+ ]
+ deps = [
+ "//base",
+ ]
+}
diff --git a/tools/android/memdump/memdump.cc b/tools/android/memdump/memdump.cc
index 27271576..33539e9 100644
--- a/tools/android/memdump/memdump.cc
+++ b/tools/android/memdump/memdump.cc
@@ -216,7 +216,7 @@
for (uint64 addr = memory_map.start_address, page_index = 0;
addr < memory_map.end_address;
addr += kPageSize, ++page_index) {
- DCHECK_EQ(0, addr % kPageSize);
+ DCHECK_EQ(0u, addr % kPageSize);
PageMapEntry page_map_entry = {};
static_assert(sizeof(PageMapEntry) == sizeof(uint64), "unexpected size");
ssize_t bytes = read(pagemap_fd, &page_map_entry, sizeof(page_map_entry));
diff --git a/tools/android/ps_ext/BUILD.gn b/tools/android/ps_ext/BUILD.gn
new file mode 100644
index 0000000..6fbba19
--- /dev/null
+++ b/tools/android/ps_ext/BUILD.gn
@@ -0,0 +1,9 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+executable("ps_ext") {
+ sources = [
+ "ps_ext.c",
+ ]
+}
diff --git a/tools/android/purge_ashmem/BUILD.gn b/tools/android/purge_ashmem/BUILD.gn
new file mode 100644
index 0000000..e717fb13
--- /dev/null
+++ b/tools/android/purge_ashmem/BUILD.gn
@@ -0,0 +1,12 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+executable("purge_ashmem") {
+ sources = [
+ "purge_ashmem.c",
+ ]
+ deps = [
+ "//third_party/ashmem",
+ ]
+}