Skip to content

Conversation

@Gudahtt
Copy link
Member

@Gudahtt Gudahtt commented Jul 21, 2025

Description

The MultichainRatesController now stops polling when the UI is closed, and starts up again when the first UI instance is opened (conditionally, if a non-EVM account is selected).

The method for starting polling is slightly different from other polling controllers because this controller doesn't use the same polling mixin as elsewhere. This controller is deprecated and soon to be removed.

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Prevent frequent writes while the wallet UI is closed

Related issues

Relates to #33879

Manual testing steps

  1. Proceed through onboarding
  2. Close all UI instances
  3. Monitor the background console, putting a logpoint here conditional on this.persist being true:
    this.updateState({ [controllerKey]: newState });

Screenshots/Recordings

N/A

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

@sentry
Copy link

sentry bot commented Jul 21, 2025

🔍 Existing Issues For Review

Your pull request is modifying functions with the following pre-existing issues:

📄 File: app/scripts/background.js

Function Unhandled Issue
setupController TypeError: Cannot read properties of undefined (reading 'getAll') /sc...
Event Count: 1 Affected Users: 0

Did you find this useful? React with a 👍 or 👎

@Gudahtt Gudahtt force-pushed the stop-polling-multichain-rates-while-idle branch from 08b8a34 to 1d6b5a0 Compare July 21, 2025 17:46
@metamaskbot
Copy link
Collaborator

Builds ready [1d6b5a0]
UI Startup Metrics (1242 ± 51 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1242113313845112701329
load106494812114711031136
domContentLoaded105894312034710971124
domInteractive18135981639
firstPaint71682121143010811130
backgroundConnect2101982387212231
firstReactRender20134562138
getState11397121228
initialActions30326216
loadScripts85474098546892924
setupStore73939713
WebpackHomeuiStartup23771941284113024592549
load18891345233515019672125
domContentLoaded18821338232515119632121
domInteractive191288161571
firstPaint1586160380173302
backgroundConnect2910287363040
firstReactRender1828945585228346
getState134290281319
initialActions10220525728
loadScripts18781335231215119612119
setupStore176195261631
FirefoxBrowserifyHomeuiStartup15071284240118015811790
load12911102216613113351488
domContentLoaded12911102216613113351487
domInteractive1053738059108295
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3014192272871
firstReactRender28216682950
getState83477724
initialActions31315213
loadScripts12661089213612713081462
setupStore173186311090
WebpackHomeuiStartup17161478241718817852119
load14621271209114715331772
domContentLoaded14611271209114715331772
domInteractive101364016793277
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect2816123172670
firstReactRender51396965461
getState113227251224
initialActions618410622
loadScripts14391252206714315151752
setupStore125202231224
Benchmark value 1242 exceeds gate value 1234 for chrome browserify home mean uiStartup
Benchmark value 211 exceeds gate value 10 for chrome browserify home mean backgroundConnect
Benchmark value 4 exceeds gate value 1 for chrome browserify home mean initialActions
Benchmark value 854 exceeds gate value 830 for chrome browserify home mean loadScripts
Benchmark value 231 exceeds gate value 18 for chrome browserify home p95 backgroundConnect
Benchmark value 16 exceeds gate value 1.2 for chrome browserify home p95 initialActions
Benchmark value 2378 exceeds gate value 2192 for chrome webpack home mean uiStartup
Benchmark value 1889 exceeds gate value 1711 for chrome webpack home mean load
Benchmark value 1883 exceeds gate value 1704 for chrome webpack home mean domContentLoaded
Benchmark value 11 exceeds gate value 7 for chrome webpack home mean initialActions
Benchmark value 1878 exceeds gate value 1699 for chrome webpack home mean loadScripts
Benchmark value 2550 exceeds gate value 2454 for chrome webpack home p95 uiStartup
Benchmark value 2125 exceeds gate value 2030 for chrome webpack home p95 load
Benchmark value 2121 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded
Benchmark value 71 exceeds gate value 57 for chrome webpack home p95 domInteractive
Benchmark value 28 exceeds gate value 7 for chrome webpack home p95 initialActions
Benchmark value 2119 exceeds gate value 1970 for chrome webpack home p95 loadScripts
Benchmark value 1507 exceeds gate value 1405 for firefox browserify home mean uiStartup
Benchmark value 1292 exceeds gate value 1245 for firefox browserify home mean load
Benchmark value 1292 exceeds gate value 1239 for firefox browserify home mean domContentLoaded
Benchmark value 30 exceeds gate value 25 for firefox browserify home mean backgroundConnect
Benchmark value 28 exceeds gate value 25 for firefox browserify home mean firstReactRender
Benchmark value 4 exceeds gate value 1 for firefox browserify home mean initialActions
Benchmark value 1266 exceeds gate value 1230 for firefox browserify home mean loadScripts
Benchmark value 17 exceeds gate value 9 for firefox browserify home mean setupStore
Benchmark value 1790 exceeds gate value 1660 for firefox browserify home p95 uiStartup
Benchmark value 295 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 71 exceeds gate value 70 for firefox browserify home p95 backgroundConnect
Benchmark value 13 exceeds gate value 2 for firefox browserify home p95 initialActions
Benchmark value 90 exceeds gate value 27 for firefox browserify home p95 setupStore
Benchmark value 1716 exceeds gate value 1615 for firefox webpack home mean uiStartup
Benchmark value 1462 exceeds gate value 1380 for firefox webpack home mean load
Benchmark value 1462 exceeds gate value 1380 for firefox webpack home mean domContentLoaded
Benchmark value 101 exceeds gate value 100 for firefox webpack home mean domInteractive
Benchmark value 28 exceeds gate value 26 for firefox webpack home mean backgroundConnect
Benchmark value 51 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 6 exceeds gate value 1 for firefox webpack home mean initialActions
Benchmark value 1440 exceeds gate value 1360 for firefox webpack home mean loadScripts
Benchmark value 2119 exceeds gate value 1935 for firefox webpack home p95 uiStartup
Benchmark value 1772 exceeds gate value 1660 for firefox webpack home p95 load
Benchmark value 1772 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded
Benchmark value 277 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 70 exceeds gate value 49 for firefox webpack home p95 backgroundConnect
Benchmark value 61 exceeds gate value 50 for firefox webpack home p95 firstReactRender
Benchmark value 22 exceeds gate value 2 for firefox webpack home p95 initialActions
Benchmark value 1752 exceeds gate value 1630 for firefox webpack home p95 loadScripts
Sum of mean exceeds: 1585ms | Sum of p95 exceeds: 1726.8ms
Sum of all benchmark exceeds: 3311.8ms

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 327 Bytes (0.01%)
  • ui: 0 Bytes (0%)
  • common: 15 Bytes (0%)

@Gudahtt Gudahtt force-pushed the stop-polling-multichain-rates-while-idle branch 2 times, most recently from 99610a1 to 087e861 Compare July 21, 2025 20:29
@metamaskbot
Copy link
Collaborator

Builds ready [087e861]
UI Startup Metrics (1297 ± 71 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1297116015697113281452
load1107100313576311431242
domContentLoaded109999513516411371232
domInteractive18144371739
firstPaint70978125844811231179
backgroundConnect2162032448219234
firstReactRender2416193192544
getState1034471222
initialActions30335316
loadScripts8907851146639291016
setupStore74193812
WebpackHomeuiStartup23421781292517624512543
load18491339234418419492137
domContentLoaded18401333232418419432131
domInteractive2312232351561
firstPaint1656142579206307
backgroundConnect44102946630271
firstReactRender1668739777197344
getState163436481318
initialActions9217923720
loadScripts18361329231118319392122
setupStore206255411530
FirefoxBrowserifyHomeuiStartup16001414223516216651928
load13661197173210714191573
domContentLoaded13661197173210714181573
domInteractive1253657698117451
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3016202203151
firstReactRender302371103062
getState2032154510174
initialActions519111426
loadScripts13411179170910513881543
setupStore11419421834
WebpackHomeuiStartup17471534387926217562103
load14611299191412014891748
domContentLoaded14611299191412014881748
domInteractive98353826493272
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect431913651333464
firstReactRender52427265663
getState11343101636
initialActions10131432829
loadScripts14371280188011814691707
setupStore185246391575
Benchmark value 1297 exceeds gate value 1234 for chrome browserify home mean uiStartup
Benchmark value 1107 exceeds gate value 1070 for chrome browserify home mean load
Benchmark value 1100 exceeds gate value 1061 for chrome browserify home mean domContentLoaded
Benchmark value 217 exceeds gate value 10 for chrome browserify home mean backgroundConnect
Benchmark value 25 exceeds gate value 23 for chrome browserify home mean firstReactRender
Benchmark value 4 exceeds gate value 1 for chrome browserify home mean initialActions
Benchmark value 890 exceeds gate value 830 for chrome browserify home mean loadScripts
Benchmark value 1452 exceeds gate value 1365 for chrome browserify home p95 uiStartup
Benchmark value 1242 exceeds gate value 1190 for chrome browserify home p95 load
Benchmark value 1232 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded
Benchmark value 234 exceeds gate value 18 for chrome browserify home p95 backgroundConnect
Benchmark value 16 exceeds gate value 1.2 for chrome browserify home p95 initialActions
Benchmark value 1016 exceeds gate value 940 for chrome browserify home p95 loadScripts
Benchmark value 2342 exceeds gate value 2192 for chrome webpack home mean uiStartup
Benchmark value 1849 exceeds gate value 1711 for chrome webpack home mean load
Benchmark value 1841 exceeds gate value 1704 for chrome webpack home mean domContentLoaded
Benchmark value 23 exceeds gate value 21 for chrome webpack home mean domInteractive
Benchmark value 44 exceeds gate value 40 for chrome webpack home mean backgroundConnect
Benchmark value 10 exceeds gate value 7 for chrome webpack home mean initialActions
Benchmark value 1837 exceeds gate value 1699 for chrome webpack home mean loadScripts
Benchmark value 2544 exceeds gate value 2454 for chrome webpack home p95 uiStartup
Benchmark value 2137 exceeds gate value 2030 for chrome webpack home p95 load
Benchmark value 2132 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded
Benchmark value 62 exceeds gate value 57 for chrome webpack home p95 domInteractive
Benchmark value 271 exceeds gate value 90 for chrome webpack home p95 backgroundConnect
Benchmark value 20 exceeds gate value 7 for chrome webpack home p95 initialActions
Benchmark value 2122 exceeds gate value 1970 for chrome webpack home p95 loadScripts
Benchmark value 1600 exceeds gate value 1405 for firefox browserify home mean uiStartup
Benchmark value 1367 exceeds gate value 1245 for firefox browserify home mean load
Benchmark value 1367 exceeds gate value 1239 for firefox browserify home mean domContentLoaded
Benchmark value 126 exceeds gate value 110 for firefox browserify home mean domInteractive
Benchmark value 31 exceeds gate value 25 for firefox browserify home mean backgroundConnect
Benchmark value 31 exceeds gate value 25 for firefox browserify home mean firstReactRender
Benchmark value 21 exceeds gate value 11 for firefox browserify home mean getState
Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions
Benchmark value 1341 exceeds gate value 1230 for firefox browserify home mean loadScripts
Benchmark value 12 exceeds gate value 9 for firefox browserify home mean setupStore
Benchmark value 1928 exceeds gate value 1660 for firefox browserify home p95 uiStartup
Benchmark value 1573 exceeds gate value 1495 for firefox browserify home p95 load
Benchmark value 1573 exceeds gate value 1495 for firefox browserify home p95 domContentLoaded
Benchmark value 451 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 62 exceeds gate value 55 for firefox browserify home p95 firstReactRender
Benchmark value 174 exceeds gate value 24 for firefox browserify home p95 getState
Benchmark value 26 exceeds gate value 2 for firefox browserify home p95 initialActions
Benchmark value 1543 exceeds gate value 1475 for firefox browserify home p95 loadScripts
Benchmark value 34 exceeds gate value 27 for firefox browserify home p95 setupStore
Benchmark value 1747 exceeds gate value 1615 for firefox webpack home mean uiStartup
Benchmark value 1461 exceeds gate value 1380 for firefox webpack home mean load
Benchmark value 1461 exceeds gate value 1380 for firefox webpack home mean domContentLoaded
Benchmark value 43 exceeds gate value 26 for firefox webpack home mean backgroundConnect
Benchmark value 52 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 10 exceeds gate value 1 for firefox webpack home mean initialActions
Benchmark value 1438 exceeds gate value 1360 for firefox webpack home mean loadScripts
Benchmark value 19 exceeds gate value 13 for firefox webpack home mean setupStore
Benchmark value 2103 exceeds gate value 1935 for firefox webpack home p95 uiStartup
Benchmark value 1748 exceeds gate value 1660 for firefox webpack home p95 load
Benchmark value 1748 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded
Benchmark value 272 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 64 exceeds gate value 49 for firefox webpack home p95 backgroundConnect
Benchmark value 63 exceeds gate value 50 for firefox webpack home p95 firstReactRender
Benchmark value 36 exceeds gate value 32 for firefox webpack home p95 getState
Benchmark value 29 exceeds gate value 2 for firefox webpack home p95 initialActions
Benchmark value 1707 exceeds gate value 1630 for firefox webpack home p95 loadScripts
Benchmark value 75 exceeds gate value 28 for firefox webpack home p95 setupStore
Sum of mean exceeds: 2003ms | Sum of p95 exceeds: 2751.8ms
Sum of all benchmark exceeds: 4754.8ms

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 114 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 15 Bytes (0%)

@Gudahtt Gudahtt marked this pull request as ready for review July 21, 2025 22:44
Gudahtt added 2 commits July 21, 2025 20:32
The `MultichainRatesController` now stops polling when the UI is
closed, and starts up again when the first UI instance is opened
(conditionally, if a non-EVM account is selected).

The method for starting polling is slightly different from other
polling controllers because this controller doesn't use the same
polling mixin as elsewhere. This controller is deprecated and soon to
be removed.

Relates to #33879
@Gudahtt Gudahtt force-pushed the stop-polling-multichain-rates-while-idle branch from 087e861 to 10132ba Compare July 21, 2025 23:02
@Gudahtt Gudahtt changed the title fix: Stop polling multichain rates while idle fix: cp-12.22.3 Stop polling multichain rates while idle Jul 21, 2025
@metamaskbot
Copy link
Collaborator

Builds ready [10132ba]
UI Startup Metrics (1275 ± 72 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1275113016077213131390
load109697114857211321200
domContentLoaded108996614747211261195
domInteractive18134881743
firstPaint63078148044410971176
backgroundConnect2111992397213227
firstReactRender20145052131
getState12492141137
initialActions2022329
loadScripts885769127172919991
setupStore74223712
WebpackHomeuiStartup24341983292215525432652
load19341482233417920542197
domContentLoaded19251475232217920482191
domInteractive2513225381676
firstPaint17762801102195348
backgroundConnect3610296483556
firstReactRender1689137974207324
getState143238241625
initialActions11222824934
loadScripts19201471230917920462188
setupStore227231391840
FirefoxBrowserifyHomeuiStartup14771279198512715171706
load1284112016959113321465
domContentLoaded1284112016959113321464
domInteractive1193645986109320
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect2714120142847
firstReactRender28216392956
getState11216724842
initialActions30556214
loadScripts1263110116768913131439
setupStore11320223736
WebpackHomeuiStartup17981559257819918912182
load15161311194614916201835
domContentLoaded15161310194614916191835
domInteractive106343937395316
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3216116173773
firstReactRender52436355560
getState123255261433
initialActions8120522422
loadScripts14921291188714615951809
setupStore2052564612110
Benchmark value 1276 exceeds gate value 1234 for chrome browserify home mean uiStartup
Benchmark value 1097 exceeds gate value 1070 for chrome browserify home mean load
Benchmark value 1090 exceeds gate value 1061 for chrome browserify home mean domContentLoaded
Benchmark value 211 exceeds gate value 10 for chrome browserify home mean backgroundConnect
Benchmark value 3 exceeds gate value 1 for chrome browserify home mean initialActions
Benchmark value 885 exceeds gate value 830 for chrome browserify home mean loadScripts
Benchmark value 1390 exceeds gate value 1365 for chrome browserify home p95 uiStartup
Benchmark value 1200 exceeds gate value 1190 for chrome browserify home p95 load
Benchmark value 1195 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded
Benchmark value 44 exceeds gate value 41 for chrome browserify home p95 domInteractive
Benchmark value 228 exceeds gate value 18 for chrome browserify home p95 backgroundConnect
Benchmark value 37 exceeds gate value 33 for chrome browserify home p95 getState
Benchmark value 9 exceeds gate value 1.2 for chrome browserify home p95 initialActions
Benchmark value 992 exceeds gate value 940 for chrome browserify home p95 loadScripts
Benchmark value 2434 exceeds gate value 2192 for chrome webpack home mean uiStartup
Benchmark value 1935 exceeds gate value 1711 for chrome webpack home mean load
Benchmark value 1925 exceeds gate value 1704 for chrome webpack home mean domContentLoaded
Benchmark value 26 exceeds gate value 21 for chrome webpack home mean domInteractive
Benchmark value 11 exceeds gate value 7 for chrome webpack home mean initialActions
Benchmark value 1920 exceeds gate value 1699 for chrome webpack home mean loadScripts
Benchmark value 2653 exceeds gate value 2454 for chrome webpack home p95 uiStartup
Benchmark value 2198 exceeds gate value 2030 for chrome webpack home p95 load
Benchmark value 2191 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded
Benchmark value 76 exceeds gate value 57 for chrome webpack home p95 domInteractive
Benchmark value 349 exceeds gate value 334 for chrome webpack home p95 firstPaint
Benchmark value 34 exceeds gate value 7 for chrome webpack home p95 initialActions
Benchmark value 2189 exceeds gate value 1970 for chrome webpack home p95 loadScripts
Benchmark value 1478 exceeds gate value 1405 for firefox browserify home mean uiStartup
Benchmark value 1285 exceeds gate value 1245 for firefox browserify home mean load
Benchmark value 1285 exceeds gate value 1239 for firefox browserify home mean domContentLoaded
Benchmark value 120 exceeds gate value 110 for firefox browserify home mean domInteractive
Benchmark value 27 exceeds gate value 25 for firefox browserify home mean backgroundConnect
Benchmark value 29 exceeds gate value 25 for firefox browserify home mean firstReactRender
Benchmark value 12 exceeds gate value 11 for firefox browserify home mean getState
Benchmark value 4 exceeds gate value 1 for firefox browserify home mean initialActions
Benchmark value 1263 exceeds gate value 1230 for firefox browserify home mean loadScripts
Benchmark value 11 exceeds gate value 9 for firefox browserify home mean setupStore
Benchmark value 1706 exceeds gate value 1660 for firefox browserify home p95 uiStartup
Benchmark value 320 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 56 exceeds gate value 55 for firefox browserify home p95 firstReactRender
Benchmark value 42 exceeds gate value 24 for firefox browserify home p95 getState
Benchmark value 14 exceeds gate value 2 for firefox browserify home p95 initialActions
Benchmark value 36 exceeds gate value 27 for firefox browserify home p95 setupStore
Benchmark value 1798 exceeds gate value 1615 for firefox webpack home mean uiStartup
Benchmark value 1517 exceeds gate value 1380 for firefox webpack home mean load
Benchmark value 1517 exceeds gate value 1380 for firefox webpack home mean domContentLoaded
Benchmark value 106 exceeds gate value 100 for firefox webpack home mean domInteractive
Benchmark value 32 exceeds gate value 26 for firefox webpack home mean backgroundConnect
Benchmark value 52 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 8 exceeds gate value 1 for firefox webpack home mean initialActions
Benchmark value 1493 exceeds gate value 1360 for firefox webpack home mean loadScripts
Benchmark value 21 exceeds gate value 13 for firefox webpack home mean setupStore
Benchmark value 2182 exceeds gate value 1935 for firefox webpack home p95 uiStartup
Benchmark value 1835 exceeds gate value 1660 for firefox webpack home p95 load
Benchmark value 1835 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded
Benchmark value 316 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 73 exceeds gate value 49 for firefox webpack home p95 backgroundConnect
Benchmark value 60 exceeds gate value 50 for firefox webpack home p95 firstReactRender
Benchmark value 33 exceeds gate value 32 for firefox webpack home p95 getState
Benchmark value 22 exceeds gate value 2 for firefox webpack home p95 initialActions
Benchmark value 1809 exceeds gate value 1630 for firefox webpack home p95 loadScripts
Benchmark value 110 exceeds gate value 28 for firefox webpack home p95 setupStore
Sum of mean exceeds: 2118ms | Sum of p95 exceeds: 2443.8ms
Sum of all benchmark exceeds: 4561.8ms

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 114 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 15 Bytes (0%)

@Gudahtt Gudahtt enabled auto-merge July 22, 2025 11:43
@Gudahtt Gudahtt added this pull request to the merge queue Jul 22, 2025
Merged via the queue into main with commit 49d7ef2 Jul 22, 2025
276 of 278 checks passed
@Gudahtt Gudahtt deleted the stop-polling-multichain-rates-while-idle branch July 22, 2025 12:18
@github-actions github-actions bot locked and limited conversation to collaborators Jul 22, 2025
@metamaskbot metamaskbot added the release-13.1.0 Issue or pull request that will be included in release 13.1.0 label Jul 22, 2025
@gauthierpetetin gauthierpetetin added release-12.22.3 Issue or pull request that will be included in release 12.22.3 and removed release-13.1.0 Issue or pull request that will be included in release 13.1.0 labels Aug 5, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-12.22.3 Issue or pull request that will be included in release 12.22.3

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants