| Index: third_party/tcmalloc/chromium/src/heap-profiler.cc | 
| diff --git a/third_party/tcmalloc/chromium/src/heap-profiler.cc b/third_party/tcmalloc/chromium/src/heap-profiler.cc | 
| index 512dc7cd33139b22b47c0ad3218aa6b1ec94cdb3..df110f113d813974a86523cab37af47e770ca154 100644 | 
| --- a/third_party/tcmalloc/chromium/src/heap-profiler.cc | 
| +++ b/third_party/tcmalloc/chromium/src/heap-profiler.cc | 
| @@ -81,6 +81,36 @@ | 
| #endif | 
| #endif | 
|  | 
| +#if defined(__ANDROID__) || defined(ANDROID) | 
| +// On android, there are no environment variables. | 
| +// Instead, we use system properties, set via: | 
| +//   adb shell setprop prop_name prop_value | 
| +// From <sys/system_properties.h>, | 
| +//   PROP_NAME_MAX   32 | 
| +//   PROP_VALUE_MAX  92 | 
| +#define HEAPPROFILE "heapprof" | 
| +#define HEAP_PROFILE_ALLOCATION_INTERVAL "heapprof.allocation_interval" | 
| +#define HEAP_PROFILE_DEALLOCATION_INTERVAL "heapprof.deallocation_interval" | 
| +#define HEAP_PROFILE_INUSE_INTERVAL "heapprof.inuse_interval" | 
| +#define HEAP_PROFILE_TIME_INTERVAL "heapprof.time_interval" | 
| +#define HEAP_PROFILE_MMAP_LOG "heapprof.mmap_log" | 
| +#define HEAP_PROFILE_MMAP "heapprof.mmap" | 
| +#define HEAP_PROFILE_ONLY_MMAP "heapprof.only_mmap" | 
| +#define DEEP_HEAP_PROFILE "heapprof.deep_heap_profile" | 
| +#define HEAP_PROFILE_TYPE_STATISTICS "heapprof.type_statistics" | 
| +#else  // defined(__ANDROID__) || defined(ANDROID) | 
| +#define HEAPPROFILE "HEAPPROFILE" | 
| +#define HEAP_PROFILE_ALLOCATION_INTERVAL "HEAP_PROFILE_ALLOCATION_INTERVAL" | 
| +#define HEAP_PROFILE_DEALLOCATION_INTERVAL "HEAP_PROFILE_DEALLOCATION_INTERVAL" | 
| +#define HEAP_PROFILE_INUSE_INTERVAL "HEAP_PROFILE_INUSE_INTERVAL" | 
| +#define HEAP_PROFILE_TIME_INTERVAL "HEAP_PROFILE_TIME_INTERVAL" | 
| +#define HEAP_PROFILE_MMAP_LOG "HEAP_PROFILE_MMAP_LOG" | 
| +#define HEAP_PROFILE_MMAP "HEAP_PROFILE_MMAP" | 
| +#define HEAP_PROFILE_ONLY_MMAP "HEAP_PROFILE_ONLY_MMAP" | 
| +#define DEEP_HEAP_PROFILE "DEEP_HEAP_PROFILE" | 
| +#define HEAP_PROFILE_TYPE_STATISTICS "HEAP_PROFILE_TYPE_STATISTICS" | 
| +#endif  // defined(__ANDROID__) || defined(ANDROID) | 
| + | 
| using STL_NAMESPACE::string; | 
| using STL_NAMESPACE::sort; | 
|  | 
| @@ -92,42 +122,42 @@ using STL_NAMESPACE::sort; | 
| //---------------------------------------------------------------------- | 
|  | 
| DEFINE_int64(heap_profile_allocation_interval, | 
| -             EnvToInt64("HEAP_PROFILE_ALLOCATION_INTERVAL", 1 << 30 /*1GB*/), | 
| +             EnvToInt64(HEAP_PROFILE_ALLOCATION_INTERVAL, 1 << 30 /*1GB*/), | 
| "If non-zero, dump heap profiling information once every " | 
| "specified number of bytes allocated by the program since " | 
| "the last dump."); | 
| DEFINE_int64(heap_profile_deallocation_interval, | 
| -             EnvToInt64("HEAP_PROFILE_DEALLOCATION_INTERVAL", 0), | 
| +             EnvToInt64(HEAP_PROFILE_DEALLOCATION_INTERVAL, 0), | 
| "If non-zero, dump heap profiling information once every " | 
| "specified number of bytes deallocated by the program " | 
| "since the last dump."); | 
| // We could also add flags that report whenever inuse_bytes changes by | 
| // X or -X, but there hasn't been a need for that yet, so we haven't. | 
| DEFINE_int64(heap_profile_inuse_interval, | 
| -             EnvToInt64("HEAP_PROFILE_INUSE_INTERVAL", 100 << 20 /*100MB*/), | 
| +             EnvToInt64(HEAP_PROFILE_INUSE_INTERVAL, 100 << 20 /*100MB*/), | 
| "If non-zero, dump heap profiling information whenever " | 
| "the high-water memory usage mark increases by the specified " | 
| "number of bytes."); | 
| DEFINE_int64(heap_profile_time_interval, | 
| -             EnvToInt64("HEAP_PROFILE_TIME_INTERVAL", 0), | 
| +             EnvToInt64(HEAP_PROFILE_TIME_INTERVAL, 0), | 
| "If non-zero, dump heap profiling information once every " | 
| "specified number of seconds since the last dump."); | 
| DEFINE_bool(mmap_log, | 
| -            EnvToBool("HEAP_PROFILE_MMAP_LOG", false), | 
| +            EnvToBool(HEAP_PROFILE_MMAP_LOG, false), | 
| "Should mmap/munmap calls be logged?"); | 
| DEFINE_bool(mmap_profile, | 
| -            EnvToBool("HEAP_PROFILE_MMAP", false), | 
| +            EnvToBool(HEAP_PROFILE_MMAP, false), | 
| "If heap-profiling is on, also profile mmap, mremap, and sbrk)"); | 
| DEFINE_bool(only_mmap_profile, | 
| -            EnvToBool("HEAP_PROFILE_ONLY_MMAP", false), | 
| +            EnvToBool(HEAP_PROFILE_ONLY_MMAP, false), | 
| "If heap-profiling is on, only profile mmap, mremap, and sbrk; " | 
| "do not profile malloc/new/etc"); | 
| DEFINE_bool(deep_heap_profile, | 
| -            EnvToBool("DEEP_HEAP_PROFILE", false), | 
| +            EnvToBool(DEEP_HEAP_PROFILE, false), | 
| "If heap-profiling is on, profile deeper (only on Linux)"); | 
| #if defined(TYPE_PROFILING) | 
| DEFINE_bool(heap_profile_type_statistics, | 
| -            EnvToBool("HEAP_PROFILE_TYPE_STATISTICS", false), | 
| +            EnvToBool(HEAP_PROFILE_TYPE_STATISTICS, false), | 
| "If heap-profiling is on, dump type statistics."); | 
| #endif  // defined(TYPE_PROFILING) | 
|  | 
| @@ -628,13 +658,13 @@ extern "C" void HeapProfilerDumpAliveObjects(const char* filename) { | 
| static void HeapProfilerInit() { | 
| // Everything after this point is for setting up the profiler based on envvar | 
| char fname[PATH_MAX]; | 
| -  if (!GetUniquePathFromEnv("HEAPPROFILE", fname)) { | 
| +  if (!GetUniquePathFromEnv(HEAPPROFILE, fname)) { | 
| return; | 
| } | 
| // We do a uid check so we don't write out files in a setuid executable. | 
| #ifdef HAVE_GETEUID | 
| if (getuid() != geteuid()) { | 
| -    RAW_LOG(WARNING, ("HeapProfiler: ignoring HEAPPROFILE because " | 
| +    RAW_LOG(WARNING, ("HeapProfiler: ignoring " HEAPPROFILE " because " | 
| "program seems to be setuid\n")); | 
| return; | 
| } | 
|  |