“main” Ping¶
这是“main” 遥测 Ping 类型,其有效负载包含用于跟踪 Firefox 在野性能和健康状况的大多数测量数据。它包括直方图以及其他性能和诊断数据。
此 Ping 可能由于 reason
字段记录的多种原因之一而触发
aborted-session
- 此 Ping 定期保存到磁盘(每 5 分钟),覆盖自身,并在关闭时删除。如果在启动时找到先前的 aborted-session Ping,则将其发送到服务器。第一个 aborted-session Ping 在遥测启动后立即生成environment-change
- 环境 已更改,因此会话测量已重置,并启动了一个新的子会话shutdown
- 浏览器会话结束时触发。对于第一个浏览会话,此 Ping 会保存到磁盘并在下一个浏览器重新启动时发送。从第二个浏览会话开始,此 Ping 会在关闭时立即使用 Ping 发送器 发送,除非操作系统正在关闭daily
- 在本地午夜以 24 小时间隔触发的会话拆分。如果在应发送时通过environment-change
Ping 生成,则 daily Ping 将重新安排到下一个午夜saved-session
- 涵盖整个浏览器会话的测量的“经典” 遥测有效负载(仅在 Android 上提交)
大多数原因会导致会话拆分,从而启动一个新的子会话。我们为这些子会话重置重要的测量数据。
在新的子会话拆分之后,internal-telemetry-after-subsession-split
主题会通知所有观察者。这是一个内部主题,仅供内部遥测使用。
注意
saved-session
使用不同的 Ping 类型(saved-session
,而不是 main
)发送,但在其他方面与此处讨论的格式相同。从 Firefox 61 开始,这仅在 Android 上发送。
结构
{
version: 4,
info: {
reason: <string>, // what triggered this ping: "saved-session", "environment-change", "shutdown", ...
revision: <string>, // the Histograms.json revision
timezoneOffset: <integer>, // time-zone offset from UTC, in minutes, for the current locale
previousBuildId: <string>, // null if this is the first run, or the previous build ID is unknown
sessionId: <uuid>, // random session id, shared by subsessions
subsessionId: <uuid>, // random subsession id
previousSessionId: <uuid>, // session id of the previous session, null on first run.
previousSubsessionId: <uuid>, // subsession id of the previous subsession (even if it was in a different session),
// null on first run.
subsessionCounter: <unsigned integer>, // the running no. of this subsession since the start of the browser session
profileSubsessionCounter: <unsigned integer>, // the running no. of all subsessions for the whole profile life time
sessionStartDate: <ISO date>, // hourly precision, ISO date in local time
subsessionStartDate: <ISO date>, // hourly precision, ISO date in local time
sessionLength: <integer>, // the session length until now in seconds, monotonic
subsessionLength: <integer>, // the subsession length in seconds, monotonic
addons: <string>, // obsolete, use ``environment.addons``
},
processes: {...},
simpleMeasurements: {...},
// The following properties may all be null if we fail to collect them.
histograms: {...},
keyedHistograms: {...},
chromeHangs: {...}, // removed in firefox 62
threadHangStats: [...], // obsolete in firefox 57, use the 'bhr' ping
log: [...], // obsolete in firefox 61, use Event Telemetry or Scalars
gc: {...},
fileIOReports: {...},
lateWrites: {...},
addonDetails: {...},
UIMeasurements: [...], // Android only
slowSQL: {...},
slowSQLstartup: {...},
}
info¶
sessionLength¶
到目前为止,当前会话的长度(以秒为单位)。这使用单调时钟,因此这可能与其他非单调测量不匹配,例如基于 Date.now()
的计算。
请注意,这目前在我们的支持平台上并不始终如一
在 Windows 上,这使用
GetTickCount64()
,它确实在睡眠期间增加在 macOS 上,这使用
mach_absolute_time()
,它在睡眠期间不会增加在 POSIX/Linux 上,这使用
clock_gettime(CLOCK_MONOTONIC, &ts)
,它不应该在睡眠期间增加
有关详细信息,请参阅 bug 1204823。
subsessionLength¶
此子会话的长度(以秒为单位)。这使用单调时钟,因此这可能与其他非单调测量不匹配(例如,基于 Date.now()
)。
另请参阅关于平台一致性的 sessionLength
的说明。
processes¶
此部分包含每个进程的数据。
结构
"processes" : {
// ... other processes ...
"parent": {
scalars: {...},
keyedScalars: {...},
// parent process histograms and keyedHistograms are in main payload
},
"content": {
scalars: {...},
keyedScalars: {...},
histograms: {...},
keyedHistograms: {...},
},
"gpu": {
// ...
}
}
histograms 和 keyedHistograms¶
此部分包含在内容进程上累积的直方图和键控直方图。在内容子进程上记录的直方图与父直方图具有不同的特征。例如,GC_MS
在 processes.content
中会有很大不同,因为它必须与 Web 内容竞争,而 payload.histograms
中的实例只需要与浏览器 JS 竞争。此外,如果从未在内容子进程上记录某些直方图,则它们可能不存在(EVENTLOOP_UI_ACTIVITY
仅限父进程)。
此格式通过 bug 1218576 在 Firefox 51 中采用。
scalars 和 keyedScalars¶
此部分包含对当前平台有效的 标量。仅当向标量添加数据时才提交标量,并且仅在子会话 Ping 中报告。记录的标量在 Scalars.yaml 文件中进行了描述。info.revision
字段指示描述已报告标量文件的修订版。
simpleMeasurements¶
此部分包含简单测量或计数器的列表。除了下面突出显示的测量或计数器之外,还可以报告遥测时间戳(请参阅 此处 和 此处)。
totalTime¶
表示会话已运行的秒数的非单调整数。
addonManager¶
仅在扩展的测量集中可用,它包含一组与附加组件相关的计数器。有关记录的测量的列表,请参阅 此处。
UITelemetry¶
从 Firefox 61 开始,此部分不再存在。
仅在扩展的测量集中可用。有关更多信息,请参阅 UITelemetry 数据格式(已过时)。
js¶
此部分包含来自 JavaScript 引擎的一系列计数器。
结构
"js" : {
// ...
}
从 Firefox 59 开始,此部分不再包含任何条目,从 Firefox 61 开始,此部分已删除。
maximalNumberOfConcurrentThreads¶
表示在会话期间迄今为止遇到的线程数最多的整数。
startupSessionRestoreReadBytes¶
仅限 Windows 的整数,表示主进程读取的字节数,直到会话存储已完成窗口的恢复。
startupSessionRestoreWriteBytes¶
仅限 Windows 的整数,表示主进程写入的字节数,直到会话存储已完成窗口的恢复。
startupWindowVisibleReadBytes¶
仅限 Windows 的整数,表示主进程读取的字节数,直到 XUL 窗口可见之后。
startupWindowVisibleWriteBytes¶
仅限 Windows 的整数,表示主进程写入的字节数,直到 XUL 窗口可见之后。
debuggerAttached¶
如果调试器附加到主进程,则此布尔值设置为 true。
shutdownDuration¶
完成上次关闭所需的时间(以毫秒为单位)。
failedProfileLockCount¶
系统无法锁定用户配置文件的次数。
activeTicks¶
用户被视为“活跃”(向窗口发送 UI 事件)的五秒钟间隔(“刻度”)的整数计数。在用户在不活跃后变得活跃时,会立即触发一个额外的事件。这适用于某些鼠标和游戏手柄事件,以及所有触摸、键盘、滚轮和指针事件(请参阅 EventStateManager.cpp)。此测量可能有助于提供用户实际与浏览器交互的趋势,与整体会话持续时间相比。它不考虑窗口是否具有焦点或是否位于前台。只是它是否正在接收这些交互事件。请注意,在 main
Ping 中,此测量会在子会话拆分时重置,而在 saved-session
Ping 中,它涵盖整个浏览器会话。
histograms¶
本节包含当前平台有效的直方图。 Flag
直方图始终创建并提交,默认值为 false
,除非在该时间段内记录了 true
的值。如果未向其他类型的直方图(请参阅 选择直方图类型)添加任何数据,则不会创建或提交这些直方图。报告的直方图的类型和格式由 Histograms.json
文件描述。其最新版本可 在此处 获取。 info.revision
字段指示描述报告直方图的文件的修订版本。
keyedHistograms¶
本节包含当前平台可用的键控直方图。
从 Firefox 48 开始,本节不再包含空键控直方图。
threadHangStats¶
从 Firefox 57 开始,本节不再存在,已被 bhr ping 替换。
包含主线程和后台线程中挂起统计信息。请注意,本节中的挂起捕获 标签栈 和不完整的 JS 栈,其精度并非 100%。对于特别严重的挂起,以及在 nightly 版本中,还会捕获未符号化的原生栈。被视为“严重”的时间量因线程而异,并在为该线程构造 BackgroundHangMonitor 时设置。不过,通常情况下,5-10 秒的挂起通常被视为严重。对于其他线程(合成器线程和仅在标签切换期间启用的挂起监视器),较短的挂起(1-2 秒)被视为严重。
为了避免提交过大的有效负载,会应用一些限制。
相同的相邻“(chrome script)”或“(content script)”栈条目将合并在一起。如果栈被缩减,则“(reduced stack)”帧标记将被添加为最旧的帧。
报告的标签栈深度限制为 11 个条目。此值表示遥测报告的线程挂起栈深度的第 99.9 个百分位数。
原生栈的深度限制为 25 个栈帧。
结构
"threadHangStats" : [
{
"name" : "Gecko",
"activity" : {...}, // a time histogram of all task run times
"nativeStacks": { // captured for all hangs on nightly, or egregious hangs on beta
"memoryMap": [
["wgdi32.pdb", "08A541B5942242BDB4AEABD8C87E4CFF2"],
["igd10iumd32.pdb", "D36DEBF2E78149B5BE1856B772F1C3991"],
// ... other entries in the format ["module name", "breakpad identifier"] ...
],
"stacks": [
[
[
0, // the module index or -1 for invalid module indices
190649 // the offset of this program counter in its module or an absolute pc
],
[1, 2540075],
// ... other frames ...
],
// ... other stacks ...
]
},
"hangs" : [
{
"stack" : [
"Startup::XRE_Main",
"Timer::Fire",
"(content script)",
"IPDL::PPluginScriptableObject::SendGetChildProperty",
... up to 11 frames ...
],
"nativeStack": 0, // index into nativeStacks.stacks array
"histogram" : {...}, // the time histogram of the hang times
"annotations" : [
{
"pluginName" : "Shockwave Flash",
"pluginVersion" : "18.0.0.209"
},
... other annotations ...
]
},
],
},
... other threads ...
]
chromeHangs¶
从 Firefox 62 开始,chromeHangs 已被移除。请查看 bhr ping 以获取类似的功能。
包含仅发生在父进程主线程上的挂起统计信息。报告精确的 C++ 栈。这仅在 Windows 上的 Nightly 版本中可用,当使用“–enable-profiling”开关构建时。
应用了一些限制。
报告的 chrome 挂起栈的深度限制为 50 个条目。
报告的栈的最大数量为 50 个。
模块名称可以包含 Unicode 字符。
结构
"chromeHangs" : {
"memoryMap" : [
["wgdi32.pdb", "08A541B5942242BDB4AEABD8C87E4CFF2"],
["igd10iumd32.pdb", "D36DEBF2E78149B5BE1856B772F1C3991"],
... other entries in the format ["module name", "breakpad identifier"] ...
],
"stacks" : [
[
[
0, // the module index or -1 for invalid module indices
190649 // the offset of this program counter in its module or an absolute pc
],
[1, 2540075],
... other frames, up to 50 ...
],
... other stacks, up to 50 ...
],
"durations" : [8, ...], // the hang durations (in seconds)
"systemUptime" : [692, ...], // the system uptime (in minutes) at the time of the hang
"firefoxUptime" : [672, ...], // the Firefox uptime (in minutes) at the time of the hang
"annotations" : [
[
[0, ...], // the indices of the related hangs
{
"pluginName" : "Shockwave Flash",
"pluginVersion" : "18.0.0.209",
... other annotations as key:value pairs ...
}
],
...
]
},
log¶
从 Firefox 61 开始,本节不再存在,请使用 事件 或 标量。
本节包含通过遥测报告的重要或异常事件的日志。
结构
"log": [
[
"Event_ID",
3785, // the timestamp (in milliseconds) for the log entry
... other data ...
],
...
]
目前,已知此节的一个用户是:遥测实验。
遥测实验使用它来记录实验何时启动和终止。
fileIOReports¶
包含执行期间记录的主线程 I/O 统计信息。目前仅报告 XRE 和配置文件目录的 I/O 统计信息,两者均未公开完整的本地路径。
结构
"fileIOReports": {
"{xre}": [
totalTime, // Accumulated duration of all operations
creates, // Number of create/open operations
reads, // Number of read operations
writes, // Number of write operations
fsyncs, // Number of fsync operations
stats, // Number of stat operations
],
"{profile}": [ ... ],
...
}
lateWrites¶
本节报告在关闭期间发生的写入文件系统操作。报告的数据包含写入发生时加载的库的栈和文件名。
加载的库的文件名可以包含 Unicode 字符。
结构
"lateWrites" : {
"memoryMap" : [
["wgdi32.pdb", "08A541B5942242BDB4AEABD8C87E4CFF2"],
... other entries in the format ["module name", "breakpad identifier"] ...
],
"stacks" : [
[
[
0, // the module index or -1 for invalid module indices
190649 // the offset of this program counter in its module or an absolute pc
],
[1, 2540075],
... other frames ...
],
... other stacks ...
],
},
addonDetails¶
本节包含每个附加组件提供者报告的每个附加组件的遥测详细信息。在撰写本文时,XPI 提供者是唯一报告的提供者(请参阅 Searchfox)。遥测不会操纵或强制执行提供的提供者数据的特定格式。
结构
"addonDetails": {
"XPI": {
"[email protected]": {
"location": "app-profile",
"name": "ADB Helper",
"creator": "Mozilla & Android Open Source Project",
},
...
},
...
}
slowSQL¶
本节包含主线程和其他线程的慢速 SQL 查询信息。如果 SQL 语句的执行在主线程上花费 50 毫秒或更长时间,或者在其他线程上花费 100 毫秒或更长时间,则认为该语句执行缓慢。慢速 SQL 语句将自动截断为 1000 个字符。此限制不包括在存储的语句末尾附加的省略号和数据库名称。
结构
"slowSQL": {
"mainThread": {
"Sanitized SQL Statement": [
1, // the number of times this statement was hit
200 // the total time (in milliseconds) that was spent on this statement
],
...
},
"otherThreads": {
"VACUUM /* places.sqlite */": [
1,
330
],
...
}
},
slowSQLStartup¶
本节包含启动时收集的慢速 SQL 语句(直到“sessionstore-windows-restored”事件触发)。本节的结构类似于 slowSQL 的结构。
UIMeasurements¶
本节仅适用于 Android,包含特定于 UI 的遥测度量和事件(请参阅此处)。
结构
"UIMeasurements": [
{
"type": "event", // either "session" or "event"
"action": "action.1",
"method": "menu",
"sessions": [],
"timestamp": 12345,
"extras": "settings"
},
{
"type": "session",
"name": "awesomescreen.1",
"reason": "commit",
"start": 123,
"end": 456
}
...
],
版本历史¶
Firefox 88
由于 Flash 不再受支持,因此停止报告
flashVersion
。(bug 1682030)
Firefox 61
停止报告
childPayloads
(bug 1443599)。停止在 Firefox 桌面版上报告
saved-session
ping (bug 1443603)。停止报告
simpleMeasurements.js
(bug 1278920)。停止报告
UITelemetry
(bug 1443605)。
Firefox 62
events
现在通过 “event” ping 报告 (bug 1460595)。
Firefox 80
停止报告
GCTelemetry
(bug 1482089)。