Skip to content

perf(keyring-controller): do not fire unnecessary :stageChange in withKeyring #5732

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
May 5, 2025

Conversation

ccharly
Copy link
Contributor

@ccharly ccharly commented Apr 30, 2025

Explanation

We were always calling #updateVault when using withKeyring even when the keyring was not mutated.

This PR now compare the states after the operation execution and see if the keyring got updated or not and decide to call #updateVault only if needed.

Testing PR:

References

N/A

Changelog

N/A

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@ccharly ccharly force-pushed the perf/with-keyring branch from ba27fd6 to f603e07 Compare April 30, 2025 11:53
@ccharly
Copy link
Contributor Author

ccharly commented Apr 30, 2025

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "27.0.0-preview-f603e07",
  "@metamask-previews/address-book-controller": "6.0.3-preview-f603e07",
  "@metamask-previews/announcement-controller": "7.0.3-preview-f603e07",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-f603e07",
  "@metamask-previews/approval-controller": "7.1.3-preview-f603e07",
  "@metamask-previews/assets-controllers": "60.0.0-preview-f603e07",
  "@metamask-previews/base-controller": "8.0.1-preview-f603e07",
  "@metamask-previews/bridge-controller": "19.0.0-preview-f603e07",
  "@metamask-previews/bridge-status-controller": "16.0.0-preview-f603e07",
  "@metamask-previews/build-utils": "3.0.3-preview-f603e07",
  "@metamask-previews/chain-agnostic-permission": "0.5.0-preview-f603e07",
  "@metamask-previews/composable-controller": "11.0.0-preview-f603e07",
  "@metamask-previews/controller-utils": "11.7.0-preview-f603e07",
  "@metamask-previews/delegation-controller": "0.1.0-preview-f603e07",
  "@metamask-previews/earn-controller": "0.12.0-preview-f603e07",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-f603e07",
  "@metamask-previews/ens-controller": "16.0.0-preview-f603e07",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-f603e07",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-f603e07",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-f603e07",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-f603e07",
  "@metamask-previews/keyring-controller": "21.0.4-preview-f603e07",
  "@metamask-previews/logging-controller": "6.0.4-preview-f603e07",
  "@metamask-previews/message-manager": "12.0.1-preview-f603e07",
  "@metamask-previews/multichain": "4.0.0-preview-f603e07",
  "@metamask-previews/multichain-api-middleware": "0.2.0-preview-f603e07",
  "@metamask-previews/multichain-network-controller": "0.5.1-preview-f603e07",
  "@metamask-previews/multichain-transactions-controller": "0.9.0-preview-f603e07",
  "@metamask-previews/name-controller": "8.0.3-preview-f603e07",
  "@metamask-previews/network-controller": "23.3.0-preview-f603e07",
  "@metamask-previews/notification-services-controller": "6.0.0-preview-f603e07",
  "@metamask-previews/permission-controller": "11.0.6-preview-f603e07",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-f603e07",
  "@metamask-previews/phishing-controller": "12.5.0-preview-f603e07",
  "@metamask-previews/polling-controller": "13.0.0-preview-f603e07",
  "@metamask-previews/preferences-controller": "17.0.0-preview-f603e07",
  "@metamask-previews/profile-sync-controller": "12.0.0-preview-f603e07",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-f603e07",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-f603e07",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-f603e07",
  "@metamask-previews/sample-controllers": "0.1.0-preview-f603e07",
  "@metamask-previews/selected-network-controller": "22.0.0-preview-f603e07",
  "@metamask-previews/signature-controller": "27.1.0-preview-f603e07",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-f603e07",
  "@metamask-previews/transaction-controller": "54.3.0-preview-f603e07",
  "@metamask-previews/user-operation-controller": "33.0.0-preview-f603e07"
}

@ccharly ccharly marked this pull request as ready for review April 30, 2025 14:13
@ccharly ccharly requested review from a team as code owners April 30, 2025 14:13
this.#assertIsUnlocked();
return this.#persistOrRollback(async () => true);
return this.#withRollback(async () => {
this.#assertIsUnlocked();
Copy link
Member

Choose a reason for hiding this comment

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

Note that I suggested to place the assertion after acquiring the mutex on purpose: I think we should change all the other ones as well (in another PR)
#5757

mikesposito
mikesposito previously approved these changes May 5, 2025
Copy link
Member

@mikesposito mikesposito left a comment

Choose a reason for hiding this comment

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

LGTM!

@ccharly
Copy link
Contributor Author

ccharly commented May 5, 2025

@metamaskbot publish-preview

Copy link
Contributor

github-actions bot commented May 5, 2025

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "27.0.0-preview-b84ab30f",
  "@metamask-previews/address-book-controller": "6.0.3-preview-b84ab30f",
  "@metamask-previews/announcement-controller": "7.0.3-preview-b84ab30f",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-b84ab30f",
  "@metamask-previews/approval-controller": "7.1.3-preview-b84ab30f",
  "@metamask-previews/assets-controllers": "60.0.0-preview-b84ab30f",
  "@metamask-previews/base-controller": "8.0.1-preview-b84ab30f",
  "@metamask-previews/bridge-controller": "19.0.0-preview-b84ab30f",
  "@metamask-previews/bridge-status-controller": "16.0.0-preview-b84ab30f",
  "@metamask-previews/build-utils": "3.0.3-preview-b84ab30f",
  "@metamask-previews/chain-agnostic-permission": "0.5.0-preview-b84ab30f",
  "@metamask-previews/composable-controller": "11.0.0-preview-b84ab30f",
  "@metamask-previews/controller-utils": "11.7.0-preview-b84ab30f",
  "@metamask-previews/delegation-controller": "0.1.0-preview-b84ab30f",
  "@metamask-previews/earn-controller": "0.12.0-preview-b84ab30f",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-b84ab30f",
  "@metamask-previews/ens-controller": "16.0.0-preview-b84ab30f",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-b84ab30f",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-b84ab30f",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-b84ab30f",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-b84ab30f",
  "@metamask-previews/keyring-controller": "21.0.4-preview-b84ab30f",
  "@metamask-previews/logging-controller": "6.0.4-preview-b84ab30f",
  "@metamask-previews/message-manager": "12.0.1-preview-b84ab30f",
  "@metamask-previews/multichain": "4.0.0-preview-b84ab30f",
  "@metamask-previews/multichain-api-middleware": "0.2.0-preview-b84ab30f",
  "@metamask-previews/multichain-network-controller": "0.5.1-preview-b84ab30f",
  "@metamask-previews/multichain-transactions-controller": "0.9.0-preview-b84ab30f",
  "@metamask-previews/name-controller": "8.0.3-preview-b84ab30f",
  "@metamask-previews/network-controller": "23.3.0-preview-b84ab30f",
  "@metamask-previews/notification-services-controller": "6.0.0-preview-b84ab30f",
  "@metamask-previews/permission-controller": "11.0.6-preview-b84ab30f",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-b84ab30f",
  "@metamask-previews/phishing-controller": "12.5.0-preview-b84ab30f",
  "@metamask-previews/polling-controller": "13.0.0-preview-b84ab30f",
  "@metamask-previews/preferences-controller": "17.0.0-preview-b84ab30f",
  "@metamask-previews/profile-sync-controller": "12.0.0-preview-b84ab30f",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-b84ab30f",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-b84ab30f",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-b84ab30f",
  "@metamask-previews/sample-controllers": "0.1.0-preview-b84ab30f",
  "@metamask-previews/selected-network-controller": "22.0.0-preview-b84ab30f",
  "@metamask-previews/signature-controller": "27.1.0-preview-b84ab30f",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-b84ab30f",
  "@metamask-previews/transaction-controller": "54.3.0-preview-b84ab30f",
  "@metamask-previews/user-operation-controller": "33.0.0-preview-b84ab30f"
}

@ccharly ccharly enabled auto-merge (squash) May 5, 2025 18:06
@ccharly ccharly disabled auto-merge May 5, 2025 18:06
@ccharly
Copy link
Contributor Author

ccharly commented May 5, 2025

@ccharly ccharly merged commit a5465bb into main May 5, 2025
202 checks passed
@ccharly ccharly deleted the perf/with-keyring branch May 5, 2025 19:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: performance degradation during account creation
4 participants