<!--
Copyright 2020 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<!--
This file is used to generate a comprehensive list of Memory histograms
along with a detailed description for each histogram.
For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md
Please follow the instructions in the OWNERS file in this directory to find a
reviewer. If no OWNERS file exists, please consider signing up at
go/reviewing-metrics (Googlers only), as all subdirectories are expected to
have an OWNERS file. As a last resort you can send the CL to
[email protected].
-->
<histogram-configuration>
<histograms>
<variants name="GpuPeakMemoryUsage">
<variant name="ChangeTab2"
summary="Changing tabs. Note that this histogram uses presentation
callbacks to determine the end of the tab change (which is
when the tab change is presented on the screen). However,
before M110 it was possible that the callback was called even
if the next submitted frame failed to present successfully.
Since M110, the histogram switched to using presentation
callbacks that are only called when the first following frame
is successfully presented on the screen (hence version 2)"/>
<variant name="PageLoad" summary="Page load"/>
<variant name="Scroll" summary="Scroll"/>
</variants>
<variants name="ProfiledProcess">
<variant name="" summary="all process types, aggregated"/>
<variant name=".Browser" summary="the Browser process"/>
<variant name=".GPU" summary="the GPU process"/>
<variant name=".NetworkService" summary="the NetworkService process"/>
<variant name=".Renderer" summary="a Renderer process"/>
<variant name=".Utility" summary="a Utility process"/>
</variants>
<variants name="RecordedTiming">
<variant name="After"
summary="Recorded a small delay after all memory-purging tasks are run,
to allow time for asynchronous tasks to finish."/>
<variant name="Before"
summary="Recorded before any memory-purging tasks are run."/>
<variant name="Diff"
summary="The difference between before and after any memory-purging
tasks are run, clamped at 0."/>
</variants>
<variants name="UtilityProcessType">
<variant name="AudioService">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
</variant>
<variant name="CdmService">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
</variant>
<variant name="MediaFoundationService">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
</variant>
<variant name="PaintPreviewCompositor">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
</variant>
<variant name="Utility">
<owner>[email protected]</owner>
</variant>
</variants>
<variants name="VmmmsClientName">
<variant name="ARCVM" summary="ARCVM"/>
<variant name="Host" summary="Host"/>
</variants>
<variants name="VmmmsVmName">
<variant name="ARCVM" summary="ARCVM"/>
</variants>
<variants name="VmmSwapVmName">
<variant name="ARCVM" summary="ARCVM"/>
</variants>
<histogram name="HeapProfiling.AndroidStackUnwinder"
enum="AndroidStackUnwinder" expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The stack unwinder implementation used by the SamplingHeapProfiler. Emitted
on Android devices only each time the profiler is started, which happens at
Chrome launch when HeapProfiling.InProcess.Enabled is true.
</summary>
</histogram>
<histogram name="HeapProfiling.InProcess.Enabled{Process}"
enum="BooleanEnabled" expires_after="2025-02-09">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
One metric is emitted on every process start, recording whether the
in-process heap profiler is enabled in {Process} for this Chrome session.
</summary>
<token key="Process" variants="ProfiledProcess"/>
</histogram>
<histogram name="HeapProfiling.InProcess.SamplesPerSnapshot{Process}"
units="samples" expires_after="2025-02-09">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of samples in a heap snapshot taken in {Process}. Emitted once
per snapshot when the in-process heap profiler is enabled.
</summary>
<token key="Process" variants="ProfiledProcess"/>
</histogram>
<histogram name="HeapProfiling.InProcess.TotalSampledMemory{Process}"
units="MB" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total amount of memory in a heap snapshot taken in {Process}. This is an
estimate of total memory allocations in the code being sampled. Because it
is collected through random sampling it is only statistically accurate when
aggregated over many reports. Emitted once per snapshot when the in-process
heap profiler is enabled.
</summary>
<token key="Process" variants="ProfiledProcess"/>
</histogram>
<histogram name="Memory.BackingStore" units="units" expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>TBD.</summary>
</histogram>
<histogram name="Memory.Browser.MemoryFootprint" units="MB"
expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
This metric is only recorded on iOS. This measures the sum of
PrivateMemoryFootprint and SharedMemoryFootprint, which is possible because
Chromium on iOS is single-process. Note that this does not include memory
consumed by WebKit-launched processes, such as the WebContent and Network
processes.
Emitted when closing a log in order to upload it. This happens shortly after
startup and again at regular intervals (usually 5 minutes, regardless of the
type of network connection). Not emitted in logs that are closed when Chrome
loses focus or closes. Yet, it is emitted on logs that are constructed from
data persisted from a previous session, i.e., persisted from an unclean
shutdown.
Many changes in memory usage on iOS come from changes to WebKit, rather than
changes within Chromium code. To assess whether a change in this metric is
caused by a WebKit change, split by OS version. WebKit changes always come
with an OS version change.
As with other memory metrics, memory use tends to increase over time.
Restarts due to OS or Chrome updates tend to make this metric drop.
This histogram is of special interest to the chrome-analysis-team@. Do not
change its semantics or retire it without talking to them first.
</summary>
</histogram>
<histogram name="Memory.Browser.MemoryFootprint.Active" units="MB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
but only recorded when UIApplication.sharedApplication.applicationState is
UIApplicationStateActive.
</summary>
</histogram>
<histogram name="Memory.Browser.MemoryFootprint.Active.Over200MBWatermark"
enum="BooleanGreaterOrEqualThan200MB" expires_after="2025-02-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
This metric is only recorded on iOS when
UIApplication.sharedApplication.applicationState is
UIApplicationStateActive. True if the sum of PrivateMemoryFootprint and
SharedMemoryFootprint is greater than 200MB. According to Apple, apps on
iPhone 6 and older devices get terminated by the OS if memory usage crosses
200MB watermark, so it's important to keep the memory usage under 200MB.
"true" value may not show up on iPhone 6 and older devices if iOS
is strict about the advertised watermark.
</summary>
</histogram>
<histogram name="Memory.Browser.MemoryFootprint.Background" units="MB"
expires_after="2025-04-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
but only recorded when UIApplication.sharedApplication.applicationState is
UIApplicationStateBackground. According to Apple, apps get terminated by the
OS if memory usage in background crosses 50MB watermark, so it's important
to keep the memory usage under 50MB. The timing of this metric will line up
so that it rarely occurs when the app is in the background. With a small
data set, the metrics might be biased in ways that we can't think of right
now.
</summary>
</histogram>
<histogram name="Memory.Browser.MemoryFootprint.Inactive" units="MB"
expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
but only recorded when UIApplication.sharedApplication.applicationState is
UIApplicationStateInactive. The timing of this metric will line up so that
it rarely occurs when the app is inactive. With a small data set, the
metrics might be biased in ways that we can't think of right now.
</summary>
</histogram>
<histogram name="Memory.Browser.MemoryFootprint.NumOpenTabs" units="tabs"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Investigation into crbug.com/1102494 shows that OverscrollActionsController
is allocating thousands of objects in it's -initWithScrollView:. This is
likely because thousands of OverscrollActionsControllers are being
initialized. The theory is that there are users that have many many tabs,
causing many OverscrollActionsControllers to be allocated. This histogram
tests that theory by logging how many open tabs there are. This is recorded
every time histograms are uploaded.
</summary>
</histogram>
<histogram name="Memory.Browser.MemoryFootprint.OnBackground" units="MiB"
expires_after="2025-02-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
but recorded right after the app transitions into background. According to
Apple, apps get terminated by the OS if memory usage in background crosses
50MiB watermark so it's important to keep the memory usage under 50MiB.
</summary>
</histogram>
<histogram name="Memory.Browser.PrivateMemoryFootprint" units="MB"
expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<improvement direction="LOWER_IS_BETTER"/>
<summary>
A rough estimate of the private memory footprint of the browser process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
This histogram is of special interest to the chrome-analysis-team@. Do not
change its semantics or retire it without talking to them first.
</summary>
</histogram>
<histogram name="Memory.Browser.PrivateSwapFootprint" units="MB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An amount of private memory of the browser process placed in swap (VmSwap).
Available on Android, Linux and ChromeOS.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Browser.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->
<owner>[email protected]</owner>
<summary>
The size of the resident memory in the browser process. This is influenced
by factors we control (e.g. memory that is not accessed can be swapped) and
factors we don't control (e.g. an unrelated process using a lot of memory
can force memory in our process to be swapped). Recorded on
Windows/Linux/ChromeOS/Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This resident memory metric cannot be compared across platforms because each
platform relies on platform-level APIs for accounting. As such, though this
attempts to measure private memory footprint as best as possible, it does
not measure the same thing on each platform. We have not found a good way to
compare any system level memory metric across platforms due to the different
nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.Browser.SharedMemoryFootprint" units="MB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<summary>
A rough estimate of the shared memory footprint of the browser process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.CachedFontAndDC" units="units" expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>TBD.</summary>
</histogram>
<histogram name="Memory.Discardable.FreelistSize.Foreground" units="KiB"
expires_after="2023-03-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Freelist size used by ClientDiscardableMemoryManager in the foreground only.
Recorded during |OnMemoryDump|.
</summary>
</histogram>
<histogram name="Memory.Discardable.LargeAllocationFromFreelist"
enum="BooleanLargeAllocationFromFreelist" expires_after="2023-03-19">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Boolean metric which tracks whether or not large chunks of discardable
memory are allocated from the freelist or via IPC.
</summary>
</histogram>
<histogram name="Memory.Discardable.LockingSuccess"
enum="BooleanLockingSuccess" expires_after="2023-05-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Boolean metric which tracks whether or not discardable memory had already
been discarded when an attempt is made to lock it.
</summary>
</histogram>
<histogram name="Memory.Discardable.Size.Foreground" units="KiB"
expires_after="2023-03-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Effective memory used by ClientDiscardableMemoryManager in the foreground
only. Recorded during |OnMemoryDump|.
</summary>
</histogram>
<histogram name="Memory.Discardable.VirtualSize.Foreground" units="KiB"
expires_after="2023-03-19">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Virtual memory used by ClientDiscardableMemoryManager in the foreground
only. Recorded during |OnMemoryDump|.
</summary>
</histogram>
<histogram name="Memory.DiscardableAllocationSize" units="KB"
expires_after="2023-03-19">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The discardable memory allocation size in KB. Recorded each time a new
discardable memory instance is created.
</summary>
</histogram>
<histogram name="Memory.Experimental.AvailableMemoryMB" units="MB"
expires_after="2024-07-14">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of available physical memory on the system as reported by
base::SysInfo::AmountOfAvailablePhysicalMemory().
Recorded every 2 minutes.
</summary>
</histogram>
<histogram name="Memory.Experimental.AvailableMemoryPercent" units="%"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The percentage of physical memory on the system considered
"available" by base::SysInfo::AmountOfAvailablePhysicalMemory()
and base::SysInfo::AmountOfPhysicalMemory().
Recorded every 2 minutes.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Browser2" units="MB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The browser process's memory usage reported by the memory instrumentation
service in MB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Browser2.Custom" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The browser process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Browser2.Small" units="KB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The browser process's memory usage reported by the memory instrumentation
service in KB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Browser2.Tiny" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The browser process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Extension2" units="MB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The extension process's memory usage reported by the memory instrumentation
service in MB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Extension2.Custom"
units="bytes" expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The extension process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Extension2.Small" units="KB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The extension process's memory usage reported by the memory instrumentation
service in KB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Extension2.Tiny" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The extension process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Experimental.Gpu.PhysicalFootprint.MacOS" units="MB"
expires_after="M85">
<owner>[email protected]</owner>
<summary>
The physical footprint of the GPU process on macOS. Other measurements fail
to correctly account for OpenGL memory usage. This metric also has flaws and
is not intended for permanent use. It's an emergency measure added to help
debug https://crbug.com/713854.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Gpu2" units="MB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The gpu process's memory usage reported by the memory instrumentation
service in MB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Gpu2.Custom" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The gpu process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Gpu2.Small" units="KB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The gpu process's memory usage reported by the memory instrumentation
service in KB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Gpu2.Tiny" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The gpu process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Experimental.MacAvailableMemoryPercentFreePageCache2"
units="%" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The percentage of physical memory on the system considered
"available" by base::SysInfo::AmountOfAvailablePhysicalMemory()
and base::SysInfo::AmountOfPhysicalMemory(). The amount of
"file-backed" memory is subtracted from the amount of available
memory to attempt to estimate the available memory, counting the Page Cache
as available.
Recorded every 2 minutes on MacOS.
</summary>
</histogram>
<histogram name="Memory.Experimental.MacFileBackedMemoryMB2" units="MB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of memory reported as "file-backed" or associated to
"external_pages" by vm_stat.
Recorded every 2 minutes on MacOS.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.NetworkService2" units="MiB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The network service process's memory usage reported by the memory
instrumentation service in MiB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.NetworkService2.Custom"
units="bytes" expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The network service process's memory usage reported by the memory
instrumentation service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.NetworkService2.Small"
units="KiB" expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The network service process's memory usage reported by the memory
instrumentation service in KiB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.NetworkService2.Tiny"
units="bytes" expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The network service process's memory usage reported by the memory
instrumentation service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram
name="Memory.Experimental.OomIntervention.RendererPrivateMemoryFootprintAtOOM"
units="MB" expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The renderer process' private memory footprint when a foreground OOM occurs.
This was last recorded metric by renderer a few seconds before getting
killed.
</summary>
</histogram>
<histogram name="Memory.Experimental.Renderer.HighestPrivateMemoryFootprint"
units="MB" expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The highest private memory footprint of a renderer process in (X mins after
the first page navigation, Y mins after the first page navigation]. (X, Y]
is (0, 2], (2, 4], (4, 8], and (8, 16]. The metric is recorded at the Y's
timing.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Renderer2" units="MB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The renderer process's memory usage reported by the memory instrumentation
service in MB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Renderer2.Custom"
units="bytes" expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The renderer process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Renderer2.Small" units="KB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The renderer process's memory usage reported by the memory instrumentation
service in KB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Renderer2.Tiny" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The renderer process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram
name="Memory.Experimental.UserLevelMemoryPressureSignal.RendererPrivateMemoryFootprintBefore"
units="MB" expires_after="2022-05-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The renderer process' private memory footprint right before a memory
pressure signal is generated.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
</histogram>
<histogram
name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintAfter"
units="MB" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total private memory footprint 10 seconds after a user-level memory
pressure signal is generated. Recorded on Android.
</summary>
</histogram>
<histogram
name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintBefore"
units="MB" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total private memory footprint right before a user-level memory pressure
signal is generated. Recorded on Android.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
</histogram>
<histogram
name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintVisibleOrHigherPriorityRenderersAfter"
units="MB" expires_after="2024-05-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total private memory footprint excluding lower priority renderers' 10
seconds after a user-level memory pressure signal is generated. Recorded on
Android.
</summary>
</histogram>
<histogram
name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintVisibleOrHigherPriorityRenderersBefore"
units="MB" expires_after="2024-05-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total private memory footprint excluding lower priority renderers' right
before a user-level memory pressure signal is generated. Recorded on
Android.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Utility2" units="MB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The utility process's memory usage reported by the memory instrumentation
service in MB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Utility2.Custom" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The utility process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Utility2.Small" units="KB"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The utility process's memory usage reported by the memory instrumentation
service in KB.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram base="true" name="Memory.Experimental.Utility2.Tiny" units="bytes"
expires_after="2025-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The utility process's memory usage reported by the memory instrumentation
service in bytes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Extension.PrivateMemoryFootprint" units="MB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of the extension process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.Extension.ResidentSet" units="MiB"
expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->
<owner>[email protected]</owner>
<summary>
The size of the resident memory in an extension process. This is influenced
by factors we control (e.g. memory that is not accessed can be swapped) and
factors we don't control (e.g. an unrelated process using a lot of memory
can force memory in our process to be swapped). Recorded on
Windows/Linux/ChromeOS.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This resident memory metric cannot be compared across platforms because each
platform relies on platform-level APIs for accounting. As such, though this
attempts to measure private memory footprint as best as possible, it does
not measure the same thing on each platform. We have not found a good way to
compare any system level memory metric across platforms due to the different
nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.GlyphPagesPerLoad" units="units" expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of glyph pages present in the renderer when it commits a load.
Since this is per-sub-process, you can get the average number of glyph pages
in the system by multiplying this number with the average number of
renderers. Note that this typically won't count the glyph pages added as a
result of the load that just committed, since layout will happen after the
commit. There are 512 bytes per glyph page, but this number also very
closely approximates the number of glyph width map pages in the same
renderer. The only difference is that if you have font fallback, it will
make a new glyph page and no width page, but in most common cases there is
no fallback). Width pages are 1K each (256 floats), so you could think of
this value as being the number of "1.5K units related to glyphs per
renderer per page load".
</summary>
</histogram>
<histogram name="Memory.GPU.PeakMemoryAllocationSource2.{Usage}.{Source}"
units="MB" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The maximum amount of memory of the GPU process allocated by {Source} during
the following user interaction: {Usage}.
See Memory.GPU.PeakMemoryUsage2.
</summary>
<token key="Usage" variants="GpuPeakMemoryUsage"/>
<token key="Source">
<variant name="CommandBuffer" summary="GPU command buffer"/>
<variant name="SharedContextState" summary="Shared Context State"/>
<variant name="SharedImageStub" summary="Shared Image Stub"/>
<variant name="Skia" summary="Skia"/>
<variant name="Unknown" summary="an unknown source"/>
</token>
</histogram>
<histogram name="Memory.GPU.PeakMemoryUsage2.{Usage}" units="MB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The maximum amount of memory of the GPU process during the following user
interaction: {Usage}.
</summary>
<token key="Usage" variants="GpuPeakMemoryUsage"/>
</histogram>
<histogram name="Memory.Gpu.PrivateMemoryFootprint" units="MB"
expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<improvement direction="LOWER_IS_BETTER"/>
<summary>
A rough estimate of the private memory footprint of the gpu process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
WARNING: This metric does not include the footprint of the graphics buffers
on all platforms. Concretely, this means that on these platforms, this
metric will drastically underestimate the true cost of rendering. On devices
with unified memory (most Android, laptop and desktop clients with
integrated graphics, and all ARM64 mac clients), graphics buffers come from
the same memory pool as system RAM. For more details, alternative metrics to
monitor, and the state of various platforms, see
docs/memory/graphics_metrics.md.
This histogram is of special interest to the chrome-analysis-team@. Do not
change its semantics or retire it without talking to them first.
</summary>
</histogram>
<histogram name="Memory.Gpu.PrivateSwapFootprint" units="MB"
expires_after="M77">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An amount of private memory of the GPU process placed in swap (VmSwap).
Available on Android, Linux and ChromeOS.
</summary>
</histogram>
<histogram name="Memory.Gpu.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->
<owner>[email protected]</owner>
<summary>
The size of the resident memory in the GPU process. This is influenced by
factors we control (e.g. memory that is not accessed can be swapped) and
factors we don't control (e.g. an unrelated process using a lot of memory
can force memory in our process to be swapped). Recorded on
Windows/Linux/ChromeOS/Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This resident memory metric cannot be compared across platforms because each
platform relies on platform-level APIs for accounting. As such, though this
attempts to measure private memory footprint as best as possible, it does
not measure the same thing on each platform. We have not found a good way to
compare any system level memory metric across platforms due to the different
nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.Gpu.SharedMemoryFootprint" units="MB"
expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the shared memory footprint of the gpu process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Graphics" units="MB" expires_after="never">
<!-- expires-never: "heartbeat" metric (internal: used for chromeos memory) -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
System-wide graphics driver memory consumption. Recorded on Chrome OS for
platforms where it is exposed by the kernel (for example, Intel i915 and
Exynos Mali). Recorded once per UMA ping.
</summary>
</histogram>
<histogram name="Memory.LowMemoryKiller.Count" units="low-memory kills"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Cumulative count of low memory kills in one user session. This is recorded
by MemoryKillsMonitor every time a low memory kill occurs.
</summary>
</histogram>
<histogram name="Memory.LowMemoryKiller.FirstKillLatency" units="ms"
expires_after="2024-12-08">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When Chrome OS is in low memory state, TabManager kills some victims to free
memory. This value is the elapsed time between TabManager receiving the low
memory notification and the first kill.
</summary>
</histogram>
<histogram name="Memory.LowMemoryKiller.FreedSize" units="KB"
expires_after="2024-07-21">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>The memory size freed by each low memory kill event.</summary>
</histogram>
<histogram name="Memory.NativeLibrary.MappedAndResidentMemoryFootprint3"
units="KB" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size of the resident memory for the native library code across all
processes. This metric is computed by parsing proc/self/pagemap and counting
native library pages that are mapped and present in RAM for at least one
Chrome process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram
name="Memory.NativeLibrary.MappedAndResidentMemoryFootprintCollectionStatus"
enum="MappedAndResidentPagesDumpState" expires_after="2024-02-04">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Result of an attempt to read /proc/self/pagemap when determining the amount
of resident memory mapped by the current process. Reading the file is
performed as part of computing the
Memory.NativeLibrary.MappedAndResidentMemoryFootprint2 histogram. Available
only on Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.NativeLibrary.NotResidentOrderedCodeMemoryFootprint"
units="KB" expires_after="2024-04-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size of the native library code which was ordered, yet is not resident
in memory, across all processes. This metric is computed by parsing
proc/self/pagemap and counting native library pages that are mapped and
present in RAM for at least one Chrome process. Available only on Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.NativeLibrary.ResidentNotOrderedCodeMemoryFootprint"
units="KB" expires_after="2024-02-04">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size of the native library code which is outside the ordered section,
yet is resident in memory, across all processes. This metric is computed by
parsing proc/self/pagemap and counting native library pages that are mapped
and present in RAM for at least one Chrome process. Available only on
Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.NetworkService.PrivateMemoryFootprint" units="MiB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of the network service
process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.NetworkService.PrivateSwapFootprint" units="MiB"
expires_after="2023-01-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An amount of private memory of the network service process placed in swap
(VmSwap). Available on Android, Linux and ChromeOS.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Note: Histogram data may be missing for mid-2020 due to expiry.
</summary>
</histogram>
<histogram name="Memory.NetworkService.SharedMemoryFootprint" units="MiB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the shared memory footprint of the network service
process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Note: Histogram data may be missing for mid-2020 due to expiry.
</summary>
</histogram>
<histogram name="Memory.OOMKills.Count" units="kills"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Cumulative count of OOM kills in one user session.</summary>
</histogram>
<histogram name="Memory.OOMKills.Daily" units="kills"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>src/chromeos/ash/components/memory/OWNERS</owner>
<summary>
The number of OOM kills since last emit. The emit interval is at least 24
hours, see metrics::DailyEvent for more details.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.OnDiskSize.5min" units="KiB"
expires_after="2024-06-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Size of encoded image data of ParkableImages that are on disk. Collected
once, 5 minutes after the first ParkableImage is created.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.Read.Latency" units="microseconds"
expires_after="2024-06-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded each time a ParkableImage is read from disk. Records the time taken
to read a ParkableImage from disk. Note: This metric drops reports on
clients with low-resolution clocks, which means these reports will be biased
against a portion of the population on Windows. See
Windows.HasHighResolutionTimeTicks for the affected sample.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.Read.Throughput" units="MiBps"
expires_after="2024-06-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded each time a ParkableImage is read from disk. Records the throughput
of reading the ParkableImage from disk, in MiB/s.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.TotalReadTime.5min" units="ms"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total time spent reading images from disk. Collected once, 5 minutes after
the first ParkableImage is created.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.TotalSize.5min" units="KiB"
expires_after="2024-06-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total size of encoded image data of ParkableImages. Collected once, 5
minutes after the first ParkableImage is created.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.TotalWriteTime.5min" units="ms"
expires_after="2024-06-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total time spent writing images to disk. Collected once, 5 minutes after the
first ParkableImage is created.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.UnparkedSize.5min" units="KiB"
expires_after="2024-09-22">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Size of encoded image data of ParkableImages that are not written to disk.
Collected once, 5 minutes after the first ParkableImage is created.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.Write.Latency" units="microseconds"
expires_after="2024-06-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded each time a ParkableImage is written to disk. Records the time
taken to write the ParkableImage to disk. Note: This metric drops reports on
clients with low-resolution clocks, which means these reports will be biased
against a portion of the population on Windows. See
Windows.HasHighResolutionTimeTicks for the affected sample.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableImage.Write.Size" units="KiB"
expires_after="2024-06-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded each time a ParkableImage is written to disk. Records the size of
the write, in KiB.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableString.Compression.Latency"
units="microseconds" expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time to compress a ParkableString, in us. Note: This metric drops reports on
clients with low-resolution clocks, which means these reports will be biased
against a portion of the population on Windows. See
Windows.HasHighResolutionTimeTicks for the affected sample.
</summary>
</histogram>
<histogram name="Memory.ParkableString.Compression.SizeKb" units="KB"
expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Size of a compressed ParkableString, recorded at compression time.
</summary>
</histogram>
<histogram name="Memory.ParkableString.Decompression.Latency"
units="microseconds" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time to decompress a ParkableString, in us. Note: This metric drops reports
on clients with low-resolution clocks, which means these reports will be
biased against a portion of the population on Windows. See
Windows.HasHighResolutionTimeTicks for the affected sample.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableString.Decompression.ThroughputMBps"
units="MBps" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Original size of a compressed ParkableString, recorded at decompression
time.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableString.DiskReadTime.5min" units="ms"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total main thread time used by ParkableStrings for reading over the first 5
minutes of a renderer lifetime. Starting time is from the first
ParkableString being added.
</summary>
</histogram>
<histogram name="Memory.ParkableString.DiskWriteTime.5min" units="ms"
expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total time used by ParkableStrings for writing to disk over the first 5
minutes of a renderer lifetime. Starting time is from the first
ParkableString being added.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableString.OnDiskSizeKb.5min" units="KB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total size of ParkableStrings discarded to disk, excluding allocator waste,
in KB. Recorded once, 5 minutes after the first ParkableString is added to a
renderer, at the same time as
"Memory.ParkableString.MemorySavings.5min".
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableString.Read.Latency" units="microseconds"
expires_after="2025-02-09">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time to read a ParkableString from disk, in us. Note: This metric drops
reports on clients with low-resolution clocks, which means these reports
will be biased against a portion of the population on Windows. See
Windows.HasHighResolutionTimeTicks for the affected sample.
This histogram was expired before 2024-03-19, be careful of missing data.
</summary>
</histogram>
<histogram name="Memory.ParkableString.TotalParkingThreadTime.5min" units="ms"
expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total thread time (on background threads) used by ParkableStrings for
compression over the first 5 minutes of a renderer lifetime. Starting time
is from the first ParkableString being added. This always happens on
background thread, so the reported value is thread time, not wall clock.
</summary>
</histogram>
<histogram name="Memory.ParkableString.TotalUnparkingTime.5min" units="ms"
expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total time used by ParkableStrings for unparking over the first 5 minutes of
a renderer lifetime. Starting time is from the first ParkableString being
added. Note that unparking can happen on the main thread or on a background
one, so this is not the sum of main thread time.
</summary>
</histogram>
<histogram name="Memory.PartitionAlloc.MemoryReclaim" units="microseconds"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time it takes for PartitionAlloc's MemoryReclaimer to reclaim once.
Collected at each reclaim, for all process types.
Note that clients without high-resolution clocks will report 0 for very
short times.
</summary>
</histogram>
<histogram name="Memory.PartitionAlloc.PartitionRoot.ExtrasSize" units="bytes"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Size of the extras configured for PartitionAlloc's `PartitionRoot` struct.
This is specific to the main partition, which powers the bulk of
PartitionAlloc-Everywhere. Recorded once for each process during allocator
shim configuration.
Extras are optional. Extras can include the PartitionAlloc cookie (16B) and
the MiraclePtr ref-count (up to 16B).
</summary>
</histogram>
<histogram name="Memory.PartitionAlloc.PeriodicPurge" units="microseconds"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time it takes for PartitionAlloc's periodic purge to run once. Collected at
each purge, for all process types.
Note that clients without high-resolution clocks will report 0 for very
short times.
</summary>
</histogram>
<histogram name="Memory.PreFreeze2.Gpu.PrivateMemoryFootprint.{Timing}"
units="MiB" expires_after="2025-02-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Deprecated in favor of
"Memory.PreFreeze2.GPU.PrivateMemoryFootprint.*".
</summary>
<token key="Timing" variants="RecordedTiming"/>
</histogram>
<histogram name="Memory.PreFreeze2.RecordMetricsFailureType"
enum="PreFreezeMetricsFailureType" expires_after="2025-02-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a pre-freeze notification arrives or when we try to record
metrics (after pre-freeze trimming should have finished) and fail.
</summary>
</histogram>
<histogram name="Memory.PreFreeze2{Process}.PrivateMemoryFootprint.{Timing}"
units="MiB" expires_after="2025-02-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The private memory footprint of {Process}, recorded when we get a
notification that the application is about to be frozen. {Timing} Recorded
only on Android 14+, and only recorded if at least one task has been
registered with PreFreeze.
</summary>
<token key="Process" variants="ProfiledProcess"/>
<token key="Timing" variants="RecordedTiming"/>
</histogram>
<histogram name="Memory.PreFreeze2{Process}.Vulkan.{Timing}" units="MiB"
expires_after="2025-02-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The Vulkan memory usage of {Process}, recorded when we get a notification
that the application is about to be frozen. {Timing} Recorded only on
Android 14+, and only recorded if at least one task has been registered with
PreFreeze, and only if Vulkan is being used.
</summary>
<token key="Process" variants="ProfiledProcess"/>
<token key="Timing" variants="RecordedTiming"/>
</histogram>
<histogram name="Memory.PressureLevel2" enum="MemoryPressureLevel"
expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The time spent in each memory pressure state, in seconds. Recorded when the
memory pressure state changes, at shutdown, or when it hasn't been recorded
in the last 5 minutes.
The values from this histogram shouldn't be used directly, users of this
metric should look at the percentage of samples in each bucket to understand
the average time that Chrome spend in each pressure state.
</summary>
</histogram>
<histogram name="Memory.PressureLevelChanges" enum="MemoryPressureLevelChanges"
expires_after="M85">
<owner>[email protected]</owner>
<summary>
The number of pressure level state changes for each possible pairwise state
change.
</summary>
</histogram>
<histogram base="true" name="Memory.PressureWindowDuration" units="ms"
expires_after="2025-02-10">
<!-- Name completed by histogram_suffixes name="Memory.Pressure.TransitionType" -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The time spent in each of the memory pressure state. Recorded when
transitioning from a memory pressure state to the other and when exiting
memory pressure.
</summary>
</histogram>
<histogram name="Memory.ProcessCount" units="processes"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of all active processes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Renderer.EvictedLockedResources.{Source}" units="KB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The estimated memory size of viz::TransferableResources that are locked
against deletion. This is reported by a ClientResourceProvider once it has
been evicted by the Viz Host, and whose cc::LayerTreeHostImpl has been
hidden.
This counts the {Source} that are locked. These will not be freed when Viz
instructs us to ReclaimResources.
</summary>
<token key="Source">
<variant name="AR" summary="AR sources"/>
<variant name="Canvas" summary="Canvas sources"/>
<variant name="DrawingBuffer"
summary="DrawingBuffer sources, which can have mixed origins,"/>
<variant name="ExoBuffer" summary="ExoBuffer sources"/>
<variant name="HeadsUpDisplay" summary="HeadsUpDisplay sources"/>
<variant name="ImageLayerBridge" summary="ImageLayerBridge sources"/>
<variant name="PepperGraphics2D" summary="PepperGraphics2D sources"/>
<variant name="PPBGraphics3D" summary="PPBGraphics3D sources"/>
<variant name="StaleContent" summary="StaleContent sources"/>
<variant name="Test" summary="Test sources, which should not be seen,"/>
<variant name="TileRasterTask" summary="TileRasterTask sources"/>
<variant name="Total" summary="Total of all sources"/>
<variant name="UI" summary="UI sources"/>
<variant name="Unknown" summary="Unknown sources, which are unexpected,"/>
<variant name="Video" summary="Video sources"/>
<variant name="ViewTransition" summary="ViewTransition sources"/>
<variant name="WebGPUSwapBuffer" summary="WebGPUSwapBuffer sources"/>
</token>
</histogram>
<histogram name="Memory.Renderer.PrivateMemoryFootprint" units="MB"
expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<improvement direction="LOWER_IS_BETTER"/>
<summary>
A rough estimate of the private memory footprint of the renderer process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
Do not modify this metric in any way without contacting
[email protected] AND [email protected].
</summary>
</histogram>
<histogram name="Memory.Renderer.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->
<owner>[email protected]</owner>
<summary>
The size of the resident memory in a renderer process. This is influenced by
factors we control (e.g. memory that is not accessed can be swapped) and
factors we don't control (e.g. an unrelated process using a lot of memory
can force memory in our process to be swapped). Recorded on
Windows/Linux/ChromeOS/Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This resident memory metric cannot be compared across platforms because each
platform relies on platform-level APIs for accounting. As such, though this
attempts to measure private memory footprint as best as possible, it does
not measure the same thing on each platform. We have not found a good way to
compare any system level memory metric across platforms due to the different
nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.Renderer.SharedMemoryFootprint" units="MB"
expires_after="2024-03-24">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the shared memory footprint of the renderer process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.RendererProcessCount" units="processes"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of active renderer processes. Excludes renderers hosting
chrome-extension:// and/or chrome:// URLs.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Computed based on OS data.
WARNINGS: Not reliable on Android, see https://crbug.com/875400. Ignores
processes that do not host a widget, see https://crbug.com/949977#c36.
Consider using Memory.RenderProcessHost.Count.* instead.
</summary>
</histogram>
<histogram name="Memory.RenderProcessHost.Count.All" units="processes"
expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of all renderer processes. Covers all renderer processes,
including ones hosting web content (i.e. http(s):// and/or file://),
extensions (i.e. chrome-extension://) and WebUI (i.e. chrome://).
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Computed based on count of RenderProcessHost objects, even if 1) they have
not been launched yet (e.g. during session restore) or 2) they are dead
(e.g. killed by the browser process or the OS).
</summary>
</histogram>
<histogram name="Memory.RenderProcessHost.Count.InitializedAndNotDead"
units="processes" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of active renderer processes. Recorded once per UMA ping. Covers
all renderer processes, including ones hosting web content (i.e. http(s)://
and/or file://), extensions (i.e. chrome-extension://) and WebUI (i.e.
chrome://).
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Computed based on count of RenderProcessHost objects that are
IsInitializedAndNotDead (i.e. have been launched and not terminated yet).
</summary>
</histogram>
<histogram name="Memory.RenderProcessHost.Count.OriginAgentClusterOverhead"
units="processes" expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An estimate of additional processes created due to origin-keyed processes,
including OriginAgentCluster (OAC) headers and OriginKeyedProcessesByDefault
mode. Computed assuming no coalescing of multiple BrowsingInstances into a
single RenderProcess (including no subframe process reuse), and only when
cross-process origin isolation occurs due to the OAC header or
OriginKeyedProcessesByDefault. Given this, the count of additional
SiteInstances corresponds exactly to the additional number of
RenderProcesses that that are due to origin-keying, and therefore gives a
sense of how much process count overhead it creates. Recorded once per UMA
ping.
Note: when the feature OriginKeyedProcessesByDefault is enabled, all
navigations are treated as if the OAC opt-in header is present, unless the
OAC opt-out header is present. As a result, any analyses of this metric
should separate users with and without OriginKeyedProcessesByDefault, to
distinguish actual header adoption.
</summary>
</histogram>
<histogram name="Memory.RenderProcessHost.Count.SandboxedIframeOverhead"
units="processes" expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of renderer processes that represent sandboxed iframes, computed
by counting the number of RenderProcessHosts allocated to them. This will be
zero when SiteIsolationPolicy::AreIsolatedSandboxedIframesEnabled() is
false. Recorded once per UMA ping.
</summary>
</histogram>
<histogram name="Memory.RenderProcessHost.Percent.OriginAgentClusterOverhead"
units="%" expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The percentage of the total renderer process count that is due to
origin-keyed processes, based on the overhead estimate from
Memory.RenderProcessHost.Count.OriginAgentClusterProcesses. That value is
computed assuming no coalescing of multiple BrowsingInstances into a single
RenderProcess (including no subframe process reuse), and only when
cross-process origin isolation occurs due to origin-keying. Given this, the
percentage of total SiteInstances due to origin-keying corresponds exactly
to the percentage of RenderProcesses that origin-keying gives rise to.
Recorded once per UMA ping.
Note: when the feature OriginKeyedProcessesByDefault is enabled, all
navigations are treated as if the OAC opt-in header is present, unless the
OAC opt-out header is present. As a result, any analyses of this metric
should separate users with and without OriginKeyedProcessesByDefault, to
distinguish actual header adoption.
</summary>
</histogram>
<histogram name="Memory.StackSamplingProfiler.StackSampleSize2" units="KB"
expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size of the stack copied during a stack profiler capture. One sample per
199 stack captures. Only recorded by clients in the stack-sampled metrics
experiment or recording a Chrometto trace. ChromeOS only.
</summary>
</histogram>
<histogram name="Memory.Swap.Worker" units="KB" expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The swap used by each worker process. Each worker process provides one
sample. Recorded once per process per UMA ping if the system has swapped.
</summary>
</histogram>
<histogram name="Memory.System.MemAvailableMB" units="MB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
System-wide estimate of memory available in ChromeOS, without swapping.
Calculated from MemFree, SReclaimable, the size of the file LRU lists, and
the low watermarks in each zone. The estimate takes into account that the
system needs some page cache to function well, and that not all reclaimable
slab will be reclaimable, due to items being in use.
</summary>
</histogram>
<histogram name="Memory.System.MemUsedMB" units="MB" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
System-wide estimate of memory used in ChromeOS, calculated as the
difference between the amount of total and available memory.
</summary>
</histogram>
<histogram name="Memory.Total.GpuMappedMemory" units="MB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total size of all mapped memory buffers for GPU to/from client transfers.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android.
</summary>
</histogram>
<histogram name="Memory.Total.HibernatedCanvas.OriginalSize" units="MB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total size of all hibernated canvases across all renderers, prior to
compression.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android.
</summary>
</histogram>
<histogram name="Memory.Total.HibernatedCanvas.Size" units="MB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total size of all hibernated canvases across all renderers.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android.
</summary>
</histogram>
<histogram name="Memory.Total.PrivateMemoryFootprint" units="MB"
expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<improvement direction="LOWER_IS_BETTER"/>
<summary>
A rough estimate of the private memory footprint of all processes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
This histogram is of special interest to the chrome-analysis-team@. Do not
change its semantics or retire it without talking to them first.
</summary>
</histogram>
<histogram name="Memory.Total.PrivateMemoryFootprintExcludingWaivedRenderers"
units="MB" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of all processes on Android
ignoring Renderers with only Waived process bindings.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android.
</summary>
</histogram>
<histogram
name="Memory.Total.PrivateMemoryFootprintVisibleOrHigherPriorityRenderers"
units="MB" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of all visible or higher
importance processes on Android. This ignores Renderers with Waived or Not
Perceptible effective process bindings.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android.
</summary>
</histogram>
<histogram name="Memory.Total.RendererBlinkGC" units="MB"
expires_after="2024-09-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Memory from the Blink heap in all renderer processes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Total.RendererBlinkGC.Fragmentation" units="MB"
expires_after="2024-09-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Memory from the Blink heap which is not used by allocated objects in all
renderer processes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Total.RendererMalloc" units="MB"
expires_after="2025-01-31">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of memory allocated by malloc in all renderer processes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Total.RendererPrivateMemoryFootprint" units="MB"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of all renderer processes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.Total.RendererPrivateMemoryFootprintExcludingWaived"
units="MB" expires_after="2024-11-03">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of all renderer processes
on Android ignoring Renderers with only Waived process bindings.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android.
</summary>
</histogram>
<histogram
name="Memory.Total.RendererPrivateMemoryFootprintVisibleOrHigherPriority"
units="MB" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of all renderer processes
with visible or higher importance on Android. This ignores Renderers with
Waived or Not Perceptible effective process bindings.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android.
</summary>
</histogram>
<histogram name="Memory.Total.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->
<owner>[email protected]</owner>
<summary>
The size of the resident memory in all processes. This is influenced by
factors we control (e.g. memory that is not accessed can be swapped) and
factors we don't control (e.g. an unrelated process using a lot of memory
can force memory in our process to be swapped). Recorded on
Windows/Linux/ChromeOS/Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Note: This metric is a simple sum of the resident set of all processes and
this cause some double accounting for the shared portion of the working set.
As a result this metric doesn't give an exact representation of how much
physical memory is used by Chrome.
This resident memory metric cannot be compared across platforms because each
platform relies on platform-level APIs for accounting. As such, though this
attempts to measure private memory footprint as best as possible, it does
not measure the same thing on each platform. We have not found a good way to
compare any system level memory metric across platforms due to the different
nature of memory management on each platform.
</summary>
</histogram>
<histogram name="Memory.Total.SharedMemoryFootprint" units="MB"
expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the shared memory footprint of all processes.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.Total.SystemCommitLimit" units="GB"
expires_after="2023-05-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the system commit limit (number of total pages) x page size,
collected in the info collection GPU process, once per UMA ping. This is
Windows platform only.
</summary>
</histogram>
<histogram name="Memory.Total.TileMemory" units="MB" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Total (GPU) memory used for tiles, across all consumers.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
</summary>
</histogram>
<histogram name="Memory.VMMMS.{ClientName}.DecisionLatency" units="ms"
expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The time the Virtual Machine Memory Management Service added to a kill
decision from a client. Logged after a client asks the VMMMS to change a
balloon size to avoid killing an app or discarding a tab.
</summary>
<token key="ClientName" variants="VmmmsClientName"/>
</histogram>
<histogram name="Memory.VMMMS.{ClientName}.DecisionTimeout"
enum="VmmmsRequestPriority" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The priority of each kill decision request that timed out. Logged after a
client asks the VMMMS to change a balloon size to avoid killing an app or
discarding a tab.
</summary>
<token key="ClientName" variants="VmmmsClientName"/>
</histogram>
<histogram name="Memory.VMMMS.{ClientName}.UnnecessaryKill"
enum="VmmmsRequestPriority" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The priority of each kill decision request that timed out leading to an
unnecessary app kill or tab discard. Logged after a client asks the VMMMS to
change a balloon size to avoid killing an app or discarding a tab.
</summary>
<token key="ClientName" variants="VmmmsClientName"/>
</histogram>
<histogram name="Memory.VMMMS.{VmName}.Deflate" units="MiB"
expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When the balloon for a given VM is deflated, the size of the deflation.
</summary>
<token key="VmName" variants="VmmmsVmName"/>
</histogram>
<histogram name="Memory.VMMMS.{VmName}.Inflate" units="MiB"
expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When the balloon for a given VM is inflated, the size of the inlfation.
</summary>
<token key="VmName" variants="VmmmsVmName"/>
</histogram>
<histogram name="Memory.VMMMS.{VmName}.ResizeInterval" units="ms"
expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When the balloon for a given VM resizes, the time since the previous resize.
</summary>
<token key="VmName" variants="VmmmsVmName"/>
</histogram>
<histogram name="Memory.VMMMS.{VmName}.Size10Minutes" units="MiB"
expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size of the balloon for a given VM. Logged every 10 minutes.
</summary>
<token key="VmName" variants="VmmmsVmName"/>
</histogram>
<histogram name="Memory.VMMMS.{VmName}.StallThroughput" units="MiB/s"
expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>The inflation rate of a balloon when a stall is detected.</summary>
<token key="VmName" variants="VmmmsVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.TotalBytesWrittenInAWeek" units="MiB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total bytes written by vmm-swap feature for a week. This is sent weekly
once any disk writes for vmm-swap has done. Once reporting has started it
reports weekly even if the total bytes written is zero.
</summary>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.ActiveAfterEnableDuration"
units="Hours" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The duration how long it was spent with vmm-swap enabled. This is sent with
".InactiveBeforeEnableDuration" metrics when vmm-swap is disabled.
Shorter ".InactiveBeforeEnableDuration" and longer
".ActiveAfterEnableDuration" indicates the vmm-swap policies are
doing a good job at deciding when to enable vmm-swap.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.AvgPagesInFile" units="Pages"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An lower bound estimate of the average number of pages resident on disk over
the duration of the vmm-swap period. Even if the actual page size is not
4KiB, it is recalculated to be the number of 4KiB pages. This is sent when
vmm-swap is disabled.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.DisableReason"
enum="VmmSwapDisableReason" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks events that would cause vmm-swap to be disabled. This is sent
regardless of whether or not vmm-swap was actually active - i.e. alongside
both ".ActiveAfterEnableDuration" and
".InactiveNoEnableDuration". Each event type is broken down into
two enum values - one for the inactive and one for the active case.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.InactiveBeforeEnableDuration"
units="Hours" expires_after="2024-10-06">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The duration how long it was spent waiting to enable vmm-swap since it
becomes swappable-idle. This is sent with
".ActiveAfterEnableDuration" metrics when vmm-swap is disabled.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.InactiveNoEnableDuration"
units="Hours" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The duration how long it was spend without vmm-swap enabled and it exits
swappable-idle. This is sent when vmm-swap is disabled. If reported values
are mostly long, it indicates that the policies are missing chances to
enable vmm-swap.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.MinPagesInFile" units="Pages"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The minimum number of pages resident on disk any given point during the
vmm-swap period. Even if the actual page size is not 4KiB, it is
recalculated to be the number of 4KiB pages. This is sent when vmm-swap is
disabled.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.PageAverageDurationInFile"
units="Seconds" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The average duration of each page of the guest memory lives in the swap
file. We expect most cold pages live in the swap file for a long time and
hot pages are not swapped out but kept in the memory. The durations are
measured every 10 minutes to estimate the average duration. This is sent
when vmm-swap is disabled.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.PolicyResult"
enum="VmmSwapPolicyResult" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks the policy decision made when deciding how to handle a swap enable
dbus request. Indicates if a request was accepted or why it was rejected.
Each decision result is further broken down into whether it occured while
handling an initial enable request or a maintenance request.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.VmmSwap.{VmName}.State" enum="VmmSwapState"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Sends the vmm-swap state (enabled or disabled) every 10 minutes while the vm
is swappable-idle. Vmm-swap may not be enabled by policies to protect disk.
This metrics indicates what percentage of time in the swappable-idle state
is spent with vmm-swap enabled and how well the policies works.
</summary>
<token key="VmName" variants="VmmSwapVmName"/>
</histogram>
<histogram name="Memory.Worker" units="KB" expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The private working set used by each worker process. Each worker process
provides one sample. Recorded once per process per UMA ping.
</summary>
</histogram>
<histogram name="Memory.{UtilityProcessType}.PrivateMemoryFootprint" units="MB"
expires_after="never">
<!-- expires-never: useful diagnostic metric for changes in
Memory.Total.PrivateMemoryFootprint, which never expires. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the private memory footprint of the {UtilityProcessType}
process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This memory footprint metric cannot be compared across platforms because
each platform relies on platform-level APIs for accounting. As such, though
this attempts to measure private memory footprint as best as possible, it
does not measure the same thing on each platform. We have not found a good
way to compare any system level memory metric across platforms due to the
different nature of memory management on each platform.
</summary>
<token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>
<histogram name="Memory.{UtilityProcessType}.PrivateSwapFootprint" units="MB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An amount of private memory of the {UtilityProcessType} process placed in
swap (VmSwap). Available on Android, Linux and ChromeOS.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Note: Histogram data may be missing for mid-2020 due to expiry.
</summary>
<token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>
<histogram name="Memory.{UtilityProcessType}.ResidentSet" units="MiB"
expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->
<owner>[email protected]</owner>
<summary>
The size of the resident memory in a {UtilityProcessType} process. This is
influenced by factors we control (e.g. memory that is not accessed can be
swapped) and factors we don't control (e.g. an unrelated process using a lot
of memory can force memory in our process to be swapped). Recorded on
Windows/Linux/ChromeOS/Android.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
This resident memory metric cannot be compared across platforms because each
platform relies on platform-level APIs for accounting. As such, though this
attempts to measure private memory footprint as best as possible, it does
not measure the same thing on each platform. We have not found a good way to
compare any system level memory metric across platforms due to the different
nature of memory management on each platform.
</summary>
<token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>
<histogram name="Memory.{UtilityProcessType}.SharedMemoryFootprint" units="MB"
expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
A rough estimate of the shared memory footprint of the {UtilityProcessType}
process.
Recorded at Poisson sampled time intervals with a mean of 5 minutes on
Android and 30 minutes on other platforms.
Note: Histogram data may be missing between M77 to M87 due to expiry.
</summary>
<token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>
<histogram name="MemoryAndroid.EvictedTreeSize2" units="units"
expires_after="2025-08-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total count of viz::SurfaceIds being evicted for the current FrameTree.
Along with any surfaces that were embedded before a navigation occurred.
This will be emitted whenever we evict one DelegatedFrameHostAndroid.
</summary>
</histogram>
<histogram name="MemoryAndroid.EvictionReason" enum="AndroidEvictionReason"
expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reasons behind evictions of individual tabs, recorded upon each tab
eviction.
</summary>
</histogram>
<histogram name="MemoryAndroid.LowMemoryLoadedTabCount" units="units"
expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Number of loaded (memory-resident) tabs when LowMemory notification is
delivered.
</summary>
</histogram>
<histogram name="MemoryAndroid.LowRamDevice" enum="Boolean"
expires_after="never">
<!-- expires-never: used internally for filtering -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Whether Chrome is running in low ram mode. This histogram is reported on
every upload by Android devices. A device is considered low-RAM if it has
512MiB of RAM or lower (see SysUtils.detectLowEndDevice()).
</summary>
</histogram>
</histograms>
</histogram-configuration>