chromium/tools/metrics/histograms/metadata/memory/histograms.xml

<!--
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.
    &quot;true&quot; 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
    &quot;available&quot; 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
    &quot;available&quot; by base::SysInfo::AmountOfAvailablePhysicalMemory()
    and base::SysInfo::AmountOfPhysicalMemory(). The amount of
    &quot;file-backed&quot; 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 &quot;file-backed&quot; or associated to
    &quot;external_pages&quot; 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 &quot;1.5K units related to glyphs per
    renderer per page load&quot;.
  </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
    &quot;Memory.ParkableString.MemorySavings.5min&quot;.

    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
    &quot;Memory.PreFreeze2.GPU.PrivateMemoryFootprint.*&quot;.
  </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
    &quot;.InactiveBeforeEnableDuration&quot; metrics when vmm-swap is disabled.
    Shorter &quot;.InactiveBeforeEnableDuration&quot; and longer
    &quot;.ActiveAfterEnableDuration&quot; 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 &quot;.ActiveAfterEnableDuration&quot; and
    &quot;.InactiveNoEnableDuration&quot;. 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
    &quot;.ActiveAfterEnableDuration&quot; 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>