<!--
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
chromium-metrics-reviews@google.com.
-->

<histogram-configuration>

<histograms>

<variants name="CompactionType">
  <variant name="RunningCompact" summary="Running-compaction"/>
  <variant name="SelfCompact2" summary="Self-compaction"/>
</variants>

<variants name="DiffDirection">
  <variant name="Decrease" summary="The latter metric is lower."/>
  <variant name="Increase" summary="The latter metric is higher."/>
</variants>

<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="MemoryDumpLevelOfDetail">
  <variant name="AllDetailLevels" summary="all levels of detail"/>
  <variant name="Background" summary="Background level of detail"/>
  <variant name="Detailed" summary="Detailed level of detail"/>
  <variant name="Light" summary="Light level of detail"/>
</variants>

<variants name="MemoryDumpProviderName">
  <variant name="AllProviders" summary="(all provider types, aggregated)"/>
  <variant name="android__ResourceManagerImpl"
      summary="android::ResourceManagerImpl"/>
  <variant name="android_meminfo"/>
  <variant name="AndroidGraphics"/>
  <variant name="AutocompleteController"/>
  <variant name="AXPlatformNode"/>
  <variant name="AXPlatformNodeWin"/>
  <variant name="BlinkGC"/>
  <variant name="BlinkObjectCounters"/>
  <variant name="BlobStorageContext"/>
  <variant name="BucketContext"/>
  <variant name="Canvas"/>
  <variant name="cc__GpuImageDecodeCache" summary="cc::GpuImageDecodeCache"/>
  <variant name="cc__ResourcePool" summary="cc::ResourcePool"/>
  <variant name="cc__ResourceProvider" summary="cc::ResourceProvider"/>
  <variant name="cc__SoftwareImageDecodeCache"
      summary="cc::SoftwareImageDecodeCache"/>
  <variant name="cc__StagingBufferPool" summary="cc::StagingBufferPool"/>
  <variant name="ClientDiscardableSharedMemoryManager"/>
  <variant name="CommandBuffer"/>
  <variant name="ContextProviderCommandBuffer"/>
  <variant name="DawnCache"/>
  <variant name="DawnSharedContext"/>
  <variant name="DevTools"/>
  <variant name="DevtoolsDurableMessageCollectorManager"/>
  <variant name="DevToolsManager"/>
  <variant name="DiscardableSharedMemoryManager"/>
  <variant name="DOMStorage"/>
  <variant name="DownloadService"/>
  <variant name="ExtensionFunctions"/>
  <variant name="FontCaches"/>
  <variant name="FrameBufferPool"/>
  <variant name="FrameEvictionManager"/>
  <variant name="gpu__BufferManager" summary="gpu::BufferManager"/>
  <variant name="gpu__RenderbufferManager" summary="gpu::RenderbufferManager"/>
  <variant name="gpu__ServiceTransferCache"
      summary="gpu::ServiceTransferCache"/>
  <variant name="gpu__TextureManager" summary="gpu::TextureManager"/>
  <variant name="gpu__TransferBufferManager"
      summary="gpu::TransferBufferManager"/>
  <variant name="GpuPersistentCache"/>
  <variant name="GraphiteVizMemoryAssistant"/>
  <variant name="GrShaderCache"/>
  <variant name="hibernated_canvas"/>
  <variant name="IndexedDBBackingStore"/>
  <variant name="InMemoryURLIndex"/>
  <variant name="IPCChannel"/>
  <variant name="JavaHeap"/>
  <variant name="LevelDB"/>
  <variant name="LeveldbValueStore"/>
  <variant name="LocalStorage"/>
  <variant name="LocalStorageSqlite"/>
  <variant name="MadvFreeDiscardableMemoryAllocator"/>
  <variant name="Malloc"/>
  <variant name="MappableSharedImageVideoFramePool"/>
  <variant name="media__V4l2VideoDecodeAccelerator"
      summary="media::V4l2VideoDecodeAccelerator"/>
  <variant name="media__VaapiVideoEncodeAccelerator"
      summary="media::VaapiVideoEncodeAccelerator"/>
  <variant name="media__VideoResourceUpdater"
      summary="media::VideoResourceUpdater"/>
  <variant name="MemoryCache"/>
  <variant name="MojoHandleTable"/>
  <variant name="MojoLevelDB"/>
  <variant name="MojoMessages"/>
<!-- The Orderfile variant is never recorded in production but necessary to pass
       the memory_dump_provider.h check. -->

  <variant name="Orderfile"/>
  <variant name="ParkableImages"/>
  <variant name="ParkableStrings"/>
  <variant name="PartitionAlloc"/>
  <variant name="PartitionAlloc.AddressSpace"/>
  <variant name="SessionStorage"/>
  <variant name="SessionStorageSqlite"/>
  <variant name="SharedContextState"/>
  <variant name="SharedImageManager"/>
  <variant name="SharedMemoryTracker"/>
  <variant name="Skia"/>
  <variant name="Sql"/>
  <variant name="sql__Database" summary="sql::Database"/>
  <variant name="TabRestoreServiceHelper"/>
  <variant name="TestDumpProvider"/>
  <variant name="TestDumpProvider.Allowlisted"/>
  <variant name="TextureOwner"/>
  <variant name="TileManager"/>
  <variant name="V8Isolate"/>
  <variant name="V8SharedMemory"/>
  <variant name="vulkan"/>
  <variant name="WebGL"/>
  <variant name="WebMediaPlayer_MainThread"/>
  <variant name="WebMediaPlayer_MediaThread"/>
  <variant name="WebNN"/>
</variants>

<variants name="ProcessMemoryAllocator2">
  <variant name=".AndroidOtherPrivateDirty"
      summary="Other private dirty memory, including GPU memory, as reported
               by Android platform APIs. Only reported on Android, if the
               value hasn't been collected in the last 5 minutes (otherwise
               Android produces a stale value, which is not emitted in
               Chrome)."/>
  <variant name=".AndroidOtherPss"
      summary="Other PSS, including GPU memory, as reported by Android
               platform APIs. Only reported on Android, if the value hasn't
               been collected in the last 5 minutes (otherwise Android
               produces a stale value, which is not emitted in Chrome)."/>
  <variant name=".ANGLEMetal"
      summary="Memory allocated by ANGLE Metal device, on macOS."/>
  <variant name=".BlinkGC" summary="Only counting Blink GC memory."/>
  <variant name=".BlinkGC.AllocatedObjects"
      summary="Only counting objects allocated using Blink GC."/>
  <variant name=".BlinkGC.Fragmentation" summary="Fragmentation of Blink GC."/>
  <variant name=".BlinkGC.Main.Heap"
      summary="Only counting memory on Blink GC's main thread heap."/>
  <variant name=".BlinkGC.Main.Heap.AllocatedObjects"
      summary="Only counting objects allocated in Blink GC's main thread
               heap."/>
  <variant name=".BlinkGC.Main.Heap.Fragmentation"
      summary="Fragmentation of Blink GC's main thread heap."/>
  <variant name=".CommandBuffer"
      summary="Only counting memory used by GL command buffers."/>
  <variant name=".DawnSharedContext"
      summary="Only counting memory used by the Graphite Dawn shared context."/>
  <variant name=".DawnSharedContext.Buffers"
      summary="Only counting buffers' memory used by the Graphite Dawn shared
               context."/>
  <variant name=".DawnSharedContext.DepthStencil"
      summary="Only counting depth stencil textures' memory used by the
               Graphite Dawn shared context."/>
  <variant name=".DawnSharedContext.MSAA"
      summary="Only counting MSAA memory used by the Graphite Dawn shared
               context."/>
  <variant name=".DawnSharedContext.MSAA.Count"
      summary="Only counting number of MSAA textures used by the Graphite
               Dawn shared context."/>
  <variant name=".DawnSharedContext.MSAA.Largest"
      summary="Only record the biggest MSAA texture's memory used by the
               Graphite Dawn shared context."/>
  <variant name=".DawnSharedContext.Textures"
      summary="Only counting textures' memory used by the Graphite Dawn
               shared context."/>
  <variant name=".Discardable"
      summary="Only counting memory used by Discardable manager."/>
  <variant name=".DurableMessages.AggregateMemoryUsage"
      summary="Reports the aggregate memory usage in megabytes by all
               DevToolsDurableMessageCollector instances."/>
  <variant name=".ExtensionFunctions"
      summary="Only counting memory used by ExtensionFunctions."/>
  <variant name=".Extensions.ValueStore"
      summary="Only counting memory used by Extension value store database."/>
  <variant name=".GpuMemory"
      summary="Only counting memory allocated for the GPU."/>
  <variant name=".GpuMemoryNonExo"
      summary="Total size of shared images and skia GPU resources used on the
               GPU process. On Ash this will exclude all shared images that
               were imported by Exo."/>
  <variant name=".IOAccelerator"
      summary="Memory used by IOAccelerator, on macOS."/>
  <variant name=".IOAccelerator.DirtyMemory"
      summary="Memory used by IOAccelerator, on macOS. Only account for dirty
               (resident and swapped) memory, which is part of private memory
               footprint."/>
  <variant name=".IOAccelerator.NonPurgeable"
      summary="Memory used by IOAccelerator, on macOS. Only account for
               non-purgeable memory, which is part of private memory
               footprint."/>
  <variant name=".IOAccelerator.Purgeable"
      summary="Memory used by IOAccelerator, on macOS. Only account for
               purgeable memory, which is part of private memory footprint."/>
  <variant name=".IOSurface" summary="Memory used for IOSurfaces, on macOS."/>
  <variant name=".IOSurface.DirtyMemory"
      summary="Memory used for IOSurfaces, on macOS. Only account for dirty
               (resident and swapped) memory, which is part of private memory
               footprint."/>
  <variant name=".IOSurface.NonPurgeable"
      summary="Memory used by IOSurface, on macOS. Only account for
               non-purgeable memory, which is part of private memory
               footprint."/>
  <variant name=".IOSurface.Purgeable"
      summary="Memory used by IOSurface, on macOS. Only account for purgeable
               memory, which is part of private memory footprint."/>
  <variant name=".JavaHeap"
      summary="Only counting memory used by Java heap in Android. This is the
               heap size, not actual allocated memory from the app. See
               comments in
               //base/trace_event/java_heap_memory_dump_provider.cc for
               details."/>
  <variant name=".Malloc"
      summary="Constrained to malloc allocator. Not accurate on Windows
               (http://crbug.com/780735#c9, http://crbug.com/665516)."/>
  <variant name=".Malloc.AllocatedObjects"
      summary="Only counting objects allocated using the malloc allocator.
               The measurement is only accurate on Linux and MacOS."/>
  <variant name=".Malloc.CommittedSize"
      summary="Committed memory size for malloc(). Recorded only when
               PartitionAlloc is used as malloc()."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.CumulativeSizeInBytes"
      summary="Total size of quarantined allocations in the ELUD quarantine
               since process start, including already dequarantined
               allocations."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.CumulativeSizeInBytes"
      summary="Total size of quarantined allocations in the ELUD quarantine
               since process start, including already dequarantined
               allocations."/>
  <variant name=".Malloc.Fragmentation"
      summary="Fragmentation of PartitionAlloc."/>
  <variant name=".Malloc.Fragmentation.After1H"
      summary="Fragmentation of PartitionAlloc for processes that have
               existed for &gt;=1H."/>
  <variant name=".Malloc.Fragmentation.After24H"
      summary="Fragmentation of PartitionAlloc for processes older than 1
               day."/>
  <variant name=".Malloc.IntendedLeakSize"
      summary="Intended leaked size for LeakedSanitizedObjects."/>
  <variant name=".Malloc.MaxAllocatedSize"
      summary="Highwatermark for allocated memory for malloc(). Recorded only
               when PartitionAlloc is used as malloc()."/>
  <variant name=".Malloc.MaxCommittedSize"
      summary="Highwatermark for committed memory for malloc(). Recorded only
               when PartitionAlloc is used as malloc()."/>
  <variant name=".Malloc.Wasted"
      summary="Amount of memory that is wasted due to fragmentation in
               PartitionAlloc, in bytes."/>
  <variant name=".Malloc.Wasted.After1H"
      summary="Amount of memory that is wasted due to fragmentation in
               PartitionAlloc, in bytes, for renderers older than 1 hour."/>
  <variant name=".Malloc.Wasted.After24H"
      summary="Amount of memory that is wasted due to fragmentation in
               PartitionAlloc, in bytes, for renderers older than 1 day."/>
  <variant name=".PartitionAlloc"
      summary="Only counting memory used by PartitionAlloc."/>
  <variant
      name=".PartitionAlloc.AddressSpace.BRPPoolLargestAvailableReservation"
      summary="Longest free chunk in the BRP pool. Only recorded for 64-bit."/>
  <variant
      name=".PartitionAlloc.AddressSpace.BRPPoolLargestAvailableReservation.After1H"
      summary="Longest free chunk in the BRP pool. Only recorded for 64-bit
               with process uptime [1,24)H."/>
  <variant
      name=".PartitionAlloc.AddressSpace.BRPPoolLargestAvailableReservation.After24H"
      summary="Longest free chunk in the BRP pool. Only recorded for 64-bit
               with process uptime 24H+."/>
  <variant name=".PartitionAlloc.AddressSpace.BRPPoolUsage"
      summary="Used super pages in the BRP pool."/>
  <variant name=".PartitionAlloc.AddressSpace.BRPPoolUsage.After1H"
      summary="Used super pages in the BRP pool with process uptime [1,24)H."/>
  <variant name=".PartitionAlloc.AddressSpace.BRPPoolUsage.After24H"
      summary="Used super pages in the BRP pool with process uptime 24H+."/>
  <variant
      name=".PartitionAlloc.AddressSpace.ConfigurablePoolLargestAvailableReservation"
      summary="Longest free chunk in the configurable pool. Only recorded for
               64-bit."/>
  <variant
      name=".PartitionAlloc.AddressSpace.ConfigurablePoolLargestAvailableReservation.After1H"
      summary="Longest free chunk in the configurable pool. Only recorded for
               64-bit with process uptime [1,24)H."/>
  <variant
      name=".PartitionAlloc.AddressSpace.ConfigurablePoolLargestAvailableReservation.After24H"
      summary="Longest free chunk in the configurable pool. Only recorded for
               64-bit with process uptime 24H+."/>
  <variant name=".PartitionAlloc.AddressSpace.ConfigurablePoolUsage"
      summary="Used super pages in the configurable pool. Only recorded for
               64-bit."/>
  <variant name=".PartitionAlloc.AddressSpace.ConfigurablePoolUsage.After1H"
      summary="Used super pages in the configurable pool. Only recorded for
               64-bit with process uptime [1,24)H."/>
  <variant name=".PartitionAlloc.AddressSpace.ConfigurablePoolUsage.After24H"
      summary="Used super pages in the configurable pool. Only recorded for
               64-bit with process uptime 24H+."/>
  <variant
      name=".PartitionAlloc.AddressSpace.RegularPoolLargestAvailableReservation"
      summary="Longest free chunk in the regular pool. Only recorded for
               64-bit."/>
  <variant
      name=".PartitionAlloc.AddressSpace.RegularPoolLargestAvailableReservation.After1H"
      summary="Longest free chunk in the regular pool. Only recorded for
               64-bit with process uptime [1,24)H."/>
  <variant
      name=".PartitionAlloc.AddressSpace.RegularPoolLargestAvailableReservation.After24H"
      summary="Longest free chunk in the regular pool. Only recorded for
               64-bit with process uptime 24H+."/>
  <variant name=".PartitionAlloc.AddressSpace.RegularPoolUsage"
      summary="Used super pages in the regular pool."/>
  <variant name=".PartitionAlloc.AddressSpace.RegularPoolUsage.After1H"
      summary="Used super pages in the regular pool. Only recorded when
               process uptime is [1,24)H."/>
  <variant name=".PartitionAlloc.AddressSpace.RegularPoolUsage.After24H"
      summary="Used super pages in the regular pool. Only recorded when
               process uptime is 24H+."/>
  <variant
      name=".PartitionAlloc.AddressSpace.ThreadIsolatedPoolLargestAvailableReservation"
      summary="Longest free chunk in the thread isolated pool. Only recorded
               on supported platforms."/>
  <variant
      name=".PartitionAlloc.AddressSpace.ThreadIsolatedPoolLargestAvailableReservation.After1H"
      summary="Longest free chunk in the thread isolated pool. Only recorded
               on supported platforms with process uptime [1,24)H."/>
  <variant
      name=".PartitionAlloc.AddressSpace.ThreadIsolatedPoolLargestAvailableReservation.After24H"
      summary="Longest free chunk in the thread isolated pool. Only recorded
               on supported platforms with process uptime 24H+."/>
  <variant name=".PartitionAlloc.AddressSpace.ThreadIsolatedPoolUsage"
      summary="Used super pages in the thread isolated pool. Only recorded on
               supported platforms."/>
  <variant name=".PartitionAlloc.AddressSpace.ThreadIsolatedPoolUsage.After1H"
      summary="Used super pages in the thread isolated pool. Only recorded on
               supported platforms with process uptime [1,24)H."/>
  <variant
      name=".PartitionAlloc.AddressSpace.ThreadIsolatedPoolUsage.After24H"
      summary="Used super pages in the thread isolated pool. Only recorded on
               supported platforms with process uptime 24H+."/>
  <variant name=".PartitionAlloc.AllocatedObjects"
      summary="Only counting objects allocated using PartitionAlloc."/>
  <variant name=".PartitionAlloc.CommittedSize.ArrayBuffer"
      summary="Committed memory size for the ArrayBuffer partition."/>
  <variant name=".PartitionAlloc.CommittedSize.Buffer"
      summary="Committed memory size for the Buffer partition."/>
  <variant name=".PartitionAlloc.CommittedSize.FastMalloc"
      summary="Committed memory size for the FastMalloc partition."/>
  <variant name=".PartitionAlloc.CommittedSize.Layout"
      summary="Committed memory size for the Layout partition."/>
  <variant name=".PartitionAlloc.Fragmentation.ArrayBuffer"
      summary="Fragmentation of ArrayBuffer partition."/>
  <variant name=".PartitionAlloc.Fragmentation.ArrayBuffer.After1H"
      summary="Fragmentation of ArrayBuffer partition. Only recorded for
               renderers older than 1 hour."/>
  <variant name=".PartitionAlloc.Fragmentation.ArrayBuffer.After24H"
      summary="Fragmentation of ArrayBuffer partition. Only recorded for
               renderers older than 24 hour."/>
  <variant name=".PartitionAlloc.Fragmentation.Buffer"
      summary="Fragmentation of Buffer partition."/>
  <variant name=".PartitionAlloc.Fragmentation.Buffer.After1H"
      summary="Fragmentation of Buffer partition. Only recorded for renderers
               older than 1 hour."/>
  <variant name=".PartitionAlloc.Fragmentation.Buffer.After24H"
      summary="Fragmentation of Buffer partition. Only recorded for renderers
               older than 24 hour."/>
  <variant name=".PartitionAlloc.Fragmentation.FastMalloc"
      summary="Fragmentation of FastMalloc partition."/>
  <variant name=".PartitionAlloc.Fragmentation.FastMalloc.After1H"
      summary="Fragmentation of FastMalloc partition. Only recorded for
               renderers older than 1 hour."/>
  <variant name=".PartitionAlloc.Fragmentation.FastMalloc.After24H"
      summary="Fragmentation of FastMalloc partition. Only recorded for
               renderers older than 24 hour."/>
  <variant name=".PartitionAlloc.Fragmentation.Layout"
      summary="Fragmentation of Layout partition."/>
  <variant name=".PartitionAlloc.Fragmentation.Layout.After1H"
      summary="Fragmentation of Layout partition. Only recorded for renderers
               older than 1 hour."/>
  <variant name=".PartitionAlloc.Fragmentation.Layout.After24H"
      summary="Fragmentation of Layout partition. Only recorded for renderers
               older than 24 hour."/>
  <variant name=".PartitionAlloc.MaxAllocatedSize.ArrayBuffer"
      summary="Highwatermark for allocated memory for the ArrayBuffer
               partition."/>
  <variant name=".PartitionAlloc.MaxAllocatedSize.Buffer"
      summary="Highwatermark for allocated memory for the Buffer partition."/>
  <variant name=".PartitionAlloc.MaxAllocatedSize.FastMalloc"
      summary="Highwatermark for allocated memory for the FastMalloc
               partition."/>
  <variant name=".PartitionAlloc.MaxAllocatedSize.Layout"
      summary="Highwatermark for allocated memory for the Layout partition."/>
  <variant name=".PartitionAlloc.MaxCommittedSize.ArrayBuffer"
      summary="Highwatermark for committed memory for the ArrayBuffer
               partition."/>
  <variant name=".PartitionAlloc.MaxCommittedSize.Buffer"
      summary="Highwatermark for committed memory for the Buffer partition."/>
  <variant name=".PartitionAlloc.MaxCommittedSize.FastMalloc"
      summary="Highwatermark for committed memory for the FastMalloc
               partition."/>
  <variant name=".PartitionAlloc.MaxCommittedSize.Layout"
      summary="Highwatermark for committed memory for the Layout partition."/>
  <variant name=".PartitionAlloc.Partitions.ArrayBuffer"
      summary="Only counting memory used by Array Buffer partition."/>
  <variant name=".PartitionAlloc.Partitions.Buffer"
      summary="Only counting memory used by Buffer partition."/>
  <variant name=".PartitionAlloc.Partitions.FastMalloc"
      summary="Only counting memory used by Fast Malloc partition."/>
  <variant name=".PartitionAlloc.Partitions.Layout"
      summary="Only counting memory used by Layout partition."/>
  <variant name=".PartitionAlloc.Wasted.ArrayBuffer"
      summary="Amount of memory that is wasted in the ArrayBuffer partition
               due to fragmentation, in bytes."/>
  <variant name=".PartitionAlloc.Wasted.ArrayBuffer.After1H"
      summary="Amount of memory that is wasted in the ArrayBuffer partition
               due to fragmentation, in bytes. Only recorded for renderers
               older than 1 hour."/>
  <variant name=".PartitionAlloc.Wasted.ArrayBuffer.After24H"
      summary="Amount of memory that is wasted in the ArrayBuffer partition
               due to fragmentation, in bytes. Only recorded for renderers
               older than 24 hour."/>
  <variant name=".PartitionAlloc.Wasted.Buffer"
      summary="Amount of memory that is wasted in the Buffer partition due to
               fragmentation, in bytes."/>
  <variant name=".PartitionAlloc.Wasted.Buffer.After1H"
      summary="Amount of memory that is wasted in the Buffer partition due to
               fragmentation, in bytes. Only recorded for renderers older
               than 1 hour."/>
  <variant name=".PartitionAlloc.Wasted.Buffer.After24H"
      summary="Amount of memory that is wasted in the Buffer partition due to
               fragmentation, in bytes. Only recorded for renderers older
               than 24 hour."/>
  <variant name=".PartitionAlloc.Wasted.FastMalloc"
      summary="Amount of memory that is wasted in the FastMalloc partition
               due to fragmentation, in bytes."/>
  <variant name=".PartitionAlloc.Wasted.FastMalloc.After1H"
      summary="Amount of memory that is wasted in the FastMalloc partition
               due to fragmentation, in bytes. Only recorded for renderers
               older than 1 hour."/>
  <variant name=".PartitionAlloc.Wasted.FastMalloc.After24H"
      summary="Amount of memory that is wasted in the FastMalloc partition
               due to fragmentation, in bytes. Only recorded for renderers
               older than 24 hour."/>
  <variant name=".PartitionAlloc.Wasted.Layout"
      summary="Amount of memory that is wasted in the Layout partition due to
               fragmentation, in bytes."/>
  <variant name=".PartitionAlloc.Wasted.Layout.After1H"
      summary="Amount of memory that is wasted in the Layout partition due to
               fragmentation, in bytes. Only recorded for renderers older
               than 1 hour."/>
  <variant name=".PartitionAlloc.Wasted.Layout.After24H"
      summary="Amount of memory that is wasted in the Layout partition due to
               fragmentation, in bytes. Only recorded for renderers older
               than 24 hour."/>
  <variant name=".SharedImages"
      summary="All SharedImages memory. Typically accounted for in other
               processes, e.g. renderers, this is the total Chrome-wide
               memory used by SharedImages."/>
  <variant name=".SharedImages.NonExo"
      summary="All memory for SharedImages that weren't imported by Exo.
               Lacros will report that memory in its own metrics, so this
               metric ignores them to avoid double counting. Only Ash can
               report a value different from the SharedImages metric."/>
  <variant name=".SharedImages.Purgeable"
      summary="All purgeable SharedImages memory. Typically accounted for in
               other processes, e.g. renderers, this is the total Chrome-wide
               memory used by SharedImages. Non-zero only on platforms where
               SharedImages can be purgeable."/>
  <variant name=".SiteStorage"
      summary="Only counting memory used by Web storage API."/>
  <variant name=".SiteStorage.BlobStorage"
      summary="Only counting memory used by in-memory blob files."/>
  <variant name=".Skia" summary="Only counting memory used by Skia caches."/>
  <variant name=".Skia.PurgeableSize"
      summary="Only counting memory used by Skia caches which Skia considers
               purgeable."/>
  <variant name=".Skia.SkGlyphCache"
      summary="Only counting memory used by Skia glyph cache."/>
  <variant name=".Skia.SkResourceCache"
      summary="Only counting memory used by Skia bitmap resource cache."/>
  <variant name=".Sync" summary="Only counting memory used by Sync storage."/>
  <variant name=".V8"
      summary="Only counting memory used by V8 javascript engine."/>
  <variant name=".V8.AllocatedObjects"
      summary="Only counting objects allocated by V8 javascript engine."/>
  <variant name=".V8.Main.GlobalHandles"
      summary="Total memory used by V8 global handles in the main isolate."/>
  <variant name=".V8.Main.GlobalHandles.AllocatedObjects"
      summary="Allocated memory used by V8 global handles in the main
               isolate."/>
  <variant name=".V8.Main.Heap" summary="Only counting memory used by V8 heap"/>
  <variant name=".V8.Main.Heap.AllocatedObjects"
      summary="Only counting objects allocated in V8 heap"/>
  <variant name=".V8.Main.Heap.CodeSpace"
      summary="Only counting memory used by the code-space of V8 heap"/>
  <variant name=".V8.Main.Heap.CodeSpace.AllocatedObjects"
      summary="Only counting objects allocated in the map-space of V8 heap"/>
  <variant name=".V8.Main.Heap.LargeObjectSpace"
      summary="Only counting memory used by the large-object-space of V8 heap"/>
  <variant name=".V8.Main.Heap.LargeObjectSpace.AllocatedObjects"
      summary="Only counting objects allocated in the large-object-space of
               V8 heap"/>
  <variant name=".V8.Main.Heap.MapSpace"
      summary="Only counting memory used by the map-space of V8 heap"/>
  <variant name=".V8.Main.Heap.MapSpace.AllocatedObjects"
      summary="Only counting objects allocated in the code-space of V8 heap"/>
  <variant name=".V8.Main.Heap.NewLargeObjectSpace"
      summary="Only counting memory used by the new-large-object-space of V8
               heap"/>
  <variant name=".V8.Main.Heap.NewLargeObjectSpace.AllocatedObjects"
      summary="Only counting objects allocated in the new-large-object-space
               of V8 heap"/>
  <variant name=".V8.Main.Heap.NewSpace"
      summary="Only counting memory used by the new-space of V8 heap"/>
  <variant name=".V8.Main.Heap.NewSpace.AllocatedObjects"
      summary="Only counting objects allocated in the new-space of V8 heap"/>
  <variant name=".V8.Main.Heap.OldSpace"
      summary="Only counting memory used by the old-space of V8 heap"/>
  <variant name=".V8.Main.Heap.OldSpace.AllocatedObjects"
      summary="Only counting objects allocated in the old-space of V8 heap"/>
  <variant name=".V8.Main.Heap.ReadOnlySpace"
      summary="Only counting memory used by the read-only-space of V8 heap"/>
  <variant name=".V8.Main.Heap.ReadOnlySpace.AllocatedObjects"
      summary="Only counting objects allocated in the read-only-space of V8
               heap"/>
  <variant name=".V8.Main.Heap.SharedLargeObjectSpace"
      summary="Only counting memory used by the shared-large-object-space of
               V8 heap"/>
  <variant name=".V8.Main.Heap.SharedLargeObjectSpace.AllocatedObjects"
      summary="Only counting objects allocated in the
               shared-large-object-space of V8 heap"/>
  <variant name=".V8.Main.Heap.SharedSpace"
      summary="Only counting memory used by the shared-space of V8 heap"/>
  <variant name=".V8.Main.Heap.SharedSpace.AllocatedObjects"
      summary="Only counting objects allocated in the shared-space of V8 heap"/>
  <variant name=".Vulkan2"
      summary="Total memory allocated by the Vulkan Memory Allocator except
               memory that is lazily allocated. Only reported when Vulkan is
               used for rendering."/>
  <variant name=".Vulkan2.AllocatedObjects"
      summary="Total memory allocated by clients from the Vulkan Memory
               Allocator except memory that is lazily used. Only reported
               when Vulkan is used for rendering."/>
  <variant name=".Vulkan2.Fragmentation"
      summary="Total memory lost to fragmentation in the Vulkan Memory
               Allocator. Only reported when Vulkan is used for rendering."/>
  <variant name=".Vulkan2.LazyAllocatedObjects"
      summary="Total memory that is lazily allocated by the Vulkan Memory
               Allocator. Only reported when Vulkan is used for rendering."/>
  <variant name=".Vulkan2.LazyUsedObjects"
      summary="Total memory that is lazily allocated by clients from the
               Vulkan Memory Allocator. Only reported when Vulkan is used for
               rendering."/>
  <variant name=".WebGL"
      summary="Only counting memory used by WebGL contexts. Includes an
               estimate of GPU memory used."/>
</variants>

<variants name="ProcessMemoryAllocatorCustom2">
  <variant name=".AXPlatformNodeCount"
      summary="Count of accessibility nodes in the browser process."/>
  <variant name=".AXPlatformWinDormantNodeCount"
      summary="Count of dormant accessibility platform nodes in the browser
               process."/>
  <variant name=".AXPlatformWinGhostNodeCount"
      summary="Count of ghost accessibility platform nodes in the browser
               process."/>
  <variant name=".AXPlatformWinLiveNodeCount"
      summary="Count of live accessibility platform nodes in the browser
               process."/>
  <variant name=".DevTools.Sessions.ActiveCount"
      summary="Reports the number of active DevTools sessions."/>
  <variant name=".DurableMessages.AggregateMessageCount"
      summary="Reports the aggregate message count by all
               DevToolsDurableMessageCollector instances."/>
  <variant name=".DurableMessages.CollectorCount"
      summary="Reports the number of DevToolsDurableMessageCollector
               instances."/>
  <variant name=".ServiceDiscardableManager"
      summary="Only counting memory used by the gpu discardable cache."/>
  <variant name=".ServiceDiscardableManager.AvgImageSize"
      summary="Only counting the average image size of entries in the gpu
               discardable cache"/>
  <variant name=".ServiceTransferCache"
      summary="Only counting memory used by images in the gpu transfer cache."/>
  <variant name=".ServiceTransferCache.AvgImageSize"
      summary="Only counting the average size of image entries in the gpu
               transfer cache"/>
</variants>

<variants name="ProcessMemoryAllocatorSmall2">
  <variant name=".Discardable.FreelistSize"
      summary="Freelist size used by ClientDiscardableMemoryManager."/>
  <variant name=".Discardable.ResidentSize"
      summary="Amount of resident memory held by
               ClientDiscardableSharedMemoryManager."/>
  <variant name=".Discardable.VirtualSize"
      summary="Virtual memory used by ClientDiscardableMemoryManager."/>
  <variant name=".DownloadService"
      summary="Only counting memory used by Download service."/>
  <variant name=".FontCaches"
      summary="Only counting memory used by font caches."/>
  <variant name=".Gpu.GraphiteShaderCache"
      summary="Only counting memory used by Dawn/Graphite Shader Cache."/>
  <variant name=".Gpu.GrShaderCache"
      summary="Only counting memory used by Skia Shader Cache."/>
  <variant name=".GpuMappedMemory"
      summary="Memory shared between the GPU process and its client for
               transfers."/>
  <variant name=".HibernatedCanvas.OriginalSize"
      summary="Total size of all hibernated canvas snapshots in a given
               renderer, prio to compression. 0 when the renderer is visible."/>
  <variant name=".HibernatedCanvas.Size"
      summary="Total size of all hibernated canvas snapshots in a given
               renderer, after compression if enabled. 0 when the renderer is
               visible."/>
  <variant name=".History"
      summary="Only counting memory used by History service."/>
  <variant name=".LevelDatabase"
      summary="Only counting memory used by Level databases."/>
  <variant name=".Malloc.Aligned.ObjectCount"
      summary="Number of allocated objects. Only counting malloc memory
               allocated in the partition_alloc aligned partition."/>
  <variant name=".Malloc.AlignedAlloc.WastedKiB"
      summary="Total wasted memory in KiB due to alignment rounding in
               PartitionAlloc aligned allocations."/>
  <variant name=".Malloc.AllocatedObjects.ObjectCount"
      summary="Number of allocated objects."/>
  <variant name=".Malloc.Allocator.ObjectCount"
      summary="Number of allocated objects. Only counting malloc memory
               allocated in the partition_alloc allocator partition."/>
  <variant name=".Malloc.BRPQuarantined"
      summary="Memory used by objects quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".Malloc.BRPQuarantinedBytesPerMinute"
      summary="Total size of BRP quarantined bytes per minute, averaged
               during the last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.BytesPerMinute"
      summary="Size of ELUD quarantined bytes per minute, averaged during the
               last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.CumulativeCount"
      summary="Total count of quarantined allocations in the ELUD quarantine
               since process start, including already dequarantined
               allocations."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.QuarantinedTime"
      summary="Time to use up the capacity of the ELUD quarantine in
               milliseconds, estimated from BytesPerMinute. Very rough
               approximation to how long time allocations are quarantined."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.SizeInBytes"
      summary="Size of quarantined allocations in the ELUD quarantine at dump
               time."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.BytesPerMinute"
      summary="Size of ELUD quarantined bytes per minute, averaged during the
               last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.CumulativeCount"
      summary="Total count of quarantined allocations in the ELUD quarantine
               since process start, including already dequarantined
               allocations."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.QuarantinedTime"
      summary="Time to use up the capacity of the ELUD quarantine in
               milliseconds, estimated from BytesPerMinute. Very rough
               approximation to how long time allocations are quarantined."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.SizeInBytes"
      summary="Size of quarantined allocations in the ELUD quarantine at dump
               time."/>
  <variant name=".Malloc.Original.ObjectCount"
      summary="Number of allocated objects. Only counting malloc memory
               allocated in the partition_alloc original partition."/>
  <variant name=".Malloc.SchedulerLoopQuarantine.CumulativeSizeInBytes"
      summary="Total size of quarantined allocations in Scheduler-Loop
               Quarantine since process start, including already
               dequarantined allocations."/>
  <variant name=".Malloc.SchedulerLoopQuarantine.SizeInBytes"
      summary="Size of quarantined allocations in Scheduler-Loop Quarantine
               at dump time."/>
  <variant name=".Malloc.ThreadCache"
      summary="Memory used by all thread caches, recorded when PartitionAlloc
               is used as malloc()."/>
  <variant name=".Net"
      summary="Only counting memory used by Networking sockets and caches."/>
  <variant name=".Net.UrlRequestContext"
      summary="Only counting memory used by URL requests and associated http
               cache."/>
  <variant name=".NumberOfNodes" summary=""/>
  <variant name=".OmniboxSuggestions"
      summary="Only counting memory used by Omnibox suggestions provider."/>
  <variant name=".ParkableImage.OnDiskSize"
      summary="Size of encoded image data of ParkableImages that are on disk."/>
  <variant name=".ParkableImage.TotalSize"
      summary="Total size of encoded image data of ParkableImages."/>
  <variant name=".ParkableImage.UnparkedSize"
      summary="Size of encoded image data of ParkableImages that are not
               written to disk."/>
  <variant name=".PartitionAlloc.BRPQuarantined"
      summary="Memory used by objects quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".PartitionAlloc.BRPQuarantined.ArrayBuffer"
      summary="Memory used by objects quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".PartitionAlloc.BRPQuarantined.Buffer"
      summary="Memory used by objects quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".PartitionAlloc.BRPQuarantined.FastMalloc"
      summary="Memory used by objects quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".PartitionAlloc.Partitions.FastMalloc.ThreadCache"
      summary="Memory used by all thread caches for the FastMalloc partition.
               Recorded in blink processes, unless PartitionAlloc is used as
               malloc()."/>
  <variant name=".SiteStorage.IndexDB"
      summary="Only counting memory used by IndexedDB API."/>
  <variant name=".SiteStorage.LocalStorage"
      summary="Only counting memory used by Local storage API."/>
  <variant name=".SiteStorage.SessionStorage"
      summary="Only counting memory used by Session storage API."/>
  <variant name=".Sqlite"
      summary="Only counting memory used by Sqlite databases."/>
  <variant name=".TabRestore"
      summary="Only counting memory used by tab restore page states."/>
  <variant name=".TileMemory" summary="GPU memory used for tiles."/>
  <variant name=".UI"
      summary="Only counting memory used by Android UI bitmaps."/>
  <variant name=".WebCache"
      summary="Only counting memory used by all resources in Blink Web Cache."/>
  <variant name=".WebCache.CSSStylesheetResources"
      summary="Only counting memory used by CSS Stylesheet resources in Blink
               Web Cache."/>
  <variant name=".WebCache.EncodedSizeDuplicatedInDataUrls"
      summary="Only counting memory used by data URLs of Image resources in
               Blink Web Cache."/>
  <variant name=".WebCache.FontResources"
      summary="Only counting memory used by Font resources in Blink Web
               Cache."/>
  <variant name=".WebCache.ImageResources"
      summary="Only counting memory used by Image resources in Blink Web
               Cache."/>
  <variant name=".WebCache.OtherResources"
      summary="Only counting memory used by other resources in Blink Web
               Cache."/>
  <variant name=".WebCache.ScriptResources"
      summary="Only counting memory used by Script resources in Blink Web
               Cache."/>
  <variant name=".WebCache.V8CodeCache"
      summary="Only counting memory of v8 code cache used by Script resources
               in Blink Web Cache."/>
  <variant name=".WebCache.XSLStylesheetResources"
      summary="Only counting memory used by XSL Stylesheet resources in Blink
               Web Cache."/>
</variants>

<variants name="ProcessMemoryAllocatorTiny2">
  <variant name=".Malloc.BRPQuarantinedCount"
      summary="Number of slots quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".Malloc.BRPQuarantinedCountPerMinute"
      summary="Number of BRP quarantined allocations per minute, averaged
               during the last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.Count"
      summary="Count of all quarantined allocations in the ELUD quarantine at
               dump time."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.CountPerMinute"
      summary="Number of ELUD quarantined allocations per minute, averaged
               during the last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.MissCountPerMinute"
      summary="Number of ELUD quarantine requests that were not satisfied per
               minute, averaged during the last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.LargeObjects.QuarantineMissCount"
      summary="Monotonically increasing count of quarantine requests that
               were not satisfied due to the configured size limit of the
               ELUD quarantine."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.Count"
      summary="Count of all quarantined allocations in the ELUD quarantine at
               dump time."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.CountPerMinute"
      summary="Number of ELUD quarantined allocations per minute, averaged
               during the last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.MissCountPerMinute"
      summary="Number of ELUD quarantine requests that were not satisfied per
               minute, averaged during the last memory dump interval."/>
  <variant name=".Malloc.ExtremeLUD.SmallObjects.QuarantineMissCount"
      summary="Monotonically increasing count of quarantine requests that
               were not satisfied due to the configured size limit of the
               ELUD quarantine."/>
  <variant name=".Malloc.SchedulerLoopQuarantine.Count"
      summary="Count of all quarantined allocations in Scheduler-Loop
               Quarantine at dump time."/>
  <variant name=".Malloc.SchedulerLoopQuarantine.CumulativeCount"
      summary="Total count of quarantined allocations in Scheduler-Loop
               Quarantine since process start, including already
               dequarantined allocations."/>
  <variant name=".Malloc.SchedulerLoopQuarantine.QuarantineMissCount"
      summary="Monotonically increasing count of quarantine requests that
               were not satisfied due to the configured size limit of
               Scheduler-Loop Quarantine."/>
  <variant name=".Malloc.SyscallsPerMinute"
      summary="Number of system calls made per minute, averaged during the
               last memory dump interval. Only collected when PartitionAlloc
               is malloc()."/>
  <variant name=".NumberOfAdSubframes" summary=""/>
  <variant name=".NumberOfArrayBufferContents" summary=""/>
  <variant name=".NumberOfAudioHandler" summary=""/>
  <variant name=".NumberOfContextLifecycleStateObserver" summary=""/>
  <variant name=".NumberOfDetachedScriptStates" summary=""/>
  <variant name=".NumberOfDocuments" summary=""/>
  <variant name=".NumberOfFrames" summary=""/>
  <variant name=".NumberOfJSEventListener" summary=""/>
  <variant name=".NumberOfLayoutObjects" summary=""/>
  <variant name=".NumberOfMediaKeys" summary=""/>
  <variant name=".NumberOfMediaKeySession" summary=""/>
  <variant name=".NumberOfResourceFetcher" summary=""/>
  <variant name=".NumberOfResources" summary=""/>
  <variant name=".NumberOfRTCPeerConnection" summary=""/>
  <variant name=".NumberOfUACSSResource" summary=""/>
  <variant name=".NumberOfV8PerContextData" summary=""/>
  <variant name=".NumberOfWorkerGlobalScope" summary=""/>
  <variant name=".PartitionAlloc.AddressSpace.BlocklistHitCount"
      summary="Monotonically increasing count of failures in finding a
               non-blocklisted address. Only recorded for 32-bit."/>
  <variant name=".PartitionAlloc.AddressSpace.BlocklistHitCount.After1H"
      summary="Monotonically increasing count of failures in finding a
               non-blocklisted address. Only recorded for 32-bit with process
               uptime [1,24)H."/>
  <variant name=".PartitionAlloc.AddressSpace.BlocklistHitCount.After24H"
      summary="Monotonically increasing count of failures in finding a
               non-blocklisted address. Only recorded for 32-bit with process
               uptime 24H+."/>
  <variant name=".PartitionAlloc.AddressSpace.BlocklistSize"
      summary="Monotonically increasing count of blocked addresses. Only
               recorded for 32-bit."/>
  <variant name=".PartitionAlloc.AddressSpace.BlocklistSize.After1H"
      summary="Monotonically increasing count of blocked addresses. Only
               recorded for 32-bit with process uptime [1,24)H."/>
  <variant name=".PartitionAlloc.AddressSpace.BlocklistSize.After24H"
      summary="Monotonically increasing count of blocked addresses. Only
               recorded for 32-bit with process uptime 24H+."/>
  <variant name=".PartitionAlloc.BRPQuarantinedCount"
      summary="Number of slots quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".PartitionAlloc.BRPQuarantinedCount.ArrayBuffer"
      summary="Number of slots quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".PartitionAlloc.BRPQuarantinedCount.Buffer"
      summary="Number of slots quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
  <variant name=".PartitionAlloc.BRPQuarantinedCount.FastMalloc"
      summary="Number of slots quarantined by BRP, recorded when
               USE_BACKUP_REF_PTR build flag is enabled."/>
</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="RecordedDelay">
  <variant name="After"
      summary="Recorded directly after self-compaction is finished."/>
  <variant name="After1s"
      summary="Recorded 1s after self-compaction is finished."/>
  <variant name="After10s"
      summary="Recorded 10s after self-compaction is finished."/>
  <variant name="After60s"
      summary="Recorded 60s after self-compaction is finished."/>
  <variant name="Before" summary="Recorded directly before self-compaction."/>
</variants>

<variants name="RecordedDelayDiff">
  <variant name="After1s"
      summary="Comparison of metrics directly after vs 1s later."/>
  <variant name="After10s"
      summary="Comparison of metrics directly after vs 10s later."/>
  <variant name="After60s"
      summary="Comparison of metrics directly after vs 60s later."/>
  <variant name="BeforeAfter"
      summary="Comparison of metrics directly before vs directly after
               self-compaction."/>
</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="SmapsMetric">
  <variant name="Pss" summary="Proportional set size"/>
  <variant name="PssAnon" summary="Anonymous PSS"/>
  <variant name="PssFile" summary="File-backed PSS"/>
  <variant name="Rss" summary="Resident set size"/>
  <variant name="SwapPss"/>
</variants>

<variants name="UtilityProcessType">
  <variant name="AudioService">
    <owner>olka@chromium.org</owner>
    <owner>fhernqvist@google.com</owner>
    <owner>tguilbert@chromium.org</owner>
    <owner>webrtc-audio-uma@google.com</owner>
  </variant>
  <variant name="CdmService">
    <owner>xhwang@chromium.org</owner>
    <owner>media-dev-uma@chromium.org</owner>
  </variant>
  <variant name="MediaFoundationService">
    <owner>xhwang@chromium.org</owner>
    <owner>media-dev-uma@chromium.org</owner>
  </variant>
  <variant name="PaintPreviewCompositor">
    <owner>ckitagawa@chromium.org</owner>
    <owner>fredmello@chromium.org</owner>
  </variant>
  <variant name="Utility">
    <owner>jam@chromium.org</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.InProcess.Enabled{Process}"
    enum="BooleanEnabled" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</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="2027-02-14">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</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.SamplingIntervalVariance{Process}"
    units="%" expires_after="2027-02-14">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    The ratio of the actual sampling interval in use to the requested sampling
    interval, as a percentage. 100% means the actual interval matches the
    requested interval. Values less than 100% mean the actual interval is
    smaller (sampling is more frequent). Values greater than 100% mean the
    actual interval is larger (sampling is less frequent). Emitted once per
    snapshot in {Process}.
  </summary>
  <token key="Process" variants="ProfiledProcess"/>
</histogram>

<histogram name="HeapProfiling.InProcess.TotalSampledMemory{Process}"
    units="MB" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>chrome-memory@google.com</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.Browser.MappingsCount" units="count"
    expires_after="2027-01-17">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    How many memory mappings are present in the process, at the time of
    recording.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms, only on Linux-based systems.
  </summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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="2027-01-03">
  <owner>justincohen@chromium.org</owner>
  <owner>bling-fundamentals@google.com</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="2027-01-03">
  <owner>justincohen@chromium.org</owner>
  <owner>bling-fundamentals@google.com</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="2026-12-20">
  <owner>justincohen@chromium.org</owner>
  <owner>bling-fundamentals@google.com</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="2027-01-03">
  <owner>justincohen@chromium.org</owner>
  <owner>bling-fundamentals@google.com</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="2027-01-03">
  <owner>justincohen@chromium.org</owner>
  <owner>rkgibson@google.com</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="2027-05-18">
  <owner>justincohen@chromium.org</owner>
  <owner>bling-fundamentals@google.com</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.MemoryFootprint.Startup" units="MB"
    expires_after="2027-01-03">
  <owner>justincohen@chromium.org</owner>
  <owner>bling-fundamentals@google.com</owner>
  <summary>
    This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
    but recorded during startup after the deferred initialization blocks queue
    becomes empty.
  </summary>
</histogram>

<histogram name="Memory.Browser.PartitionAlloc.Malloc.AllocatedObjects"
    units="MB" expires_after="2027-05-28">
  <owner>colibie@google.com</owner>
  <owner>src/android_webview/OWNERS</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    WARNING: Android WebView Only at the moment.

    The total active memory (bytes currently occupied by live objects) managed
    by PartitionAlloc-as-Malloc in the browser process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android (WebView).
  </summary>
</histogram>

<histogram name="Memory.Browser.PrivateMemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</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="2027-01-17">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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>fdoray@chromium.org</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.ResidentSetPeak" units="MiB"
    expires_after="2027-06-01">
  <owner>colibie@google.com</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Recorded only for Android WebView.

    The peak size of the resident memory in the browser process (also known as
    RSS High Water Mark).

    Recorded at Poisson sampled time intervals with a mean of 5 minutes.
  </summary>
</histogram>

<histogram name="Memory.Browser.SharedMemoryFootprint" units="MB"
    expires_after="2027-01-17">
  <owner>erikchen@chromium.org</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.

    Note #1: Incorrect metrics were reported for M140; there was no actual
    regression. Details can be found at crbug.com/450560777 and
    crrev.com/c/7041925.
  </summary>
</histogram>

<histogram name="Memory.CommitAvailableMB" units="MB"
    expires_after="2027-01-17">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Reported for Windows only. This represents the amount of virtual memory
    currently available for the system to commit, measured in megabytes. This
    value is obtained directly from the ullAvailPageFile field of the
    MEMORYSTATUSEX struct returned by the GlobalMemoryStatusEx API. It indicates
    the remaining capacity for applications to commit memory before reaching the
    system's commit limit. This value is recorded at the same time as the
    current memory pressure signal.
  </summary>
</histogram>

<histogram name="Memory.CommitLimitMB" units="MB" expires_after="2027-01-17">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Reported for Windows only. This represents the total amount of virtual
    memory that can be committed on the system. Virtual memory includes both
    physical RAM and the page file on disk. This metric essentially shows the
    upper limit of memory the system can utilize. This value is recorded at the
    same time as the current memory pressure signal. This value is recorded at
    the same time as the current memory pressure signal.
  </summary>
</histogram>

<histogram name="Memory.CommitPercentageUsed" units="%"
    expires_after="2027-01-03">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Reported for Windows only. This metric provides a clear picture of memory
    utilization by expressing the currently committed memory as a percentage of
    the CommitLimit. It helps assess how heavily the system is relying on its
    virtual memory resources. This value is recorded at the same time as the
    current memory pressure signal.
  </summary>
</histogram>

<histogram name="Memory.Coordinator.RegistrationBatchSize" units="count"
    expires_after="2027-06-30">
  <owner>kmg@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The number of child-process memory consumer registrations coalesced into a
    single batched RegisterMany() IPC to the browser's memory coordinator.
    Recorded once each time a child process flushes its pending registrations. A
    value of 1 means no coalescing happened for that flush; larger values
    quantify how effectively the per-consumer registration IPCs are batched.
  </summary>
</histogram>

<histogram name="Memory.Discardable.FreelistSize.Foreground" units="KiB"
    expires_after="2023-03-05">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>reveman@chromium.org</owner>
  <owner>thiabaud@google.com</owner>
  <summary>
    The discardable memory allocation size in KB. Recorded each time a new
    discardable memory instance is created.
  </summary>
</histogram>

<histogram name="Memory.Dump.Type.{DetailLevel}" enum="MemoryDumpType"
    expires_after="2027-02-28">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Logged whenever a memory dump starts for {DetailLevel}, with the reason the
    dump is being requested.
  </summary>
  <token key="DetailLevel" variants="MemoryDumpLevelOfDetail"/>
</histogram>

<histogram name="Memory.DumpProvider.Count.{DetailLevel}.{Name}"
    units="objects" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    The number of instances of MemoryDumpProvider {Name} that are queued during
    a memory dump. Logged whenever a memory dump starts for {DetailLevel}.
  </summary>
  <token key="DetailLevel" variants="MemoryDumpLevelOfDetail"/>
  <token key="Name" variants="MemoryDumpProviderName"/>
</histogram>

<histogram name="Memory.DumpProvider.FinalStatus.{DetailLevel}.{Name}"
    enum="MemoryDumpProviderStatus" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    The status of an instance of MemoryDumpProvider {Name} when it finishes
    running or is skipped. During a memory dump, a list of MemoryDumpProvider
    objects is queued to run in sequence. This metric is logged for each object
    in a dump of {DetailLevel} when it's destroyed, with the reason it was
    destroyed. Usually this is when it's removed from the queue to run it, or to
    explicitly skip it. Objects can also be destroyed if they're still in the
    queue when the queue is destroyed.
  </summary>
  <token key="DetailLevel" variants="MemoryDumpLevelOfDetail"/>
  <token key="Name" variants="MemoryDumpProviderName"/>
</histogram>

<histogram name="Memory.DumpProvider.FollowingProviders.{DetailLevel}.{Name}"
    units="objects" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    The number of MemoryDumpProviders remaining in the queue for a dump of
    {DetailLevel} after an instance of MemoryDumpProvider {Name} is destroyed.
    Logged at the same time as Memory.DumpProvider.FinalStatus.
  </summary>
  <token key="DetailLevel" variants="MemoryDumpLevelOfDetail"/>
  <token key="Name" variants="MemoryDumpProviderName"/>
</histogram>

<histogram name="Memory.DumpProvider.MemoryDumpTime.{DetailLevel}.{Name}"
    units="microseconds" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    The length of time an instance of MemoryDumpProvider {Name} spent executing
    for {DetailLevel}, not including time the system was suspended.
    Memory.DumpProvider.TotalTime, which includes the time it spent queued, will
    also be logged when this is logged.

    Note: this metric is only recorded on clients with a high-resolution clock.
  </summary>
  <token key="DetailLevel" variants="MemoryDumpLevelOfDetail"/>
  <token key="Name" variants="MemoryDumpProviderName"/>
</histogram>

<histogram name="Memory.DumpProvider.PostTaskTime.{DetailLevel}.{Name}"
    units="ms" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    The length of time between an instance of MemoryDumpProvider {Name} being
    posted to take a memory dump for {DetailLevel} on another thread, and
    Memory.DumpProvider.FinalStatus being recorded for that instance, not
    including time the system was suspended. If FinalStatus was recorded because
    the instance finished running, Memory.DumpProvider.MemoryDumpTime will also
    be recorded with the time that it took to run.

    Note: this metric is only recorded on clients with a high-resolution clock.
  </summary>
  <token key="DetailLevel" variants="MemoryDumpLevelOfDetail"/>
  <token key="Name" variants="MemoryDumpProviderName"/>
</histogram>

<histogram name="Memory.DumpProvider.TotalTime.{DetailLevel}.{Name}" units="ms"
    expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    The length of time between an instance of MemoryDumpProvider {Name} being
    queued for a memory dump of {DetailLevel}, and
    Memory.DumpProvider.FinalStatus being recorded for that instance, not
    including time the system was suspended. If FinalStatus was recorded because
    the instance finished running, Memory.DumpProvider.MemoryDumpTime will also
    be recorded with the time that it took to run.

    Note: this metric is only recorded on clients with a high-resolution clock.
  </summary>
  <token key="DetailLevel" variants="MemoryDumpLevelOfDetail"/>
  <token key="Name" variants="MemoryDumpProviderName"/>
</histogram>

<histogram name="Memory.Experimental.AvailableMemoryMB" units="MB"
    expires_after="2025-11-16">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</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="2027-02-07">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The percentage of physical memory on the system considered
    &quot;available&quot; by base::SysInfo::AmountOfAvailablePhysicalMemory()
    and base::SysInfo::AmountOfTotalPhysicalMemory().

    Recorded every 2 minutes.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Browser2.Custom{ProcessMemoryAllocatorCustom2}"
    units="bytes" expires_after="2027-01-31">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorCustom2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Browser2.Small{ProcessMemoryAllocatorSmall2}"
    units="KB" expires_after="2027-02-07">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorSmall2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Browser2.Tiny{ProcessMemoryAllocatorTiny2}"
    units="bytes" expires_after="2025-09-21">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorTiny2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Browser2{ProcessMemoryAllocator2}"
    units="MB" expires_after="2027-02-07">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocator2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Extension2.Custom{ProcessMemoryAllocatorCustom2}"
    units="bytes" expires_after="2026-01-10">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorCustom2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Extension2.Small{ProcessMemoryAllocatorSmall2}"
    units="KB" expires_after="2025-10-12">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorSmall2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Extension2.Tiny{ProcessMemoryAllocatorTiny2}"
    units="bytes" expires_after="2026-01-10">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorTiny2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Extension2{ProcessMemoryAllocator2}"
    units="MB" expires_after="2027-02-07">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocator2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Gpu2.Custom{ProcessMemoryAllocatorCustom2}"
    units="bytes" expires_after="2027-02-07">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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. {ProcessMemoryAllocatorCustom2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Gpu2.Small{ProcessMemoryAllocatorSmall2}"
    units="KB" expires_after="2027-02-14">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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. {ProcessMemoryAllocatorSmall2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Gpu2.Tiny{ProcessMemoryAllocatorTiny2}"
    units="bytes" expires_after="2025-05-25">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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. {ProcessMemoryAllocatorTiny2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Gpu2{ProcessMemoryAllocator2}" units="MB"
    expires_after="2027-02-14">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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. {ProcessMemoryAllocator2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.MacFileBackedMemoryMB2" units="MB"
    expires_after="2025-03-09">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</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
    name="Memory.Experimental.NetworkService2.Custom{ProcessMemoryAllocatorCustom2}"
    units="bytes" expires_after="2027-02-07">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorCustom2}

    Warning: this histogram was expired from 2026-01-10 to 2026-03-10; data may
    be missing.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.NetworkService2.Small{ProcessMemoryAllocatorSmall2}"
    units="KiB" expires_after="2026-07-19">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorSmall2}

    Warning: this histogram was expired from 2026-01-10 to 2026-03-10; data may
    be missing.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.NetworkService2.Tiny{ProcessMemoryAllocatorTiny2}"
    units="bytes" expires_after="2026-07-19">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorTiny2}

    Warning: this histogram was expired from 2025-05-25 to 2026-03-10; data may
    be missing.
  </summary>
</histogram>

<histogram name="Memory.Experimental.NetworkService2{ProcessMemoryAllocator2}"
    units="MiB" expires_after="2027-02-07">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocator2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.AvailableMemoryAfterOOM"
    units="MB" expires_after="2027-01-17">
  <owner>etiennep@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The amount of available memory on the system as reported by MemAvailable
    from /proc/meminfo when a foreground renderer OOM occurs. This is recorded
    during OOM handling, it is not guaranteed that the value reflects the state
    at the time of the OOM. Recorded on Android.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.AvailableMemoryBeforeOOM"
    units="MB" expires_after="2027-01-17">
  <owner>etiennep@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The amount of available memory on the system as reported by MemAvailable
    from /proc/meminfo when a foreground renderer OOM occurs. This is the last
    recorded metric by renderer a few seconds before getting killed. Recorded on
    Android.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.HighestPrivateMemoryFootprint"
    units="MB" expires_after="2025-11-02">
  <owner>tasak@google.com</owner>
  <owner>mikt@chromium.org</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 name="Memory.Experimental.Renderer.SwapFreeAfterOOM" units="MB"
    expires_after="2026-11-15">
  <owner>etiennep@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Amount of swap space as reported by SwapFree from /proc/meminfo when a
    foreground renderer OOM occurs. This is recorded during OOM handling, it is
    not guaranteed that the value reflects the state at the time of the OOM.
    Recorded on Android.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.SwapFreeBeforeOOM" units="MB"
    expires_after="2026-11-15">
  <owner>etiennep@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Amount of swap space as reported by SwapFree from /proc/meminfo when a
    foreground renderer OOM occurs. This is the last recorded metric by renderer
    a few seconds before getting killed. Recorded on Android.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.TotalMemoryAfterOOM" units="MB"
    expires_after="2027-01-17">
  <owner>etiennep@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The total amount of memory on the system as reported by MemTotal from
    /proc/meminfo when a foreground renderer OOM occurs. This is recorded during
    OOM handling, it is not guaranteed that the value reflects the state at the
    time of the OOM. Recorded on Android.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Renderer2.Custom{ProcessMemoryAllocatorCustom2}"
    units="bytes" expires_after="2026-01-10">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorCustom2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Renderer2.Small{ProcessMemoryAllocatorSmall2}"
    units="KB" expires_after="2027-02-07">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorSmall2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Renderer2.Tiny{ProcessMemoryAllocatorTiny2}"
    units="bytes" expires_after="2027-02-07">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorTiny2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer2{ProcessMemoryAllocator2}"
    units="MB" expires_after="2027-02-14">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocator2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.UserLevelMemoryPressureSignal.RendererPrivateMemoryFootprintBefore"
    units="MB" expires_after="2022-05-01">
  <owner>keishi@chromium.org</owner>
  <owner>tasak@chromium.org</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.TotalPrivateMemoryFootprintVisibleOrHigherPriorityRenderersAfter"
    units="MB" expires_after="2024-05-05">
  <owner>tasak@google.com</owner>
  <owner>chrome-memory-tok@google.com</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>tasak@google.com</owner>
  <owner>chrome-memory-tok@google.com</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
    name="Memory.Experimental.Utility2.Custom{ProcessMemoryAllocatorCustom2}"
    units="bytes" expires_after="2026-01-10">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorCustom2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Utility2.Small{ProcessMemoryAllocatorSmall2}"
    units="KB" expires_after="2026-02-01">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorSmall2}
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.Utility2.Tiny{ProcessMemoryAllocatorTiny2}"
    units="bytes" expires_after="2025-05-25">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocatorTiny2}
  </summary>
</histogram>

<histogram name="Memory.Experimental.Utility2{ProcessMemoryAllocator2}"
    units="MB" expires_after="2026-01-10">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</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. {ProcessMemoryAllocator2}
  </summary>
</histogram>

<histogram name="Memory.Extension.PrivateMemoryFootprint" units="MB"
    expires_after="2027-01-17">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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>fdoray@chromium.org</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.Gpu.MappingsCount" units="count"
    expires_after="2026-07-05">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    How many memory mappings are present in the process, at the time of
    recording.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms, only on Linux-based systems.
  </summary>
</histogram>

<histogram name="Memory.GPU.PeakMemoryAllocationSource2.{Usage}.{Source}"
    units="MB" expires_after="2027-02-07">
  <owner>jonross@chromium.org</owner>
  <owner>chrome-gpu-metric-alerts@chromium.org</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"/>
    <variant name="WebNN" summary="WebNN context"/>
  </token>
</histogram>

<histogram name="Memory.GPU.PeakMemoryUsage2.{Usage}" units="MB"
    expires_after="2027-02-07">
  <owner>jonross@chromium.org</owner>
  <owner>chrome-gpu-metric-alerts@chromium.org</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>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</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.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</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="2026-12-27">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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.

    Note #1: Incorrect metrics were reported for M140; there was no actual
    regression. Details can be found at crbug.com/450560777 and
    crrev.com/c/7041925.
  </summary>
</histogram>

<histogram name="Memory.Graphics" units="MB" expires_after="never">
<!-- expires-never: "heartbeat" metric (internal: used for chromeos memory) -->

  <owner>hajimehoshi@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>bgeffon@chromium.org</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="2027-04-01">
  <owner>khmel@google.com</owner>
  <owner>vovoy@google.com</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="2027-04-01">
  <owner>khmel@google.com</owner>
  <owner>vovoy@google.com</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.

    Warning: this histogram was expired from 2024-12-08 to 2026-08-17; data may
    be missing.
  </summary>
</histogram>

<histogram name="Memory.LowMemoryKiller.FreedSize" units="KB"
    expires_after="2027-04-01">
  <owner>khmel@google.com</owner>
  <owner>vovoy@google.com</owner>
  <summary>
    The memory size freed by each low memory kill event.

    Warning: this histogram was expired from 2024-07-21 to 2026-08-17; data may
    be missing.
  </summary>
</histogram>

<histogram name="Memory.MemoryDumpOutcome" enum="RequestOutcome"
    expires_after="2026-12-20">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The outcome of memory dump request made to emit memory metrics. Recorded at
    Poisson sampled time intervals with a mean of 5 minutes on Android and 30
    minutes on other platforms. Many other memory metrics, including
    Memory.*.PrivateMemoryFootprint, will not be recorded when this does not
    indicate a success. This can be used as a diagnosis metric when the count of
    other memory metrics drops.
  </summary>
</histogram>

<histogram name="Memory.NativeLibrary.MappedAndResidentMemoryFootprint3"
    units="KB" expires_after="2026-10-11">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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="2027-01-31">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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-10-26">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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 #1: Histogram data may be missing for mid-2020 due to expiry.

    Note #2: Incorrect metrics were reported for M140; there was no actual
    regression. Details can be found at crbug.com/450560777 and
    crrev.com/c/7041925.
  </summary>
</histogram>

<histogram name="Memory.OOMKills.Count" units="kills"
    expires_after="2027-01-31">
  <owner>vovoy@google.com</owner>
  <owner>wvk@google.com</owner>
  <summary>Cumulative count of OOM kills in one user session.</summary>
</histogram>

<histogram name="Memory.OOMKills.Daily" units="kills"
    expires_after="2027-02-07">
  <owner>vovoy@google.com</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</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="2027-01-17">
  <owner>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</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-12-07">
  <owner>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</owner>
  <summary>
    Size of a compressed ParkableString, recorded at compression time.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.Decompression.Latency"
    units="microseconds" expires_after="2026-02-22">
  <owner>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</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>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</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-06-22">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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="2026-05-24">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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="2027-01-17">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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-06-29">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</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.CorePoolSizeReduced" enum="Boolean"
    expires_after="2026-08-31">
  <owner>nuskos@chromium.org</owner>
  <owner>chrome-cpp-runtime-safety@google.com</owner>
  <summary>
    Whether PartitionAlloc's core pool size was reduced on iOS due to initial
    allocation failure. This can happen on devices or in processes that lack the
    extended virtual address space entitlement. Recorded once during allocator
    shim configuration.
  </summary>
</histogram>

<histogram name="Memory.PartitionAlloc.PartitionRoot.ExtrasSize" units="bytes"
    expires_after="2025-10-12">
  <owner>keishi@chromium.org</owner>
  <owner>kdlee@chromium.org</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.Subsampled"
    units="microseconds" expires_after="2026-10-26">
  <owner>yukishiino@chromium.org</owner>
  <owner>lizeb@chromium.org</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.

    Subsampled to 1/100.
  </summary>
</histogram>

<histogram name="Memory.PreFreeze2.RecordMetricsFailureType"
    enum="PreFreezeMetricsFailureType" expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</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="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</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-08-10">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</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>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</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.PressureWindowDuration.{Type}" units="ms"
    expires_after="2027-02-07">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</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>
  <token key="Type">
    <variant name="CriticalToModerate"/>
    <variant name="CriticalToNone"/>
    <variant name="ModerateToCritical"/>
    <variant name="ModerateToNone"/>
  </token>
</histogram>

<histogram name="Memory.ProcessCount2" units="processes"
    expires_after="2027-01-17">
  <owner>creis@chromium.org</owner>
  <owner>nasko@chromium.org</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="2027-03-01">
  <owner>jonross@chromium.org</owner>
  <owner>chrome-gpu-memory@google.com</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.MappingsCount" units="count"
    expires_after="2027-02-07">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    How many memory mappings are present in the process, at the time of
    recording.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms, only on Linux-based systems.
  </summary>
</histogram>

<histogram name="Memory.Renderer.PrivateMemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</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
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.
  </summary>
</histogram>

<histogram name="Memory.Renderer.PrivateSwapFootprint" units="MB"
    expires_after="2027-01-17">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    An amount of private memory of the renderer 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.Renderer.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</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.ResidentSetPeak" units="MiB"
    expires_after="2027-06-01">
  <owner>colibie@google.com</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Recorded only for Android WebView.

    The peak size of the resident memory in a renderer process (also known as
    RSS High Water Mark).

    Recorded at Poisson sampled time intervals with a mean of 5 minutes.
  </summary>
</histogram>

<histogram name="Memory.Renderer.SharedMemoryFootprint" units="MB"
    expires_after="2024-03-24">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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.

    Note #1: Incorrect metrics were reported for M140; there was no actual
    regression. Details can be found at crbug.com/450560777 and
    crrev.com/c/7041925.
  </summary>
</histogram>

<histogram name="Memory.RendererProcessCount2" units="processes"
    expires_after="2027-02-07">
  <owner>creis@chromium.org</owner>
  <owner>nasko@chromium.org</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.Count2.* instead.
  </summary>
</histogram>

<histogram name="Memory.RenderProcessHost.Count2.All" units="processes"
    expires_after="2027-01-03">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <owner>nasko@chromium.org</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.Count2.InitializedAndNotDead"
    units="processes" expires_after="2026-12-27">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <owner>nasko@chromium.org</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.Count2.OriginAgentClusterOverhead"
    units="processes" expires_after="2026-08-09">
  <owner>wjmaclean@chromium.org</owner>
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</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.Count2.SandboxedIframeOverhead"
    units="processes" expires_after="2026-08-09">
  <owner>wjmaclean@chromium.org</owner>
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</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="2026-06-28">
  <owner>wjmaclean@chromium.org</owner>
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</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.Count2.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.RunningOrSelfCompact.Renderer.Cancellation.Reason"
    enum="SelfCompactionCancellationReason" expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</owner>
  <summary>
    The reason that self-compaction or running-compaction was cancelled.
    Recorded once each time compaction is cancelled while running. This metric
    is used for both self-compaction and running-compaction.
  </summary>
</histogram>

<histogram name="Memory.StackSamplingProfiler.StackSampleSize2" units="KB"
    expires_after="2027-01-03">
  <owner>iby@chromium.org</owner>
  <owner>chromeos-data-eng@google.com</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.System.MemAvailableMB" units="MB"
    expires_after="2027-01-17">
  <owner>hidehiko@chromium.org</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="2027-02-07">
  <owner>hidehiko@chromium.org</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.SystemMemoryLists.QueryFailureStatus" enum="NTSTATUS"
    expires_after="2027-01-24">
  <owner>spvm@google.com</owner>
  <owner>etienneb@google.com</owner>
  <summary>
    Recorded on Windows only. The status if unsuccessful of querying for the
    size of system memory lists. If Recorded at-most once per startup 100ms
    after browser message loop starts, and only if we never record
    Memory.SystemMemoryLists.ExhaustedIntervalsPerThirtySeconds because of the
    failed query.
  </summary>
</histogram>

<histogram
    name="Memory.SystemMemoryLists.StandbyPageCountByPriority.{Priority}"
    units="pages" expires_after="2027-02-07">
  <owner>spvm@google.com</owner>
  <owner>etienneb@google.com</owner>
  <summary>
    The size of the system memory list of the standby list at priority
    {Priority}. Recorded on Windows only. Recorded every 30s, after browser main
    message loop start.
  </summary>
  <token key="Priority">
    <variant name="1" summary="Pri-1"/>
    <variant name="2" summary="Pri-2"/>
    <variant name="3" summary="Pri-3"/>
    <variant name="4" summary="Pri-4"/>
    <variant name="5" summary="Pri-5"/>
    <variant name="6" summary="Pri-6"/>
    <variant name="7" summary="Pri-7"/>
    <variant name="8" summary="Pri-8"/>
  </token>
</histogram>

<histogram name="Memory.SystemMemoryLists.TotalIntervalsRecorded"
    units="intervals" expires_after="2027-01-17">
  <owner>spvm@google.com</owner>
  <owner>etienneb@google.com</owner>
  <summary>
    Recorded on Windows only. The SystemMemoryPressureEvaluator attempts to
    query the size of the system memory lists 300 times per 30 seconds. This
    metric records the actual number of times the lists were queried per thirty
    seconds, in the case that due to contention, the evaluator is unable to run.
    Recorded every 30s after browser main message loop start.
  </summary>
</histogram>

<histogram
    name="Memory.SystemMemoryLists.{Level}IntervalsPerThirtySeconds.{PageList}"
    units="intervals" expires_after="2027-02-07">
  <owner>spvm@google.com</owner>
  <owner>etienneb@google.com</owner>
  <summary>
    Recorded on Windows only. Every 100ms, the size of the system memory lists
    are queried (and if this query fails, the entire process is cancelled and
    Memory.SystemMemoryLists.QueryFailureStatus is recorded instead). This
    metric is the total number of consecutive queries over the course of 30s (at
    least two in a row to qualify, but several runs can occur disjointedly) that
    returned that {PageList} had {Level} pages. Emitted every 30s in the browser
    process after main message loop start.
  </summary>
  <token key="PageList">
    <variant name="AllLists"
        summary="pages in the zero, free, and standby lists"/>
    <variant name="FreeList" summary="free pages"/>
    <variant name="StandbyList" summary="standby pages"/>
    <variant name="ZeroList" summary="zero pages"/>
  </token>
  <token key="Level">
    <variant name="Exhausted" summary="zero"/>
    <variant name="Low" summary="less than 2MiB of"/>
  </token>
</histogram>

<histogram name="Memory.SystemMemoryLists.{PageCount}Count" units="pages"
    expires_after="2027-02-07">
  <owner>spvm@google.com</owner>
  <owner>etienneb@google.com</owner>
  <summary>
    The size of the system memory list of {PageCount}. Recorded on Windows only.
    Recorded every 30s, after browser main message loop start.
  </summary>
  <token key="PageCount">
    <variant name="FreePage" summary="free pages"/>
    <variant name="ModifiedPage" summary="modified pages"/>
    <variant name="StandbyPage" summary="total pages in the standby cache"/>
    <variant name="ZeroPage" summary="zero pages"/>
  </token>
</histogram>

<histogram name="Memory.Total.GpuMappedMemory" units="MB"
    expires_after="2026-07-26">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@chromium.org</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="2026-11-29">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@chromium.org</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="2026-05-24">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@chromium.org</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>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</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="2027-01-31">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</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="2027-02-07">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</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.PrivateSwapFootprint" units="MB"
    expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    An amount of private memory of all processes placed in swap (VmSwap).
    Available on Android only.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes.
  </summary>
</histogram>

<histogram name="Memory.Total.RendererBlinkGC" units="MB"
    expires_after="2027-02-07">
  <owner>fdoray@chromium.org</owner>
  <owner>lizeb@chromium.org</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="2027-02-07">
  <owner>fdoray@chromium.org</owner>
  <owner>lizeb@chromium.org</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>keishi@chromium.org</owner>
  <owner>kdlee@chromium.org</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="2027-02-07">
  <owner>tommckee@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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="2027-02-07">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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="2027-02-07">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <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.RendererPrivateSwapFootprint" units="MB"
    expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    An amount of private memory of all renderer processes placed in swap
    (VmSwap). Available on Android only.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes.
  </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>fdoray@chromium.org</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="2026-12-27">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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.

    Note #1: Incorrect metrics were reported for M140; there was no actual
    regression. Details can be found at crbug.com/450560777 and
    crrev.com/c/7041925.
  </summary>
</histogram>

<histogram name="Memory.Total.SystemCommitLimit" units="GB"
    expires_after="2023-05-07">
  <owner>zmo@chromium.org</owner>
  <owner>chrome-gpu-metric-alerts@chromium.org</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="2027-01-31">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-gpu-memory@google.com</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.Utility.MappingsCount" units="count"
    expires_after="2025-06-22">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    How many memory mappings are present in the process, at the time of
    recording.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms, only on Linux-based systems.
  </summary>
</histogram>

<histogram name="Memory.VMMMS.{ClientName}.DecisionLatency" units="ms"
    expires_after="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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="2026-09-07">
  <owner>kalutes@google.com</owner>
  <owner>cwd@google.com</owner>
  <owner>cros-vm-technology@google.com</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-08-24">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-11-02">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-06-22">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-06-22">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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="2025-02-10">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-06-22">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-06-22">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-06-22">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-06-22">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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-08-24">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</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.{1pNtpState}1pNtpRenderer.PrivateMemoryFootprint"
    units="MB" expires_after="2027-07-01">
  <owner>acondor@google.com</owner>
  <owner>clank-performance-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The private memory footprint of a renderer process hosting {1pNtpState}.
    Recorded during periodic process memory dumps.
  </summary>
  <token key="1pNtpState">
    <variant name="Non" summary="a non-1P NTP"/>
    <variant name="NonVisible" summary="a non-visible 1P NTP"/>
    <variant name="Visible" summary="a visible 1P NTP"/>
  </token>
</histogram>

<histogram name="Memory.{Process}.PrivateMemoryFootprint.1pNtp{1pNtpState}"
    units="MB" expires_after="2027-07-01">
  <owner>acondor@google.com</owner>
  <owner>clank-performance-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The private memory footprint of the {Process} when {1pNtpState}. Recorded
    during periodic process memory dumps.
  </summary>
  <token key="Process">
    <variant name="Browser" summary="browser process"/>
    <variant name="Total" summary="total across all processes"/>
  </token>
  <token key="1pNtpState">
    <variant name="NonVisible"
        summary="1P NTPs are open, but they are all non-visible"/>
    <variant name="NotPresent" summary="no 1P NTPs are open"/>
    <variant name="Visible" summary="at least one 1P NTP is visible"/>
  </token>
</histogram>

<histogram name="Memory.{Type}.Renderer.AreAllPagesFrozen"
    enum="BooleanAreAllPagesFrozen" expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</owner>
  <summary>
    Whether all pages in the renderer are frozen. Recorded right before we begin
    self-compaction.
  </summary>
  <token key="Type" variants="CompactionType"/>
</histogram>

<histogram name="Memory.{Type}.Renderer.ReadProcMaps"
    enum="PreFreezeReadProcMapsType" expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</owner>
  <summary>
    Whether we were able to read /proc/self/maps successfully. If
    self-compaction is not enabled, this will always record as success. Recorded
    right before we begin self-compaction.
  </summary>
  <token key="Type" variants="CompactionType"/>
</histogram>

<histogram name="Memory.{Type}.Renderer.SelfCompactionTime" units="ms"
    expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</owner>
  <summary>
    How long self-compaction took. Recorded after self-compaction has finished.
  </summary>
  <token key="Type" variants="CompactionType"/>
</histogram>

<histogram name="Memory.{Type}.Renderer.TimeSinceLastCancel" units="ms"
    expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</owner>
  <summary>
    Time since the last time we cancelled self-compaction. Recorded after we
    finish self compaction.
  </summary>
  <token key="Type" variants="CompactionType"/>
</histogram>

<histogram name="Memory.{Type}.Renderer.{Metric}.Diff.{Timing}.{Direction}"
    units="MiB" expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</owner>
  <summary>
    The difference in the chosen metric, taken from /proc/self/smaps_rollup at
    the two specified times. &quot;Increase&quot; metrics are recorded when the
    latter snapshot is higher, &quot;Decrease&quot; metrics when the latter
    snapshot is lower. Either a metric is recorded for all variants, or no
    metric is recorded.
  </summary>
  <token key="Type" variants="CompactionType"/>
  <token key="Metric" variants="SmapsMetric"/>
  <token key="Timing" variants="RecordedDelayDiff"/>
  <token key="Direction" variants="DiffDirection"/>
</histogram>

<histogram name="Memory.{Type}.Renderer.{Metric}.{Timing}" units="MiB"
    expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@google.com</owner>
  <summary>
    The amount of memory used, taken from /proc/self/smaps_rollup. Recorded
    directly before self-compaction, directly after, and after the specified
    delays. Either a metric is recorded for all variants, or no metric is.
  </summary>
  <token key="Type" variants="CompactionType"/>
  <token key="Metric" variants="SmapsMetric"/>
  <token key="Timing" variants="RecordedDelay"/>
</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>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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-08-24">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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>fdoray@chromium.org</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="2027-02-07">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</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 #1: Histogram data may be missing between M77 to M87 due to expiry.

    Note #2: Incorrect metrics were reported for M140; there was no actual
    regression. Details can be found at crbug.com/450560777 and
    crrev.com/c/7041925.
  </summary>
  <token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>

<histogram name="MemoryAndroid.LowRamDevice" enum="Boolean"
    expires_after="never">
<!-- expires-never: used internally for filtering -->

  <owner>ssid@chromium.org</owner>
  <owner>chrome-metrics-team@google.com</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>

<histogram name="Memory{ProfiledProcess}.Pss2" units="MiB"
    expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <summary>
    PSS metric for the process. Recorded on Android, Linux, and ChromeOS only.
    The value &quot;0&quot; is expected on kernels that don't support
    /proc/self/smaps_rollup.
  </summary>
  <token key="ProfiledProcess" variants="ProfiledProcess"/>
</histogram>

<histogram name="Memory{ProfiledProcess}.SwapPss2" units="MiB"
    expires_after="2027-06-21">
  <owner>thiabaud@google.com</owner>
  <summary>
    Swap PSS metric for the process. Recorded on Android, Linux, and ChromeOS
    only.
  </summary>
  <token key="ProfiledProcess" variants="ProfiledProcess"/>
</histogram>

</histograms>

</histogram-configuration>
