Repository navigation
Commit b416ca1
Process Settings notifications off the posting thread (#58978)
Summary:
`SettingsManager` cleans the entire user-defaults dictionary inline whenever a defaults change notification arrives. A write on the main thread therefore performs unrelated, potentially expensive work before returning.
Put the asynchronous update path behind a default-off runtime gate. With the gate off, preserve synchronous snapshot cleaning and event delivery, every intermediate update, the default module queue, and the existing lifecycle registration.
With the gate on, process notifications on a dedicated serial background method queue. Coalesce pending notifications to the latest defaults state, while allowing a notification during a snapshot to schedule a trailing update. Keep JavaScript mutations on the same queue and suppress their notifications at posting time. Drop queued work after invalidation without blocking teardown or retaining the module.
The `settingsUpdated` event name and full JSON-cleaned payload remain unchanged. Enabled-mode rapid external changes may be reported as one latest-state update rather than separate intermediate transitions. Synchronous constants export is unchanged.
Declare the Settings pod's feature-flags dependency so dynamic-framework builds can link the gate.
Changelog:
[iOS][Fixed] - Add an opt-in asynchronous Settings update path to avoid blocking user-defaults writers
Differential Revision: D1245043381 parent 1c6e0c7 commit b416ca1
23 files changed
Lines changed: 740 additions & 100 deletions
File tree
- packages/react-native
- Libraries/Settings
- ReactAndroid/src/main
- java/com/facebook/react/internal/featureflags
- jni/react/featureflags
- ReactCommon/react
- featureflags
- nativemodule/featureflags
- React/Tests/Settings
- scripts/featureflags
- src/private/featureflags
- specs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
16 | 20 | | |
17 | 21 | | |
18 | | - | |
| 22 | + | |
19 | 23 | | |
20 | 24 | | |
21 | 25 | | |
22 | | - | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
23 | 30 | | |
| 31 | + | |
24 | 32 | | |
25 | 33 | | |
26 | 34 | | |
| |||
40 | 48 | | |
41 | 49 | | |
42 | 50 | | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
43 | 54 | | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
44 | 59 | | |
45 | 60 | | |
46 | 61 | | |
| |||
61 | 76 | | |
62 | 77 | | |
63 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
64 | 101 | | |
65 | 102 | | |
66 | 103 | | |
67 | 104 | | |
68 | 105 | | |
69 | 106 | | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
70 | 138 | | |
71 | 139 | | |
72 | | - | |
73 | | - | |
74 | | - | |
| 140 | + | |
| 141 | + | |
75 | 142 | | |
| 143 | + | |
76 | 144 | | |
77 | 145 | | |
78 | 146 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
| 47 | + | |
47 | 48 | | |
48 | 49 | | |
49 | 50 | | |
| |||
0 commit comments