Skip to content
Closed
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
e6842c8
add changelog item.
breedx-splk Apr 8, 2025
363586f
add jank event and associated attributes.
breedx-splk Apr 21, 2025
ec5e9ce
set PR num
breedx-splk Apr 21, 2025
b595d48
update after rebase and fix slow->frozen from review comments
breedx-splk May 5, 2025
d4a0d6f
redo tooling post rebase
breedx-splk May 5, 2025
0e2ac95
regen toc
breedx-splk May 5, 2025
1cdcb8a
fix attr def
breedx-splk May 5, 2025
6d596b5
remove changelog item from the before times
breedx-splk May 5, 2025
a13d954
remove requirement level from registry
breedx-splk May 6, 2025
459ba52
rebase
breedx-splk May 22, 2025
d3787ee
remove activity name
breedx-splk May 22, 2025
aecd2ad
remove activity name
breedx-splk May 22, 2025
9226be0
lint yaml
breedx-splk May 22, 2025
cf8a17d
[chore] Shorten link title (#2379)
thompson-tomo Jun 17, 2025
7cfd1ed
[chore] fix heroku description #2344 (#2377)
thompson-tomo Jun 17, 2025
723789b
chore(deps): update github/codeql-action action to v3.29.0 (#2375)
renovate[bot] Jun 18, 2025
37fc32d
Add k8s resourcequota metrics (#2113)
ChrsMark Jun 18, 2025
bb3d1cc
Detect yaml groups that are not used in md files, deprecate `otel.sco…
Jun 19, 2025
4e7c077
Add .NET network + HTTP connection spans (#1192)
Jun 19, 2025
9dce756
[chore] Use generic `gen_ai.usage` attributes descriptions (#2356)
gyliu513 Jun 23, 2025
7db392d
Create an entity modelling guide (#2328)
jsuereth Jun 23, 2025
c182d6c
Add stability requirements for entities to have attribute roles. (#2378)
jsuereth Jun 23, 2025
ed15336
Change `azure_` and `az.` to `azure.` across all conventions (#1698)
Jun 24, 2025
060b832
Add semconv for k8s node condition as metric (#2321)
ChrsMark Jun 25, 2025
06071f2
Update community member listings (#2429)
opentelemetrybot Jun 25, 2025
6fc0e4d
[chore] Update link title #2410 (#2411)
thompson-tomo Jun 26, 2025
5731f60
Fix outdated community membership link (#2442)
opentelemetrybot Jun 27, 2025
35b3e06
Move key names from template attribute examples to notes (#2204)
trask Jun 27, 2025
5074db9
Rename system.network.connections to system.network.connection.count …
ChrsMark Jun 27, 2025
fe90e52
[k8s] Adds k8s.hpa.metric.target.cpu.* metrics (#2283)
jinja2 Jun 30, 2025
e364dcc
Fix release workflow (#2451)
trask Jun 30, 2025
6421152
Fix schema-next.yaml (#2453)
trask Jun 30, 2025
a497728
[chore] Prepare release v1.35.0 (#2454)
opentelemetrybot Jun 30, 2025
978aafe
Create Entities Registry (#2278)
jsuereth Jun 30, 2025
f0ed490
Add database context propagation via `SET CONTEXT_INFO` for SQL Serve…
XSAM Jul 1, 2025
7e21a36
Add copilot instructions for auto-review (#2447)
Jul 1, 2025
05dba6d
[chore] Fix identifying attribute rendering #2458 (#2459)
thompson-tomo Jul 1, 2025
c338232
Add link to entity modelling guide. (#2461)
jsuereth Jul 1, 2025
b32b0d9
[chore] Clarify .count for updowncounters guidance (#2317)
ChrsMark Jul 1, 2025
83b5544
Replace otel.sdk.span.ended metric with improved span.started metric …
JonasKunz Jul 2, 2025
a413c6f
[chore] Fix typo in changelog (#2478)
trentm Jul 4, 2025
2621f69
Add annotation to exclude collisions on `cloud.platform` enum and add…
Jul 4, 2025
0ab3f56
Add the 'deprecated:' attribute to the recently deprecated 'z_os' enu…
trentm Jul 4, 2025
8b52ebd
Update all patch versions (#2348)
renovate[bot] Jul 4, 2025
8b6bdbe
[chore] set entities link title #2460 (#2462)
thompson-tomo Jul 4, 2025
4b2c0e6
[chore] Prepare release v1.36.0 (#2483)
opentelemetrybot Jul 5, 2025
3b64cb3
Add metric value type everywhere (as code-generation annotation) (#2444)
Jul 5, 2025
2c7acd7
[chore] Fix link breaking 'make markdown-link-check' (#2494)
trentm Jul 8, 2025
2ba21a8
[chore] Remove duplicate `check` target (#2490)
braydonk Jul 8, 2025
16c9c52
Update openpolicyagent/opa Docker tag to v1.6.0 (#2487)
renovate[bot] Jul 8, 2025
8638e7b
Update GenAI conventions based on system-specific naming guidance (#2…
Jul 8, 2025
cc79a58
[chore] Fix 'make check' on macOS (#2493)
trentm Jul 8, 2025
728e5d1
Replace confusing URI origin with more specific guidance (#2463)
Jul 8, 2025
45dea8c
Update dependency go to v1.24.5 (#2498)
renovate[bot] Jul 9, 2025
7a2ed6c
Better link checking (#2499)
trask Jul 9, 2025
463b7f5
[chore] Remove quotes from values (#2500)
martincostello Jul 9, 2025
8dd48ff
update activity name attribute and add jank period
breedx-splk Jul 9, 2025
1b0847a
add changelog item.
breedx-splk Apr 8, 2025
65f3ecd
add jank event and associated attributes.
breedx-splk Apr 21, 2025
3f75abd
set PR num
breedx-splk Apr 21, 2025
1c08e9a
update after rebase and fix slow->frozen from review comments
breedx-splk May 5, 2025
84bf9b1
redo tooling post rebase
breedx-splk May 5, 2025
0728578
regen toc
breedx-splk May 5, 2025
b52d42e
fix attr def
breedx-splk May 5, 2025
d7f6727
remove changelog item from the before times
breedx-splk May 5, 2025
94d43d3
remove requirement level from registry
breedx-splk May 6, 2025
87da051
rebase
breedx-splk May 22, 2025
0887e29
remove activity name
breedx-splk May 22, 2025
08c3cf1
remove activity name
breedx-splk May 22, 2025
1a3a9f1
lint yaml
breedx-splk May 22, 2025
990b0a5
update activity name attribute and add jank period
breedx-splk Jul 9, 2025
8c83b04
Merge remote-tracking branch 'origin/app_jank_events' into app_jank_e…
breedx-splk Jul 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .chloggen/jank_events.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Use this changelog template to create an entry for release notes.
#
# If your change doesn't affect end users you should instead start
# your pull request title with [chore] or use the "Skip Changelog" label.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement

# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db)
component: app

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Defines a new jank event in the app domain

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
# The values here must be integers.
issues: [2157]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:
57 changes: 56 additions & 1 deletion docs/app/app.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ This document defines events related to client-side applications
- [Click Events](#click-events)
- [Event: `app.screen.click`](#event-appscreenclick)
- [Event: `app.widget.click`](#event-appwidgetclick)
- [Jank Events](#jank-events)
- [Event: `app.jank`](#event-appjank)
- [Attributes](#attributes)

<!-- tocstop -->
Expand Down Expand Up @@ -80,9 +82,62 @@ Use this event to indicate that visual application component has been clicked, t
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->

## Jank Events

### Event: `app.jank`
Comment thread
breedx-splk marked this conversation as resolved.

Jank is a disruption in UI rendering, resulting in a display that can feel
sluggish or even unresponsive/frozen. Applications that are able to detect
jank can report it with the following events:

<!-- semconv event.app.jank -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->

**Status:** ![Development](https://img.shields.io/badge/-development-blue)

The event name MUST be `app.jank`.

This event indicates that the application has detected substandard UI rendering performance.

Jank happens when the UI is rendered slowly enough for the user to experience some disruption or sluggishness. Jank may be classified with varying degrees, such as `slow` or `frozen`, when rendering times exceed a given threshold.

| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
|---|---|---|---|---|---|
| [`app.jank.count`](/docs/registry/attributes/app.md) | int | A count of the number of frame renders that experienced jank. [1] | `9`; `42` | `Required` | ![Development](https://img.shields.io/badge/-development-blue) |
| [`app.activity.name`](/docs/registry/attributes/app.md) | string | The name of the Activity at the time of the event or span start. [2] | `myActivity`; `checkout` | `Recommended` | ![Development](https://img.shields.io/badge/-development-blue) |
| [`app.jank.period`](/docs/registry/attributes/app.md) | double | The time period, in seconds, for which this jank is being reported. | `0.5`; `1.0`; `10.0` | `Recommended` | ![Development](https://img.shields.io/badge/-development-blue) |
| [`app.jank.threshold_ms`](/docs/registry/attributes/app.md) | int | The minimum rendering threshold for this type of jank, in milliseconds. | `16`; `700`; `1024` | `Recommended` | ![Development](https://img.shields.io/badge/-development-blue) |
| [`app.jank.type`](/docs/registry/attributes/app.md) | string | A categorization of the type of jank. | `slow`; `frozen` | `Recommended` | ![Development](https://img.shields.io/badge/-development-blue) |

**[1] `app.jank.count`:** Depending on platform limitations, the value provided MAY be approximation.

**[2] `app.activity.name`:** This is an Android specific attribute.

---

`app.jank.type` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.
Comment thread
breedx-splk marked this conversation as resolved.

| Value | Description | Stability |
|---|---|---|
| `frozen` | Jank that causes the user to suspect that the application is frozen. [3] | ![Development](https://img.shields.io/badge/-development-blue) |
| `slow` | Jank is classified as observably slow. [4] | ![Development](https://img.shields.io/badge/-development-blue) |

**[3]:** Recommended threshold for frozen is 700ms.

**[4]:** Recommended threshold for slow is 16ms.

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->

## Attributes

See the [app attributes](/docs/registry/attributes/app.md) registry for all
See the [app attributes](/docs/attributes-registry/app.md) registry for all

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think if you revert this change it will fix the link check failure

application-related attributes that may appear on telemetry items.

[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status
34 changes: 28 additions & 6 deletions docs/registry/attributes/app.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,20 @@ Describes attributes related to client-side applications (e.g. web apps or mobil

| Attribute | Type | Description | Examples | Stability |
|---|---|---|---|---|
| <a id="app-installation-id" href="#app-installation-id">`app.installation.id`</a> | string | A unique identifier representing the installation of an application on a specific device [1] | `2ab2916d-a51f-4ac8-80ee-45ac31a28092` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-activity-name" href="#app-activity-name">`app.activity.name`</a> | string | The name of the Activity at the time of the event or span start. [1] | `myActivity`; `checkout` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-installation-id" href="#app-installation-id">`app.installation.id`</a> | string | A unique identifier representing the installation of an application on a specific device [2] | `2ab2916d-a51f-4ac8-80ee-45ac31a28092` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-jank-count" href="#app-jank-count">`app.jank.count`</a> | int | A count of the number of frame renders that experienced jank. [3] | `9`; `42` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-jank-period" href="#app-jank-period">`app.jank.period`</a> | double | The time period, in seconds, for which this jank is being reported. | `0.5`; `1.0`; `10.0` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-jank-threshold-ms" href="#app-jank-threshold-ms">`app.jank.threshold_ms`</a> | int | The minimum rendering threshold for this type of jank, in milliseconds. | `16`; `700`; `1024` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-jank-type" href="#app-jank-type">`app.jank.type`</a> | string | A categorization of the type of jank. | `slow`; `frozen` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-screen-coordinate-x" href="#app-screen-coordinate-x">`app.screen.coordinate.x`</a> | int | The x (horizontal) coordinate of a screen coordinate, in screen pixels. | `0`; `131` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-screen-coordinate-y" href="#app-screen-coordinate-y">`app.screen.coordinate.y`</a> | int | The y (vertical) component of a screen coordinate, in screen pixels. | `12`; `99` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-widget-id" href="#app-widget-id">`app.widget.id`</a> | string | An identifier that uniquely differentiates this widget from other widgets in the same application. [2] | `f9bc787d-ff05-48ad-90e1-fca1d46130b3`; `submit_order_1829` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-widget-name" href="#app-widget-name">`app.widget.name`</a> | string | The name of an application widget. [3] | `submit`; `attack`; `Clear Cart` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-widget-id" href="#app-widget-id">`app.widget.id`</a> | string | An identifier that uniquely differentiates this widget from other widgets in the same application. [4] | `f9bc787d-ff05-48ad-90e1-fca1d46130b3`; `submit_order_1829` | ![Development](https://img.shields.io/badge/-development-blue) |
| <a id="app-widget-name" href="#app-widget-name">`app.widget.name`</a> | string | The name of an application widget. [5] | `submit`; `attack`; `Clear Cart` | ![Development](https://img.shields.io/badge/-development-blue) |

**[1] `app.installation.id`:** Its value SHOULD persist across launches of the same application installation, including through application upgrades.
**[1] `app.activity.name`:** This is an Android specific attribute.

**[2] `app.installation.id`:** Its value SHOULD persist across launches of the same application installation, including through application upgrades.
It SHOULD change if the application is uninstalled or if all applications of the vendor are uninstalled.
Additionally, users might be able to reset this value (e.g. by clearing application data).
If an app is installed multiple times on the same device (e.g. in different accounts on Android), each `app.installation.id` SHOULD have a different value.
Expand All @@ -33,6 +40,21 @@ For Android, examples of `app.installation.id` implementations include:

More information about Android identifier best practices can be found [here](https://developer.android.com/training/articles/user-data-ids).

**[2] `app.widget.id`:** A widget is an application component, typically an on-screen visual GUI element.
**[3] `app.jank.count`:** Depending on platform limitations, the value provided MAY be approximation.

**[4] `app.widget.id`:** A widget is an application component, typically an on-screen visual GUI element.

**[5] `app.widget.name`:** A widget is an application component, typically an on-screen visual GUI element.

---

`app.jank.type` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

| Value | Description | Stability |
|---|---|---|
| `frozen` | Jank that causes the user to suspect that the application is frozen. [6] | ![Development](https://img.shields.io/badge/-development-blue) |
| `slow` | Jank is classified as observably slow. [7] | ![Development](https://img.shields.io/badge/-development-blue) |

**[6]:** Recommended threshold for frozen is 700ms.

**[3] `app.widget.name`:** A widget is an application component, typically an on-screen visual GUI element.
**[7]:** Recommended threshold for slow is 16ms.
23 changes: 23 additions & 0 deletions model/app/events.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,26 @@ groups:
requirement_level: opt_in
- ref: app.screen.coordinate.y
requirement_level: opt_in
- id: event.app.jank
stability: development
type: event
name: app.jank
Comment thread
breedx-splk marked this conversation as resolved.
brief: >
This event indicates that the application has detected substandard UI
rendering performance.
note: >
Jank happens when the UI is rendered slowly enough for the user to
experience some disruption or sluggishness. Jank may be classified with
varying degrees, such as `slow` or `frozen`, when rendering times exceed
a given threshold.
attributes:
Comment thread
breedx-splk marked this conversation as resolved.
- ref: app.jank.count
requirement_level: required
Comment on lines +53 to +54

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might also be better suited as a body attribute. also am unsure how this could be >1 as events should be be emitted in a similar fashion to logs ie as aggregation not possible.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So jank events are modelled as some number of dropped frames over a certain period in such a way that it is perceivable by a user. It is not that every single dropped frame will create an event - this is not the dropped frame event, after all.

This is why the count and period attributes are important: to describe what kind of jank event was captured.

- ref: app.jank.type
requirement_level: recommended

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't it be required?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

by allowing it to be recommended (not required), it allows instrumentation to report jank with a app.jank.threshold_ms that doesn't fit cleanly into the "slow" or "frozen" buckets. Feels more flexible that way to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure what benefit reporting just the threshold would be

- ref: app.jank.threshold_ms
requirement_level: recommended
Comment on lines +57 to +58

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would do this as a body attribute as it doesn't need to be in the registry.

- ref: app.jank.period
requirement_level: recommended
- ref: app.activity.name
requirement_level: recommended
40 changes: 40 additions & 0 deletions model/app/registry.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,43 @@ groups:
A widget is an application component, typically an on-screen visual
GUI element.
examples: [ "submit", "attack", "Clear Cart" ]
- id: app.jank.count

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not needed if moved to body attribute or metric

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, but metrics aren't on the table right now for mobile...and using flat/basic attributes is currently much simpler than defining structured event bodies. There is prior art for defining attributes for events, and these events are pretty simple (eg. not a lot of deep structure or complicated types involved).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the overall idea, @breedx-splk. What's very confusing to me is that it looks like a metric, swims like a metric, and quacks like a metric... And yet it's defined as a log event? I noticed that you recently mentioned that you've added a period attribute to keep the count somewhere in memory and only sending the event after that period of time, and that's something that already happens with metrics too! 😅 - I just don't understand the idea of having to reinvent metrics as log events, it makes me wonder why do we have different signals then? In theory, I guess we can also replace spans by logs, but it doesn't seem like that's the way to go.

I was thinking what would make sense to me for this to be a log event, and as such, I think it would be simpler, like "There was a UI jank at this point in time" with maybe an attribute that shows for how long the UI was stuck and where in the app that happened. It would be helpful for me as an app developer to know that there are UI janks and where, and with the time attr I would be able to correlate that data with the host device info so that I can check how much priority I should give this issue since it's not uncommon to have UI jank in older devices. The problem with that approach is that we could potentially send hundreds of events in a very short period of time (unless we limit the amount of events per second or something like that, where we would only capture the first jank within a second and then ignore the rest during that time, for example), which is why I guess we came up with the "count" attribute. But by introducing a count value and a period of time, we essentially turn this into a metric (unless I missed something important), so it seems like it's just the nature of this event. We've recently added metrics support in OTel Android, so I'm not sure why it would be a problem to go with it as a metric.

It's a tricky event to define for sure, it's probably a good topic for the SIG meeting.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree it certainly appears to me to be a metric to me so I would rather see it expressed in that manner. The event should be recorded as soon as it happens to provide an indication that something happened.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mentioned this in @breedx-splk's PR over in the Android repo, but I don't think making this a metric, thereby erasing the "when did it happen?" dimension from the signal is a good idea. That is the most important thing when this data is being used, and no amount of aggregation will give you more information than knowing when it happened within a session and what preceded and followed it.

Count in this case is metadata for the jank event and gives some qualification as to the magnitude of the jank event being seen by the user. Totalling up all the dropped frames but not stating when they were dropped renders this data pretty useless. We are not trying to count all the dropped frames in the entire fleet (or even on a single device) - we are trying to model the fact that users are seeing janky scrolling or unresponsive UI.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually metrics support exemplars which preserve that link hence not rendering them useless in fact for me make them more useful then events as you can see how widespread it is and then drill down.

type: int
stability: development
brief: A count of the number of frame renders that experienced jank.
note: >
Depending on platform limitations, the value provided
MAY be approximation.
examples: [ 9, 42 ]
- id: app.jank.type

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be app.rendering.state so that it is generic?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not my preference, because this is attempting to specifically define a type of jank (slow screen rendering performance). It's not really a "rendering state", so I don't think app.rendering.state is a great fit.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't add this attribute, I think it might be more confusing than helpful as its items don't depend on constants but instead users can choose what values to set as thresholds, so if they decide to change them at some point (or just switch from an instrumentation impl to another with different defaults), then they would get misleading values across time. Plus, I think this categorization makes more sense to do on the query side, where I can define my threshold at query time, without having to rely on how it was categorized in the past. On top of that, it adds more size to the event itself, making it not too disk space friendly.

If someone needs it in the future, and they explain their use case in a way that we can get a better idea of how to make this attribute useful for them, I think we should add it then. But right now, since we don't know exactly what's needed for this event, I wouldn't add it because I think it's better to add stuff as the need arises, rather than having to make breaking changes and/or removing stuff later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we were to add it then the naming should be generic rather than jank so that it can be used on other os.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jank is a specific type of UI artifact whereby some amount of frames were not rendered, leading to choppy or frozen UI. It's not state, per se, but more like the occurrence of something bad that is perceivable to users.

I can see the desire to classify this into different types, but in a way that is what the period and count attributes do. Having a high-level box to put it into would require defining the parameters of said box, and I don't think we know enough how the usage to clearly say what they would be.

I think we should probably skip this for now. And if we want to go ahead and do it, I wouldn't make it more generic, as the whole idea of semantic conventions is to make them specific and meaningful. If there are other UI screen events we want to track, we can define a new event, as the underlying attributes would likely not be the same as what we have for jank.

stability: development
brief: A categorization of the type of jank.
type:
members:
- id: slow
value: 'slow'
brief: 'Jank is classified as observably slow.'
note: 'Recommended threshold for slow is 16ms.'
stability: development
- id: frozen
value: 'frozen'
brief: 'Jank that causes the user to suspect that the application is frozen.'
note: 'Recommended threshold for frozen is 700ms.'
stability: development
examples: [slow, frozen]
- id: app.jank.threshold_ms
Comment thread
breedx-splk marked this conversation as resolved.
stability: development
type: int
brief: The minimum rendering threshold for this type of jank, in milliseconds.
examples: [16, 700, 1024]
- id: app.jank.period
stability: development
type: double
brief: The time period, in seconds, for which this jank is being reported.
examples: [ 0.5, 1.0, 10.0 ]
- id: app.activity.name
stability: development
type: string
brief: The name of the Activity at the time of the event or span start.
note: This is an Android specific attribute.
examples: ['myActivity', 'checkout']
Loading