Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(563)

Side by Side Diff: content/renderer/render_thread_impl.cc

Issue 2925073002: Move malloc/partition_alloc memory usage functions to base (Closed)
Patch Set: Moved to ProcessMetrics method, etc Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/process/process_metrics_win.cc ('k') | third_party/WebKit/Source/platform/wtf/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_thread_impl.h" 5 #include "content/renderer/render_thread_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
(...skipping 1717 matching lines...) Expand 10 before | Expand all | Expand 10 after
1728 base::Bind(&RenderThreadImpl::RecordPurgeAndSuspendMemoryGrowthMetrics, 1728 base::Bind(&RenderThreadImpl::RecordPurgeAndSuspendMemoryGrowthMetrics,
1729 base::Unretained(this), "60min", process_foregrounded_count_), 1729 base::Unretained(this), "60min", process_foregrounded_count_),
1730 base::TimeDelta::FromMinutes(60)); 1730 base::TimeDelta::FromMinutes(60));
1731 GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask( 1731 GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
1732 FROM_HERE, 1732 FROM_HERE,
1733 base::Bind(&RenderThreadImpl::RecordPurgeAndSuspendMemoryGrowthMetrics, 1733 base::Bind(&RenderThreadImpl::RecordPurgeAndSuspendMemoryGrowthMetrics,
1734 base::Unretained(this), "90min", process_foregrounded_count_), 1734 base::Unretained(this), "90min", process_foregrounded_count_),
1735 base::TimeDelta::FromMinutes(90)); 1735 base::TimeDelta::FromMinutes(90));
1736 } 1736 }
1737 1737
1738 // TODO(tasak): Replace the following GetMallocUsage() with memory-infra
1739 // when it is possible to run memory-infra without tracing.
1740 #if defined(OS_WIN)
1741 namespace {
1742
1743 static size_t GetMallocUsage() {
1744 // Iterate through whichever heap the CRT is using.
1745 HANDLE crt_heap = reinterpret_cast<HANDLE>(_get_heap_handle());
1746 if (crt_heap == NULL)
1747 return 0;
1748 if (!::HeapLock(crt_heap))
1749 return 0 ;
1750 size_t malloc_usage = 0;
1751 PROCESS_HEAP_ENTRY heap_entry;
1752 heap_entry.lpData = NULL;
1753 while (::HeapWalk(crt_heap, &heap_entry) != 0) {
1754 if ((heap_entry.wFlags & PROCESS_HEAP_ENTRY_BUSY) != 0)
1755 malloc_usage += heap_entry.cbData;
1756 }
1757 ::HeapUnlock(crt_heap);
1758 return malloc_usage;
1759 }
1760
1761 } // namespace
1762 #elif defined(OS_MACOSX) || defined(OS_IOS)
1763 namespace {
1764
1765 static size_t GetMallocUsage() {
1766 malloc_statistics_t stats = {0};
1767 malloc_zone_statistics(nullptr, &stats);
1768 return stats.size_in_use;
1769 }
1770
1771 } // namespace
1772 #endif
1773
1774 bool RenderThreadImpl::GetRendererMemoryMetrics( 1738 bool RenderThreadImpl::GetRendererMemoryMetrics(
1775 RendererMemoryMetrics* memory_metrics) const { 1739 RendererMemoryMetrics* memory_metrics) const {
1776 DCHECK(memory_metrics); 1740 DCHECK(memory_metrics);
1777 1741
1778 // Cache this result, as it can change while this code is running, and is used 1742 // Cache this result, as it can change while this code is running, and is used
1779 // as a divisor below. 1743 // as a divisor below.
1780 size_t render_view_count = RenderView::GetRenderViewCount(); 1744 size_t render_view_count = RenderView::GetRenderViewCount();
1781 1745
1782 // If there are no render views it doesn't make sense to calculate metrics 1746 // If there are no render views it doesn't make sense to calculate metrics
1783 // right now. 1747 // right now.
1784 if (render_view_count == 0) 1748 if (render_view_count == 0)
1785 return false; 1749 return false;
1786 1750
1787 blink::WebMemoryStatistics blink_stats = blink::WebMemoryStatistics::Get(); 1751 blink::WebMemoryStatistics blink_stats = blink::WebMemoryStatistics::Get();
1788 memory_metrics->partition_alloc_kb = 1752 memory_metrics->partition_alloc_kb =
1789 blink_stats.partition_alloc_total_allocated_bytes / 1024; 1753 blink_stats.partition_alloc_total_allocated_bytes / 1024;
1790 memory_metrics->blink_gc_kb = 1754 memory_metrics->blink_gc_kb =
1791 blink_stats.blink_gc_total_allocated_bytes / 1024; 1755 blink_stats.blink_gc_total_allocated_bytes / 1024;
1792 #if defined(OS_LINUX) || defined(OS_ANDROID) 1756 std::unique_ptr<base::ProcessMetrics> metric(
1793 struct mallinfo minfo = mallinfo(); 1757 base::ProcessMetrics::CreateCurrentProcessMetrics());
1794 #if defined(USE_TCMALLOC) 1758 size_t malloc_usage = metric->GetMallocUsage();
1795 size_t malloc_usage = minfo.uordblks;
1796 #else
1797 size_t malloc_usage = minfo.hblkhd + minfo.arena;
1798 #endif
1799 #else
1800 size_t malloc_usage = GetMallocUsage();
1801 #endif
1802 memory_metrics->malloc_mb = malloc_usage / 1024 / 1024; 1759 memory_metrics->malloc_mb = malloc_usage / 1024 / 1024;
1803 1760
1804 discardable_memory::ClientDiscardableSharedMemoryManager::Statistics 1761 discardable_memory::ClientDiscardableSharedMemoryManager::Statistics
1805 discardable_stats = discardable_shared_memory_manager_->GetStatistics(); 1762 discardable_stats = discardable_shared_memory_manager_->GetStatistics();
1806 size_t discardable_usage = 1763 size_t discardable_usage =
1807 discardable_stats.total_size - discardable_stats.freelist_size; 1764 discardable_stats.total_size - discardable_stats.freelist_size;
1808 memory_metrics->discardable_kb = discardable_usage / 1024; 1765 memory_metrics->discardable_kb = discardable_usage / 1024;
1809 1766
1810 size_t v8_usage = 0; 1767 size_t v8_usage = 0;
1811 if (v8::Isolate* isolate = blink::MainThreadIsolate()) { 1768 if (v8::Isolate* isolate = blink::MainThreadIsolate()) {
(...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after
2518 } 2475 }
2519 } 2476 }
2520 2477
2521 void RenderThreadImpl::OnRendererInterfaceRequest( 2478 void RenderThreadImpl::OnRendererInterfaceRequest(
2522 mojom::RendererAssociatedRequest request) { 2479 mojom::RendererAssociatedRequest request) {
2523 DCHECK(!renderer_binding_.is_bound()); 2480 DCHECK(!renderer_binding_.is_bound());
2524 renderer_binding_.Bind(std::move(request)); 2481 renderer_binding_.Bind(std::move(request));
2525 } 2482 }
2526 2483
2527 } // namespace content 2484 } // namespace content
OLDNEW
« no previous file with comments | « base/process/process_metrics_win.cc ('k') | third_party/WebKit/Source/platform/wtf/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698