diff options
Diffstat (limited to 'community/chromium/no-mallinfo.patch')
-rw-r--r-- | community/chromium/no-mallinfo.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/community/chromium/no-mallinfo.patch b/community/chromium/no-mallinfo.patch index 3ea66e475d..ceaf009295 100644 --- a/community/chromium/no-mallinfo.patch +++ b/community/chromium/no-mallinfo.patch @@ -20,3 +20,66 @@ size_t GetMemoryUsageKB() { struct mallinfo minfo = mallinfo(); uint64_t mem_usage = +diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc +index d569350..6edcffe 100644 +--- content/renderer/render_thread_impl.cc ++++ content/renderer/render_thread_impl.cc +@@ -1821,6 +1821,49 @@ static size_t GetMallocUsage() { + } + + } // namespace ++#elif defined(OS_LINUX) && !defined(__GLIBC__) ++namespace { ++ ++static size_t GetMallocUsage() { ++ char *line=NULL; ++ size_t n,usage=0; ++ FILE *f = fopen("/proc/self/maps", "r"); ++ char *path, *perm; ++ if (f == NULL) { ++ perror("/proc/self/maps"); ++ return 0; ++ } ++ path = (char *)malloc(PATH_MAX+16); ++ if (path == NULL) ++ goto out; ++ perm = path + PATH_MAX; ++ ++ while (getline(&line, &n, f) >=0) { ++ size_t start,end,offset,inode; ++ int devmaj, devmin, items; ++ ++ items = sscanf(line, "%zx-%zx %s %zx %x:%x %zu %s", ++ &start, &end, perm, &offset, ++ &devmaj, &devmin, &inode, path); ++ ++ if (items < 7) ++ continue; ++ ++ if (items < 8) ++ path[0] = '\0'; ++ ++ if ((strcmp(perm, "rw-p") == 0 && devmaj+devmin == 0) ++ && (path[0] == '\0' || strcmp(path, "[heap]") == 0)) ++ usage += end-start; ++ } ++ free(line); ++ free(path); ++out: ++ fclose(f); ++ return usage; ++} ++ ++} // namespace + #endif + + // TODO(tasak): Once it is possible to use memory-infra without tracing, +@@ -1839,7 +1882,7 @@ void RenderThreadImpl::RecordPurgeAndSuspendMetrics() const { + blink_stats.partitionAllocTotalAllocatedBytes / 1024); + UMA_HISTOGRAM_MEMORY_KB("PurgeAndSuspend.Memory.BlinkGCKB", + blink_stats.blinkGCTotalAllocatedBytes / 1024); +-#if defined(OS_LINUX) || defined(OS_ANDROID) ++#if (defined(OS_LINUX) && defined(__GLIBC__)) || defined(OS_ANDROID) + struct mallinfo minfo = mallinfo(); + #if defined(USE_TCMALLOC) + size_t malloc_usage = minfo.uordblks; |