Source code
Revision control
Copy as Markdown
Other Tools
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# Profiling categories
# ====================
# This file defines all profiling categories with their sub-categories. It is
# parsed by generate_profiling_categories.py at build time to create
# ProfilingCategoryList.h and profiling_categories.rs files.
#
# Profiling sub-categories are applied to each sampled stack to describe the
# type of workload that the CPU is busy with. Only one sub-category can be
# assigned so be mindful that these are non-overlapping. The active category is
# set by pushing a label to the profiling stack, or by the unwinder in cases
# such as JITs. A profile sample in arbitrary C++/Rust will typically be
# categorized based on the top of the label stack.
#
# Each category consists of a name and a set of attributes that are described below:
#
# name [required]
# ====
# Name of the profiling category. This will be used in the C++ enum fields (not
# by Rust).
#
# label [required]
# =====
# Label of the profiling category. This a more human readable string for the
# category. Label will be displayed in the Firefox Profiler front-end. But also
# this will be used as a Rust enum field (with non-alphanumeric characters
# removed) because it's more idiomatic for Rust enums than name fields (which
# are snake cased fields with all caps, which is not idiomatic to rust enum
# field).
#
# color [required]
# =====
# Color that this category will show up as in the Firefox Profiler front-end.
# The list of available color names for categories is:
# - transparent
# - blue
# - green
# - grey
# - lightblue
# - magenta
# - orange
# - purple
# - yellow
#
# subcategories [required]
# =============
# A list of sub-categories that belong to this category.
# There must be at least one sub-category for each category and there must be at
# least one category with the same name as the category to indicate the default
# sub-category. Each sub-category must have name and label attributes.
#
# name attribute should either be the same as the category (for default
# sub-category) or should start with parent category name + underscore
# (e.g. JS_Parsing).
#
# label attribute has the same purpose as parent category label attribute.
#
# For example:
# - name: JS
# subcategories:
# - name: JS
# label: Other
# - name: JS_Parsing
# label: Parsing
#
# Note that the first sub-category has the same name with the category. This is
# the default sub-category. Also note the other sub-categories starting with the
# category name + underscore.
#
- name: IDLE
label: Idle
color: transparent
subcategories:
- name: IDLE
label: Other
- name: OTHER
label: Other
color: grey
subcategories:
- name: OTHER
label: Other
- name: OTHER_PreferenceRead
label: Preference Read
- name: OTHER_Profiling
label: Profiling
- name: TEST
label: Test
color: darkgray
subcategories:
- name: TEST
label: Test
- name: LAYOUT
label: Layout
color: purple
subcategories:
- name: LAYOUT
label: Other
- name: LAYOUT_FrameConstruction
label: Frame construction
- name: LAYOUT_Reflow
label: Reflow
- name: LAYOUT_CSSParsing
label: CSS parsing
- name: LAYOUT_SelectorQuery
label: Selector query
- name: LAYOUT_StyleComputation
label: Style computation
- name: LAYOUT_Destroy
label: Layout cleanup
- name: LAYOUT_Printing
label: Printing
- name: JS
label: JavaScript
color: yellow
subcategories:
- name: JS
label: Other
- name: JS_Parsing
label: Parsing
- name: JS_BaselineCompilation
label: JIT Compile (baseline)
- name: JS_IonCompilation
label: JIT Compile (ion)
- name: JS_Interpreter
label: Interpreter
- name: JS_BaselineInterpret
label: JIT (baseline-interpreter)
- name: JS_Baseline
label: JIT (baseline)
- name: JS_IonMonkey
label: JIT (ion)
- name: JS_Builtin
label: Builtin API
- name: JS_WasmIon
label: Wasm (ion)
- name: JS_WasmBaseline
label: Wasm (baseline)
- name: JS_WasmOther
label: Wasm (other)
- name: GCCC
label: GC / CC
color: orange
subcategories:
- name: GCCC
label: Other
- name: GCCC_MinorGC
label: Minor GC
- name: GCCC_MajorGC
label: Major GC (Other)
- name: GCCC_MajorGC_Mark
label: Major GC (Mark)
- name: GCCC_MajorGC_Sweep
label: Major GC (Sweep)
- name: GCCC_MajorGC_Compact
label: Major GC (Compact)
- name: GCCC_UnmarkGray
label: Unmark Gray
- name: GCCC_Barrier
label: Barrier
- name: GCCC_FreeSnowWhite
label: CC (Free Snow White)
- name: GCCC_BuildGraph
label: CC (Build Graph)
- name: GCCC_ScanRoots
label: CC (Scan Roots)
- name: GCCC_CollectWhite
label: CC (Collect White)
- name: GCCC_Finalize
label: CC (Finalize)
- name: NETWORK
label: Network
color: lightblue
subcategories:
- name: NETWORK
label: Other
- name: GRAPHICS
label: Graphics
color: green
subcategories:
- name: GRAPHICS
label: Other
- name: GRAPHICS_DisplayListBuilding
label: DisplayList building
- name: GRAPHICS_DisplayListMerging
label: DisplayList merging
- name: GRAPHICS_LayerBuilding
label: Layer building
- name: GRAPHICS_TileAllocation
label: Tile allocation
- name: GRAPHICS_WRDisplayList
label: WebRender display list
- name: GRAPHICS_Rasterization
label: Rasterization
- name: GRAPHICS_FlushingAsyncPaints
label: Flushing async paints
- name: GRAPHICS_ImageDecoding
label: Image decoding
- name: DOM
label: DOM
color: blue
subcategories:
- name: DOM
label: Other
- name: JAVA_ANDROID
label: Android
color: yellow
subcategories:
- name: JAVA_ANDROID
label: Other
- name: JAVA_ANDROIDX
label: AndroidX
color: orange
subcategories:
- name: JAVA_ANDROIDX
label: Other
- name: JAVA_LANGUAGE
label: Java
color: blue
subcategories:
- name: JAVA_LANGUAGE
label: Other
- name: JAVA_MOZILLA
label: Mozilla
color: green
subcategories:
- name: JAVA_MOZILLA
label: Other
- name: JAVA_KOTLIN
label: Kotlin
color: purple
subcategories:
- name: JAVA_KOTLIN
label: Other
- name: JAVA_BLOCKED
label: Blocked
color: lightblue
subcategories:
- name: JAVA_BLOCKED
label: Other
- name: IPC
label: IPC
color: lightgreen
subcategories:
- name: IPC
label: Other
- name: MEDIA
label: Media
color: orange
subcategories:
- name: MEDIA
label: Other
- name: MEDIA_CUBEB
label: Cubeb
- name: MEDIA_PLAYBACK
label: Playback
- name: MEDIA_RT
label: Real-time rendering
# We don't name this category ACCESSIBILITY
# because it's already defined as a macro.
- name: A11Y
label: Accessibility
color: brown
subcategories:
- name: A11Y
label: Other
- name: PROFILER
label: Profiler
color: lightred
subcategories:
- name: PROFILER
label: Other
- name: TIMER
label: Timer
color: grey
subcategories:
- name: TIMER
label: Other
- name: REMOTE_PROTOCOL
label: Remote-Protocol
color: grey
subcategories:
- name: REMOTE_PROTOCOL
label: Other
- name: SANDBOX
label: Sandbox
color: grey
subcategories:
- name: SANDBOX
label: Other