You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e98bb92
Browse filesBrowse the repository at this point in the historyBrowse files
-`Automation lab`: long-press, alert-result, app-event, app-state, appearance, orientation, permission-recovery, log canaries, a flattened (`accessible={true}`) text input, and an Apple Pay sheet hosted in `com.apple.PassbookUIService`
20
20
-`WebView accessibility`: a deterministic semantic fixture plus live websites with varied HTML for native accessibility snapshot verification
21
+
-`Perf lab`: seeded JavaScript render problems for `react-devtools profile`, one per scenario (see [Perf lab](#perf-lab))
21
22
22
23
Navigation uses Expo Router native bottom tabs, so the tab bar itself is also part of the test surface.
23
24
@@ -234,6 +235,32 @@ installed development build is connected to that server. For Android local
234
235
device/emulator runs, also run `adb reverse tcp:8082 tcp:8082` when the device
235
236
needs host port forwarding.
236
237
238
+
## Perf lab
239
+
240
+
`agent-device-test-app://perf-lab?scenario=<id>` opens one seeded render problem. **Run** (`perf-run`) replays the slow interaction as a fixed burst and sets `perf-status` to `done`. Profile it with:
241
+
242
+
```bash
243
+
agent-device open "agent-device-test-app://perf-lab?scenario=memo-defeated" --platform android
|`expensive-render`|`PriceHistoryChart` recomputes its trend on every render |`slow-render PriceHistoryChart`|
255
+
|`memo-defeated`|`ContactList` passes a new callback and style object to memoized rows |`memo-defeated ContactRow`|
256
+
|`context-cascade`|`SessionProvider` builds a new context value on every update |`context-cascade AvatarBadge`|
257
+
|`parent-cascade`| Typing re-renders every unmemoized result row |`parent-cascade ResultRow`|
258
+
|`render-storm`|`LiveClock` sets state every 16 ms |`render-storm LiveClock`|
259
+
|`effect-chain`|`FilteredContacts` copies derived state in an effect |`effect-chain FilteredContacts`|
260
+
|`eager-list`| 1,200 tiles mount in one commit instead of a virtualized list |`eager-mount ProductTile`|
261
+
262
+
`src/screens/PerfLabScreen.tsx` imports only React and React Native, so it can be copied into a bare React Native app to check the profiler on other React Native versions.
263
+
237
264
## Local Agent Device suites
238
265
239
266
The repo includes two local suites for iterating on the fixture app:
0 commit comments