Skip to content

fix: pendingConfirmationsSortedSelector broken selector memoization to prevent global cascading re-renders#39313

Merged
MajorLift merged 3 commits intomainfrom
copilot/fix-pending-confirmations-selector
Jan 23, 2026
Merged

fix: pendingConfirmationsSortedSelector broken selector memoization to prevent global cascading re-renders#39313
MajorLift merged 3 commits intomainfrom
copilot/fix-pending-confirmations-selector

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Jan 16, 2026

Description

Fixed pendingConfirmationsSortedSelector to use proper memoization with createSelector. This selector was creating new arrays on every call, breaking memoization and triggering cascade re-renders throughout the confirmation flow and Routes components.

What is the reason for the change?
The selector was implemented as a plain function that returned new array references on every invocation (via .filter() and .sort()), causing unnecessary re-renders in all dependent components even when the underlying state hadn't changed.

What is the improvement/solution?
Wrapped the selector with createSelector from reselect to memoize the transformation. Now the selector only recalculates when getPendingApprovals returns a different reference, preventing cascade re-renders and improving performance across the confirmation flow.

Changelog

CHANGELOG entry: Fixed critical performance issue slowing down all user actions by fixing confirmations selector memoization

Related issues

Fixes: Part of P0 effort to break global re-render cascade (#6669)

Manual testing steps

  1. This is a performance optimization with no visible UI changes
  2. The memoization behavior is verified through unit tests
  3. All existing confirmation flow functionality remains unchanged

Screenshots/Recordings

N/A - This is a performance optimization with no visual changes. The improvement is verified through unit tests that confirm the selector returns the same reference when state is unchanged.

Before

Selector created new arrays on every call, causing unnecessary re-renders:

export function pendingConfirmationsSortedSelector(state: ConfirmMetamaskState) {
  return getPendingApprovals(state)
    .filter(({ type }) => ConfirmationApprovalTypes.includes(type as ApprovalType))
    .sort((a1, a2) => a1.time - a2.time);
}

After

Selector uses memoization to return stable references:

export const pendingConfirmationsSortedSelector = createSelector(
  getPendingApprovals,
  (approvals) =>
    approvals
      .filter(({ type }) => ConfirmationApprovalTypes.includes(type as ApprovalType))
      .sort((a1, a2) => a1.time - a2.time),
);

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.
Original prompt

This section details on the original issue you should resolve

<issue_title>[P0] Fix pendingConfirmationsSortedSelector (unmemoized)</issue_title>
<issue_description>## Summary

Fix pendingConfirmationsSortedSelector to use proper memoization. This is a P0 critical fix required to break the global re-render cascade.

Parent Epic: #6669 — Break Global Re-render Cascade
Depends on: Fix for getPendingApprovals (#6673)

Problem

pendingConfirmationsSortedSelector is a plain function that creates 2 new arrays on every call:

// ui/pages/confirmations/selectors/confirm.ts
export function pendingConfirmationsSortedSelector(state: ConfirmMetamaskState) {
  return getPendingApprovals(state)
    .filter(({ type }) => ConfirmationApprovalTypes.includes(type as ApprovalType))  // ❌ NEW ARRAY
    .sort((a1, a2) => a1.time - a2.time);  // ❌ NEW ARRAY
}

Used in Routes to determine pending confirmation count and navigation.

This breaks memoization and causes cascade re-renders across all children on every state change.

Solution

Wrap in createSelector to memoize the transformation:

export const pendingConfirmationsSortedSelector = createSelector(
  getPendingApprovals,
  (approvals) =>
    approvals
      .filter(({ type }) => ConfirmationApprovalTypes.includes(type as ApprovalType))
      .sort((a1, a2) => a1.time - a2.time),
);

Files

  • ui/pages/confirmations/selectors/confirm.ts

Acceptance Criteria

  • Selector returns same reference when underlying state unchanged
  • Unit test verifies memoization
  • No regression in existing tests

Estimated Effort

0.5 hours

Labels

perf, selector, P0, team-confirmations</issue_description>

Comments on the Issue (you are @copilot in this section)

  • Fixes MetaMask/MetaMask-planning#6674

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.


Note

Improves selector performance and adds tests around confirmation sorting/filtering.

  • Memoizes pendingConfirmationsSortedSelector with reselect using getPendingApprovals, preserving sort-by-time and confirmation-type filtering while returning stable references
  • Tests: verify sorted output, memoization (same reference when unchanged, new reference on state change), and filtering of non-confirmation approvals; oldestPendingConfirmationSelector behavior validated

Written by Cursor Bugbot for commit 88f2be0. This will update automatically on new commits. Configure here.

Copilot AI changed the title [WIP] Fix pendingConfirmationsSortedSelector for memoization Fix pendingConfirmationsSortedSelector memoization (P0 re-render fix) Jan 16, 2026
Copilot AI requested a review from MajorLift January 16, 2026 05:04
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Jan 16, 2026

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 16, 2026

✨ Files requiring CODEOWNER review ✨

@MetaMask/confirmations (2 files, +68 -10)
  • 📁 ui/
    • 📁 pages/
      • 📁 confirmations/
        • 📁 selectors/
          • 📄 confirm.test.ts +59 -0
          • 📄 confirm.ts +9 -10

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 16, 2026

Builds ready [17e7876]
UI Startup Metrics (1304 ± 114 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13041031167711413751461
load--1092869147210411621256
domContentLoaded--1085866146610411551249
domInteractive--2816169242485
firstPaint--15965974109200301
backgroundConnect--22020026213227252
firstReactRender--16103151926
getState--3718107144263
initialActions--104113
loadScripts--87366512491039401031
setupStore--1283541322
numNetworkReqs--171173161164
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--18981665267319319872322
load--1030890146911610561305
domContentLoaded--1015879146011710481293
domInteractive--35181282632112
firstPaint--192661479169234349
backgroundConnect--286203792141242627
firstReactRender--22174142430
getState--18013269759193232
initialActions--102112
loadScripts--80267312451138181069
setupStore--18104861936
numNetworkReqs--58371412459126
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--8126601079938711026
load--65257393572679798
domContentLoaded--64756892871671792
domInteractive--261592192283
firstPaint--1046133160113267
backgroundConnect--3061403538105
firstReactRender--1711128121728
getState--3515169254473
initialActions--105112
loadScripts--64456691969669789
setupStore--1164451223
numNetworkReqs--171175171171
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1351974217728516031889
load--65057397696647906
domContentLoaded--64156696896635899
domInteractive--32171572830106
firstPaint--14861804109188346
backgroundConnect--102759418621560
firstReactRender--22173842529
getState--16014028321167200
initialActions--104111
loadScripts--63956396094633891
setupStore--1484161533
numNetworkReqs--1073827751137244
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13551078194816814621691
load--1080929168412311571281
domContentLoaded--1079929168412311571276
domInteractive--65321923987142
firstPaint--------
backgroundConnect--54191964867183
firstReactRender--1293231217
getState--135198211026
initialActions--1023212
loadScripts--1046907150510311211235
setupStore--12359101042
numNetworkReqs--19980191375
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--25051844525665024894082
load--1259960267239112402448
domContentLoaded--1258960267139112402448
domInteractive--125351027127123380
firstPaint--------
backgroundConnect--143261207199128594
firstReactRender--231577102454
getState--30060860241459796
initialActions--217123
loadScripts--1193945264132011971970
setupStore--1147785168102606
numNetworkReqs--59301352885111
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--17241370317724418452164
load--14431168295020815321734
domContentLoaded--14421168295020815311734
domInteractive--893024148131157
firstPaint--------
backgroundConnect--832030659128191
firstReactRender--17127161722
getState--1688391728
initialActions--103122
loadScripts--13931136292419714431652
setupStore--2152953616115
numNetworkReqs--19986191373
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--28692149487571628474622
load--16421174322653517302936
domContentLoaded--16421173322653617302935
domInteractive--133321033180107562
firstPaint--------
backgroundConnect--1882512182641471015
firstReactRender--24165862632
getState--286861051249419834
initialActions--204123
loadScripts--15431148304543516642786
setupStore--118877516890541
numNetworkReqs--58271673975160
19--------
📊 Page Load Benchmark Results

Current Commit: 17e7876 | Date: 1/16/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.00s (±76ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 699ms (±72ms) 🟢 | historical mean value: 724ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±14ms) 🟢 | historical mean value: 76ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.00s 76ms 965ms 1.35s 1.23s 1.35s
domContentLoaded 699ms 72ms 663ms 1.03s 911ms 1.03s
firstPaint 76ms 14ms 64ms 208ms 88ms 208ms
firstContentfulPaint 76ms 14ms 64ms 208ms 88ms 208ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 64 Bytes (0%)

@MajorLift MajorLift force-pushed the copilot/fix-pending-confirmations-selector branch from 17e7876 to bc11830 Compare January 16, 2026 21:44
@MajorLift MajorLift changed the title Fix pendingConfirmationsSortedSelector memoization (P0 re-render fix) fix: pendingConfirmationsSortedSelector broken memoization causes global cascading re-renders Jan 16, 2026
@MajorLift MajorLift changed the title fix: pendingConfirmationsSortedSelector broken memoization causes global cascading re-renders fix: pendingConfirmationsSortedSelector broken selector memoization to prevent global cascading re-renders Jan 16, 2026
@MetaMask MetaMask deleted a comment from Copilot AI Jan 16, 2026
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 16, 2026

Builds ready [bc11830]
UI Startup Metrics (1299 ± 108 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--12991048158210813621506
load--1089882136610611511287
domContentLoaded--1082872135610611471281
domInteractive--261688192285
firstPaint--164641203161183304
backgroundConnect--21319625911217238
firstReactRender--16103851828
getState--3618104124352
initialActions--103112
loadScripts--87666111541069381058
setupStore--1373241422
numNetworkReqs--171173161168
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--19181483264419619772333
load--1045919158611910741320
domContentLoaded--1033908157611910661307
domInteractive--34181412633110
firstPaint--1787046481229367
backgroundConnect--281207765136243654
firstReactRender--23176662431
getState--17613528631195249
initialActions--102112
loadScripts--81670213321158361097
setupStore--17114661834
numNetworkReqs--58352162759125
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--8046641078878391001
load--64757785063676793
domContentLoaded--64257484463671788
domInteractive--251689182281
firstPaint--996032046113192
backgroundConnect--2751543232100
firstReactRender--16113641724
getState--3714148264586
initialActions--105112
loadScripts--63957183561669780
setupStore--1376781428
numNetworkReqs--171174171169
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1365980208527515581920
load--693604106391695926
domContentLoaded--682597105891684917
domInteractive--38181813435125
firstPaint--14868896107175316
backgroundConnect--97868918441586
firstReactRender--23183942530
getState--14912823217157179
initialActions--102012
loadScripts--679595104989682908
setupStore--1674351822
numNetworkReqs--983722748136218
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14071117215220614861917
load--1123929184914911731383
domContentLoaded--1122928184914911731383
domInteractive--723330045101138
firstPaint--------
backgroundConnect--56173805465180
firstReactRender--13105051317
getState--145275281223
initialActions--102012
loadScripts--1088914173913411391285
setupStore--164511501038
numNetworkReqs--19981201377
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--26251854559372926144692
load--13191029283940612972665
domContentLoaded--13181029283940612962664
domInteractive--133351216149115445
firstPaint--------
backgroundConnect--151381146210125732
firstReactRender--251683112655
getState--277701322229366764
initialActions--213123
loadScripts--12491000269631012722074
setupStore--15711737189165647
numNetworkReqs--60311703982164
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--15511292224619216671947
load--13111119164312314021555
domContentLoaded--13111119164312314011555
domInteractive--882815640129140
firstPaint--------
backgroundConnect--60202644965165
firstReactRender--14102421519
getState--167150191535
initialActions--103122
loadScripts--12751098159410613471463
setupStore--194242341481
numNetworkReqs--19980181672
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--27722134499867827964179
load--15731185297348816532736
domContentLoaded--15731185297348816532736
domInteractive--121281024160101497
firstPaint--------
backgroundConnect--1872313242871411123
firstReactRender--261682112946
getState--345611235285520878
initialActions--204123
loadScripts--14731153274737615442489
setupStore--1117764155109522
numNetworkReqs--58291643878158
19--------
📊 Page Load Benchmark Results

Current Commit: bc11830 | Date: 1/16/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±36ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 720ms (±34ms) 🟢 | historical mean value: 719ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±12ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 36ms 1.01s 1.30s 1.06s 1.30s
domContentLoaded 720ms 34ms 701ms 973ms 741ms 973ms
firstPaint 77ms 12ms 60ms 180ms 88ms 180ms
firstContentfulPaint 77ms 12ms 60ms 180ms 88ms 180ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 64 Bytes (0%)

@MajorLift MajorLift marked this pull request as ready for review January 16, 2026 22:44
@MajorLift MajorLift requested a review from a team as a code owner January 16, 2026 22:44
cursor[bot]

This comment was marked as outdated.

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 20, 2026

Builds ready [9772af4]
UI Startup Metrics (1270 ± 111 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--12701037157711113381431
load--1062863134010211191255
domContentLoaded--1056858133010111121246
domInteractive--2515102192281
firstPaint--142621089112176274
backgroundConnect--21620126710221235
firstReactRender--14103041623
getState--351877103953
initialActions--102112
loadScripts--84765611311019051041
setupStore--1273841217
numNetworkReqs--171177161164
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--18441598278621119502293
load--97385416691289881288
domContentLoaded--96183516581299691281
domInteractive--3217164253095
firstPaint--193631681178215287
backgroundConnect--256191683124222614
firstReactRender--21155142427
getState--18014425926195241
initialActions--102112
loadScripts--76764414321267721081
setupStore--1594971534
numNetworkReqs--59351562757139
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--8526811144869061034
load--68960096577731834
domContentLoaded--68459796077726827
domInteractive--2716100202392
firstPaint--1035929349118200
backgroundConnect--236118233374
firstReactRender--18113962029
getState--3716147204866
initialActions--103111
loadScripts--68159595876720824
setupStore--1344171430
numNetworkReqs--171170161163
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13301004225825714231896
load--694609102684712895
domContentLoaded--685600102185702890
domInteractive--36171452935117
firstPaint--1316437271173278
backgroundConnect--82861415331514
firstReactRender--23173742428
getState--14812927418155173
initialActions--104112
loadScripts--683598101283700883
setupStore--15105071627
numNetworkReqs--993624448136219
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--15401157216821416402022
load--12201000182512813011413
domContentLoaded--12201000182512813011413
domInteractive--833323245118166
firstPaint--------
backgroundConnect--712132557100189
firstReactRender--15114671439
getState--166147221329
initialActions--103122
loadScripts--1173981171110712311334
setupStore--164201261241
numNetworkReqs--19974171373
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--25291754534771725344464
load--12611007299038711982613
domContentLoaded--12611006298938711982612
domInteractive--1183754192117331
firstPaint--------
backgroundConnect--123321177173113359
firstReactRender--23166492534
getState--27373881222339806
initialActions--203123
loadScripts--1212963277835811692575
setupStore--15711850208143658
numNetworkReqs--5227109228090
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16311364235518617032008
load--13581159170312014191601
domContentLoaded--13571159170312014191600
domInteractive--963125552132182
firstPaint--------
backgroundConnect--59182074377152
firstReactRender--15114541520
getState--177121181542
initialActions--102122
loadScripts--13211144159910013881511
setupStore--2462634215120
numNetworkReqs--19978181370
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--30172089823999436344861
load--16821154327360717403048
domContentLoaded--16811154327260717403048
domInteractive--11432106414099366
firstPaint--------
backgroundConnect--2052013472982031102
firstReactRender--2516119142636
getState--31770894257542822
initialActions--203122
loadScripts--15661136310347517022825
setupStore--1228767177110609
numNetworkReqs--5030112207090
19--------
📊 Page Load Benchmark Results

Current Commit: 9772af4 | Date: 1/20/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±42ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 716ms (±38ms) 🟢 | historical mean value: 734ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±12ms) 🟢 | historical mean value: 81ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 42ms 1.01s 1.32s 1.04s 1.32s
domContentLoaded 716ms 38ms 698ms 993ms 724ms 993ms
firstPaint 76ms 12ms 60ms 172ms 84ms 172ms
firstContentfulPaint 76ms 12ms 60ms 172ms 84ms 172ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 58 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 51 Bytes (0%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 21, 2026

Builds ready [f542ff5]
📊 Page Load Benchmark Results

Current Commit: f542ff5 | Date: 1/21/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.02s (±39ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 710ms (±36ms) 🟢 | historical mean value: 725ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 74ms (±10ms) 🟢 | historical mean value: 78ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.02s 39ms 997ms 1.31s 1.04s 1.31s
domContentLoaded 710ms 36ms 689ms 982ms 725ms 982ms
firstPaint 74ms 10ms 60ms 156ms 84ms 156ms
firstContentfulPaint 74ms 10ms 60ms 156ms 84ms 156ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 58 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 51 Bytes (0%)

@MajorLift MajorLift force-pushed the copilot/fix-pending-confirmations-selector branch from f542ff5 to 9772af4 Compare January 21, 2026 20:09
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 21, 2026

Builds ready [9772af4]
UI Startup Metrics (1294 ± 95 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1294105416589513461416
load--108487913478611341211
domContentLoaded--107887413418511291202
domInteractive--2615138192275
firstPaint--172651159180187296
backgroundConnect--21720126210221241
firstReactRender--1693651825
getState--351766104155
initialActions--104112
loadScripts--867678110684919987
setupStore--1372641523
numNetworkReqs--171176161163
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--------
load--------
domContentLoaded--------
domInteractive--------
firstPaint--------
backgroundConnect--------
firstReactRender--------
getState--------
initialActions--------
loadScripts--------
setupStore--------
numNetworkReqs--------
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--846672116882889983
load--69159295573759839
domContentLoaded--68558894673752834
domInteractive--2816113202489
firstPaint--1086341556127222
backgroundConnect--2662073334112
firstReactRender--17113851928
getState--3415130194266
initialActions--105112
loadScripts--68258693972746826
setupStore--1253151423
numNetworkReqs--171186171166
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13301005429138014431817
load--699598106191717901
domContentLoaded--689591105691705891
domInteractive--36181742834109
firstPaint--1436740470194284
backgroundConnect--708295930620365
firstReactRender--22173632428
getState--14812627520153189
initialActions--103111
loadScripts--686589104890703887
setupStore--1774281836
numNetworkReqs--1072621742135194
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14181100198019415481827
load--1126905152913112001398
domContentLoaded--1125901152913111991398
domInteractive--753023350100180
firstPaint--------
backgroundConnect--60211884483156
firstReactRender--13103831419
getState--146212211331
initialActions--103122
loadScripts--1086893145510511531279
setupStore--154199261233
numNetworkReqs--19979181374
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--26331906634674128504275
load--1202958254225412641688
domContentLoaded--1201958254225412631687
domInteractive--1273354894130324
firstPaint--------
backgroundConnect--3302517784494261371
firstReactRender--21153542328
getState--300773023346413729
initialActions--213123
loadScripts--1140939243519711561573
setupStore--12671213177124557
numNetworkReqs--5915105217689
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--15671261213918516791946
load--13321122176313113871592
domContentLoaded--13321122176313113871591
domInteractive--892823043130146
firstPaint--------
backgroundConnect--54172884550143
firstReactRender--15116071522
getState--148140141522
initialActions--103012
loadScripts--13021108164311613601569
setupStore--144353341318
numNetworkReqs--19991181371
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--289620368514105928424995
load--16091126710586415213094
domContentLoaded--16081126710586415203093
domInteractive--199295020638109370
firstPaint--------
backgroundConnect--2002711652711891025
firstReactRender--2515251232631
getState--32186914257496868
initialActions--207123
loadScripts--15221106708381314772847
setupStore--11181218167106573
numNetworkReqs--57291672675104
19--------
📊 Page Load Benchmark Results

Current Commit: 9772af4 | Date: 1/21/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±42ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 719ms (±38ms) 🟢 | historical mean value: 718ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±13ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 42ms 1.00s 1.33s 1.07s 1.33s
domContentLoaded 719ms 38ms 694ms 999ms 751ms 999ms
firstPaint 76ms 13ms 60ms 180ms 88ms 180ms
firstContentfulPaint 76ms 13ms 60ms 180ms 88ms 180ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 4.88 KiB (0.09%)
  • ui: -31.5 KiB (-0.4%)
  • common: -136.41 KiB (-1.47%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 21, 2026

Builds ready [9772af4]
UI Startup Metrics (1294 ± 95 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1294105416589513461416
load--108487913478611341211
domContentLoaded--107887413418511291202
domInteractive--2615138192275
firstPaint--172651159180187296
backgroundConnect--21720126210221241
firstReactRender--1693651825
getState--351766104155
initialActions--104112
loadScripts--867678110684919987
setupStore--1372641523
numNetworkReqs--171176161163
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--------
load--------
domContentLoaded--------
domInteractive--------
firstPaint--------
backgroundConnect--------
firstReactRender--------
getState--------
initialActions--------
loadScripts--------
setupStore--------
numNetworkReqs--------
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--846672116882889983
load--69159295573759839
domContentLoaded--68558894673752834
domInteractive--2816113202489
firstPaint--1086341556127222
backgroundConnect--2662073334112
firstReactRender--17113851928
getState--3415130194266
initialActions--105112
loadScripts--68258693972746826
setupStore--1253151423
numNetworkReqs--171186171166
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13301005429138014431817
load--699598106191717901
domContentLoaded--689591105691705891
domInteractive--36181742834109
firstPaint--1436740470194284
backgroundConnect--708295930620365
firstReactRender--22173632428
getState--14812627520153189
initialActions--103111
loadScripts--686589104890703887
setupStore--1774281836
numNetworkReqs--1072621742135194
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14181100198019415481827
load--1126905152913112001398
domContentLoaded--1125901152913111991398
domInteractive--753023350100180
firstPaint--------
backgroundConnect--60211884483156
firstReactRender--13103831419
getState--146212211331
initialActions--103122
loadScripts--1086893145510511531279
setupStore--154199261233
numNetworkReqs--19979181374
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--26331906634674128504275
load--1202958254225412641688
domContentLoaded--1201958254225412631687
domInteractive--1273354894130324
firstPaint--------
backgroundConnect--3302517784494261371
firstReactRender--21153542328
getState--300773023346413729
initialActions--213123
loadScripts--1140939243519711561573
setupStore--12671213177124557
numNetworkReqs--5915105217689
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--15671261213918516791946
load--13321122176313113871592
domContentLoaded--13321122176313113871591
domInteractive--892823043130146
firstPaint--------
backgroundConnect--54172884550143
firstReactRender--15116071522
getState--148140141522
initialActions--103012
loadScripts--13021108164311613601569
setupStore--144353341318
numNetworkReqs--19991181371
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--289620368514105928424995
load--16091126710586415213094
domContentLoaded--16081126710586415203093
domInteractive--199295020638109370
firstPaint--------
backgroundConnect--2002711652711891025
firstReactRender--2515251232631
getState--32186914257496868
initialActions--207123
loadScripts--15221106708381314772847
setupStore--11181218167106573
numNetworkReqs--57291672675104
19--------
📊 Page Load Benchmark Results

Current Commit: 9772af4 | Date: 1/21/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±42ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 719ms (±38ms) 🟢 | historical mean value: 718ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±13ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 42ms 1.00s 1.33s 1.07s 1.33s
domContentLoaded 719ms 38ms 694ms 999ms 751ms 999ms
firstPaint 76ms 13ms 60ms 180ms 88ms 180ms
firstContentfulPaint 76ms 13ms 60ms 180ms 88ms 180ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 4.88 KiB (0.09%)
  • ui: -31.5 KiB (-0.4%)
  • common: -136.41 KiB (-1.47%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Jan 22, 2026

Builds ready [88f2be0]
UI Startup Metrics (1292 ± 102 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--12921065165310213561460
load--107987414419911421232
domContentLoaded--107387114339911381225
domInteractive--261597172378
firstPaint--1376327257185249
backgroundConnect--22020128213225244
firstReactRender--1693851828
getState--371891124362
initialActions--107113
loadScripts--8616741158959251013
setupStore--1262641323
numNetworkReqs--181282151264
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--296016507621136040895558
load--1115921159012912201339
domContentLoaded--1097914157712611921315
domInteractive--35191272434109
firstPaint--1828151579230302
backgroundConnect--762213483783912042621
firstReactRender--22165352431
getState--31113219703163201103
initialActions--103112
loadScripts--87270813331209571092
setupStore--20657112544
numNetworkReqs--90452513596185
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--850673113790905999
load--68859889474746829
domContentLoaded--68359488974741822
domInteractive--261691182479
firstPaint--1086364874117234
backgroundConnect--2251272630102
firstReactRender--16113841825
getState--3316115184269
initialActions--106112
loadScripts--68059288773739819
setupStore--1375981431
numNetworkReqs--181275161267
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13191011205923114541864
load--694614108680711875
domContentLoaded--683608107981701870
domInteractive--37181672835115
firstPaint--1516876790195274
backgroundConnect--51862211818383
firstReactRender--22173832329
getState--15413053446157198
initialActions--102111
loadScripts--680606107080699862
setupStore--20853102141
numNetworkReqs--994424634118161
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13651062195618514791727
load--1104918145012611771352
domContentLoaded--1103918145012611731352
domInteractive--68312314291142
firstPaint--------
backgroundConnect--56202454575139
firstReactRender--1394661331
getState--126133131226
initialActions--102122
loadScripts--1066905134210511231288
setupStore--163208281147
numNetworkReqs--191082161569
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--27451982773171828903626
load--13591027258731914182334
domContentLoaded--13591021258731914172334
domInteractive--2164815552802611252
firstPaint--------
backgroundConnect--3434124504334771416
firstReactRender--23166872532
getState--22772652157243605
initialActions--213123
loadScripts--12991002255930313582297
setupStore--15723779168164600
numNetworkReqs--80361402388128
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16501330228018317701968
load--13781129180313314621642
domContentLoaded--13781129180313314621642
domInteractive--932835659130215
firstPaint--------
backgroundConnect--65202014486161
firstReactRender--15122521620
getState--209258351669
initialActions--102022
loadScripts--13381110177211913761544
setupStore--176208281357
numNetworkReqs--201083171471
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--28542105845973729943710
load--15011256255025115652108
domContentLoaded--15001255255025115652107
domInteractive--164401302153202400
firstPaint--------
backgroundConnect--3863543155105511088
firstReactRender--25166592656
getState--265641118228347762
initialActions--213123
loadScripts--14291229253220414941743
setupStore--11114636114145337
numNetworkReqs--78341712783158
19--------
📊 Page Load Benchmark Results

Current Commit: 88f2be0 | Date: 1/22/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.01s (±44ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 699ms (±61ms) 🟢 | historical mean value: 722ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 88ms (±123ms) 🟢 | historical mean value: 79ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.01s 44ms 983ms 1.34s 1.02s 1.34s
domContentLoaded 699ms 61ms 670ms 1.24s 708ms 1.24s
firstPaint 88ms 123ms 64ms 1.31s 84ms 1.31s
firstContentfulPaint 88ms 123ms 64ms 1.31s 84ms 1.31s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 58 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 51 Bytes (0%)

Copy link
Copy Markdown
Contributor

@adonesky1 adonesky1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@MajorLift MajorLift added this pull request to the merge queue Jan 23, 2026
Merged via the queue into main with commit 5c27c80 Jan 23, 2026
354 of 357 checks passed
@MajorLift MajorLift deleted the copilot/fix-pending-confirmations-selector branch January 23, 2026 09:18
@github-actions github-actions bot locked and limited conversation to collaborators Jan 23, 2026
@metamaskbot metamaskbot added the release-13.17.0 Issue or pull request that will be included in release 13.17.0 label Jan 23, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

external-contributor release-13.17.0 Issue or pull request that will be included in release 13.17.0 size-S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants