Support duration and durationInForeground on macOS #848
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Goal
Currently, the
duration
anddurationInForeground
fields are always zero on macos because we don't record that information. This PR makes macOS start recording this information so that users can see it in their reports.Design
MacOS does record foreground/background state changes, but uses notification names that are confusing when compared to ios. However, they serve purposes that are close enough to be useful for our needs.
MacOS:
NSApplicationDidBecomeActiveNotification
NSApplicationDidResignActiveNotification
NSApplicationWillTerminateNotification
iOS:
UIApplicationDidBecomeActiveNotification
UIApplicationWillResignActiveNotification
UIApplicationDidEnterBackgroundNotification
UIApplicationWillEnterForegroundNotification
UIApplicationWillTerminateNotification
The approach here simply uses the macOS equivalents to trigger the same handler code as for iOS, allowing existing handlers to do the calculations as they have always done.
Changeset
Added compile-time-conditional code to add notification handlers for macOS to handle foreground/background and app termination.
Testing
E2e tests don't exist yet for macos, so I manually triggered events in the macos test apps and verified that durations were recorded on the backend.