Version 0.26 2024-09_11
- Improve tracking on choreographer frame ends #68. New interesting APIs:
MainThreadMessageSpy.currentMessageAsString
,Handlers.onCurrentMainThreadMessageFinished()
,prop by mainThreadMessageScopedLazy {}
,Choreographers.postOnFrameRendered()
,Choreographers.postOnWindowFrameRendered()
andChoreographers.isInChoreographerFrame
.
Version 0.22 2024-08_28
- Introduced
MainThreadMessageSpy
(artifact:papa-main-trace
) which provides an API to be notified of main thread message dispatching. - Introduced
InteractionTrigger
(2 sub types:SimpleInteractionTrigger
andInteractionTriggerWithPayload
to represent the concept of a trigger (such as a tap or a key input) in a more generic way that allows for new trigger types, which then allows for better tracking of what started and interaction, and when. Introduced new trigger:main-message
to find track the proper start time of an interaction not started with a tap (disble this by settingpapa_track_main_thread_triggers
to false). New API:MainThreadTriggerStack
helps us manage current triggers. - API breaking changes: renamed
interactionInput
tointeractionTrigger
onInteractionResultData
andTrackedInteraction
. Removed it entirely fromOnEventScope
. RemovedInteractionStartInput
which was replaced by the more genericInteractionTrigger
.
Version 0.18 2024-08_21
- Add support for custom startInteraction start input events #66.
Version 0.15 2023-11-30
- bugfix: Allow thread disk reads temporarily at onAppCrashing() function
Version 0.14 2023-08-04
- bugfix: remove the 1 second post delay to compute the lastAliveCurrentMillis value, which can cause excessive reads/writes to disk.
Version 0.13 2023-03-24
- bugfix: prevent negative values from being recorded for interaction durations. if eventTime is after delivery uptime, use deliveryUptimeMillis for DeliveredInput's uptime.
Version 0.12 2023-03-14
- Add
EventFrameLabeler
to leverage withSafeTrace
andWindowOverlay
to make it easy to match frames in Perfetto & on screen. - Add
WindowOverlay
inpapa-dev
to facilitate drawing on top of the app windows. - Add support for customization of the main thread section names (
SafeTraceSetup.mainThreadSectionNameMapper
) - Make PerfAppComponentFactory public
- Rename papa-dev-receivers to papa-dev
- Add
OnEventScope.recordSingleFrameInteraction()
,OnEventScope.cancel()
andOnEventScope.cancelRunningInteractions()
- Add
InteractionRuleClient.trackedInteractions
- Rename
RunningInteraction.events
toRunningInteraction.sentEvents
Version 0.10 2022-10-12
- bugfix: never cleared finishing interactions
- Add support for registering against event interfaces
Version 0.8 2022-10-06
- Even more rewrite of the interaction latency APIs! Interactions are now just a list of events (no more start & end, no more interaction type)
Version 0.7 2022-10-03
- More rewrite of the interaction latency APIs. Adds reporting of start & end events, centralizes the handling of the ending of the interactions.
- Removing a rule cancels any interaction in flight.
Version 0.6
2022-09-28
- Rewrite of the APIs to track interaction latency to facilitate integration in a large codebase (#38). This also starts introducing the Kotlin
Duration
class in the APIs (instead of longs) and started replacing millis measurements with nanos measurements (the accumulated of rounding error led to results that were a few millis off). This also adds tracking of frame count per interaction (#29). - Use MessageCompat.setAsynchronous to support API 16+ (#33)
onCurrentFrameRendered()
joins multiple calls into a single post (#35)
Version 0.5
2022-05-26
- Library name changed from
square/tart
tosquare/papa
- APIs entirely rewritten, most things are now done via PapaEventListener.install
- Removed legacy package.
- APIs still aren't stable but they're getting closer.
2021-10-28
- Adding atrace traces for touch tracking, leveraging Jetpack tracing.
2021-9-30
- Legacy FrozenFrameOnTouchDetector only reports cases where the input has a delay on delivery, rather than looking at total duration from input to frame. This is so that we don't do extra work on every touch down, i.e. previous released would traverse the view hierarchy looking for a pressed view on every touch down when really we just want it for frozen cases.
- New APIs:
isChoreographerDoingFrame()
andWindow.onCurrentFrameDisplayed()
.
2021-9-28
- Launch detection relies on a predraw listener instead of a draw listener for 1st frame (draw may be skipped if nothing to redraw)
- Update
CpuDuration
so that the time Unit is now part of its state instead of being millis. Now relying on nanos where possible.duration.uptimeMillis
=>duration.uptime(MILLISECONDS)
. - Added new pre launch state: NO_PROCESS_FIRST_LAUNCH_AFTER_CLEAR_DATA
- Fixed import errors that led to legacy APIs landing in the internal package instead of legacy.
- Instrumented CI and fixed flakes
- Improved last touch up recording and added last back recording (currently still a legacy API)
- FrozenFrameOnTouchDetector stopped reporting one frame late.
2021-9-23
Initial release.
- Let's do this!