This file documents all changes in the profiler gecko and processed formats.
Note that this is not an exhaustive list. Processed profile format upgraders can be found in processed-profile-versioning.js and gecko profile format upgraders can be found in gecko-profile-versioning.js. Please refer to them for older upgraders or for exact implementations.
Two new marker schema field format types have been added: flow-id
and terminating-flow-id
, with string index values (like unique-string
).
An optional isStackBased
boolean field has been added to the marker schema.
The serialized format can now optionally store sample and counter sample times as time deltas instead of absolute timestamps to reduce the JSON size. The unserialized version is unchanged.
A new sanitized-string
marker schema format type has been added, allowing markers to carry arbitrary strings containing PII that will be sanitized along with URLs and FilePaths.
Removed the 'sampleGroups' object from the Counter structure.
The pid
field of the Thread
type is changed from string | number
to string
. The same happened to the data.otherPid
field of IPC markers, and to the pid fields in the profiler.counters
and profile.profilerOverhead
lists.
An isMainThread
field was added to the Thread type.
This replaces the following function:
export function isMainThread(thread: Thread): boolean {
return (
thread.name === 'GeckoMain' ||
// If the pid is a string, then it's not one that came from the system.
// These threads should all be treated as main threads.
typeof thread.pid === 'string' ||
// On Linux the tid of the main thread is the pid. This is useful for
// profiles imported from the Linux 'perf' tool.
String(thread.pid) === thread.tid
);
}
The optimizations
field is removed from the frameTable
.
The searchable
property is implemented in the marker schema. Previously all the name
and category
marker schema properties were automatically searchable and we had manual handling for FileIO
, Log
, DOMEvent
, TraceEvent
marker types.
The number
property in counters is now optional.
The nativeSymbols
table now has a new column: functionSize
. Its values can be null.
The libs
list has moved from Thread
to Profile
- it is now shared between all threads in the profile. And it only contains libs which are used by at least one resource.
The Lib fields have changed, too:
- The
start
/end
/offset
fields are gone: They are not needed after profile processing, when all frame addresses have been made library-relative; and these values usually differ in the different processes, so the fields could not have a meaningful value in the shared list. - There is a
codeId
field which defaults tonull
. This will be used in the future to store another ID which lets the symbol server look up correct binary. On Windows this is the dll / exe CodeId, and on Linux and Android this is the full ELF build ID.
We've also cleaned up the ResourceTable format:
- All resources now have names.
- Resources without a
host
orlib
field have these fields set tonull
consistently.
Older versions are not documented in this changelog but can be found in processed-profile-versioning.js.
Two new marker schema field format types have been added: flow-id
and terminating-flow-id
, with string index values (like unique-string
).
An optional isStackBased
boolean field has been added to the marker schema.
A new sanitized-string
marker schema format type has been added, allowing markers to carry arbitrary strings containing PII that will be sanitized along with URLs and FilePaths.
Removed the 'sample_groups' object from the GeckoCounter structure.
A new unique-string
marker schema format type has been added, allowing markers to carry unique-strings in their payloads.
The optimizations
field is removed from the frameTable
schema.
The searchable
property is implemented in the marker schema. Previously all the name
and category
marker schema properties were automatically searchable and we had manual handling for FileIO
, Log
, DOMEvent
, TraceEvent
marker types.
Older versions are not documented in this changelog but can be found in gecko-profile-versioning.js.