Skip to content

Fix change workspace condition - #62062

Merged
MarioExpensify merged 11 commits into
mainfrom
cmartins-fixChnageWorkspaceCondition
May 22, 2025
Merged

MarioExpensify merged 11 commits into
mainfrom
cmartins-fixChnageWorkspaceCondition

Conversation

@luacmartins

@luacmartins luacmartins commented May 14, 2025 •

Copy link
Copy Markdown
Contributor

Explanation of Change

Refactors the logic for displaying the Change workspace secondary action option as follows:

  1. Workspaces are eligible for change if they are paid group policies or if the report submitter is a member of the new policy or the current user is an admin of the new policy
  2. The report state and user roles match the conditions laid out in the code. Those conditions are the same ones stablished in OldDot here and here

Fixed Issues

$ #62337

Tests

Pre-condition:

  • An [admin] account, admin of workspaces A and B
  • An [employee] account, member of workspace A and admin of workspace B
  1. [employee] Submit an expense to workspace A
  2. [employee] Click into the report > More button
  3. [employee] Verify that you see the Change workspace option
  4. [admin] Click into the report submitted by employee
  5. [admin] Verify that you see the Change workspace option
  6. [admin] Approve the report
  7. [employee] Verify that you no longer see Change workspace
  8. [admin] Verify that you still see Change workspace
  9. [admin] Pay the report
  10. [admin] Verify that you still see Change workspace
  • Verify that no errors appear in the JS console

Offline tests

N/A

QA Steps

Same as tests

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I verified there are no new alerts related to the canBeMissing param for useOnyx
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Screen.Recording.2025-05-19.at.4.47.23.PM.mov
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
MacOS: Desktop

@luacmartins luacmartins self-assigned this May 14, 2025
@luacmartins luacmartins changed the title Fix chnage workspace condition Fix change workspace condition May 14, 2025
@luacmartins
luacmartins requested a review from suneox May 19, 2025 22:51
@luacmartins
luacmartins marked this pull request as ready for review May 19, 2025 22:51
@luacmartins
luacmartins requested a review from a team as a code owner May 19, 2025 22:51
@melvin-bot
melvin-bot Bot requested a review from MarioExpensify May 19, 2025 22:52
@melvin-bot

melvin-bot Bot commented May 19, 2025

Copy link
Copy Markdown

@MarioExpensify Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@melvin-bot
melvin-bot Bot removed the request for review from a team May 19, 2025 22:52
@suneox

suneox commented May 20, 2025 •

Copy link
Copy Markdown
Contributor

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified there are no new alerts related to the canBeMissing param for useOnyx
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

MacOS: Chrome / Safari
- Expense
Screen.Recording.2025-05-21.at.17.46.41.mp4

Uploading Screen Recording 2025-05-22 at 11.37.28.mp4…

- IOU

Paid

Screen.Recording.2025-05-22.at.11.35.28.mp4

UnPaid

Uploading Screen Recording 2025-05-22 at 11.50.15.mp4…

- Invoice & other
Screen.Recording.2025-05-22.at.11.58.34.mp4
MacOS: Desktop
- Expense
Screen.Recording.2025-05-22.at.12.09.29.mp4
- IOU & other
Android: HybridApp
Screen.Recording.2025-05-22.at.12.11.19.mp4
Android: mWeb Chrome
Screen.Recording.2025-05-22.at.12.22.30.mp4
iOS: HybridApp
Screen.Recording.2025-05-22.at.12.26.54.mp4
iOS: mWeb Safari
Screen.Recording.2025-05-22.at.12.26.54.mov

Comment thread src/libs/ReportUtils.ts
Comment on lines +10486 to +10488
function isWorkspaceEligibleForReportChange(newPolicy: OnyxEntry<Policy>, report: OnyxEntry<Report>, policies: OnyxCollection<Policy>): boolean {
const submitterEmail = getLoginByAccountID(report?.ownerAccountID ?? CONST.DEFAULT_NUMBER_ID);
return isPaidGroupPolicyPolicyUtils(newPolicy) && (isPolicyMember(submitterEmail, newPolicy?.id) || isPolicyAdmin(newPolicy?.id, policies));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

NAB: Currently, the solution section lacks a description of this change, so we can't verify this logic.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yea, I need to update the doc with this logic.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think this change returns incorrect available workspaces

Screen.Recording.2025-05-21.at.17.25.16.mp4

@luacmartins luacmartins May 21, 2025 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Ah the workspaces are correct, but this request is failing with 411 Cannot create policy expense chat for non Policy member. I have a BE PR to add support for this, but basically we'll need a method similar to MoveIOUReportToPolicyAndInviteSubmitter, but for paid policies

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

BE PR is still WIP. @suneox let's continue review here and not block on that.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I got it. Overall, the change set is look good. I'm just a bit confused about this part, so I'll continue the checklist based on the current state.

@suneox

suneox commented May 20, 2025

Copy link
Copy Markdown
Contributor

I need more time to compare with old dot and will complete the checklist today

@luacmartins
luacmartins requested a review from suneox May 20, 2025 21:33

@MarioExpensify MarioExpensify left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code LGTM!! @suneox please let me know when it is ready to merge!

@suneox suneox left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Overall, the change set LGTM. We can verify available ws issue later after BE ready

@melvin-bot
melvin-bot Bot requested a review from MariaHCD May 22, 2025 13:44
@melvin-bot

melvin-bot Bot commented May 22, 2025

Copy link
Copy Markdown

@MariaHCD Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@MarioExpensify
MarioExpensify merged commit 80ecb73 into main May 22, 2025
@MarioExpensify
MarioExpensify deleted the cmartins-fixChnageWorkspaceCondition branch May 22, 2025 14:38
@OSBotify

Copy link
Copy Markdown
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@github-actions github-actions Bot added the DeployBlockerCash This issue or pull request should block deployment label May 22, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Performance Comparison Report 📊 (1/3)

⚠️ Some tests did not pass successfully, so some results are omitted from final report: Open search router TTI, Linking, Money request

Significant Changes To Duration

Name Duration
App start time contentAppeared_To_screenTTI 862.873 ms → 1151.181 ms (+288.308 ms, +33.4%) 🔴🔴
App start time TTI 1555.073 ms → 1816.586 ms (+261.513 ms, +16.8%) 🔴
Show details
Name Duration
App start time contentAppeared_To_screenTTI Baseline
Mean: 862.873 ms
Stdev: 250.704 ms (29.1%)
Runs: 475.6167920008302 495.04209100082517 517.5796719994396 521.8960180003196 546.2986919991672 553.2654929999262 555.9765130002052 559.814774999395 572.477383999154 573.9794050008059 581.7787340003997 583.5837469995022 588.4741370007396 588.9075910001993 594.0641409996897 604.6055100001395 606.0828019995242 612.5831070002168 615.1220410000533 627.1032870002091 632.6862160004675 642.4578130003065 671.6579049993306 676.7099810000509 682.2409480009228 716.9053429998457 728.5482609998435 728.7609289996326 1015.7267569992691 1030.5201440006495 1035.0732860006392 1037.9362100008875 1038.0428669992834 1041.5672990009189 1045.3442850001156 1053.5775649994612 1053.6125419996679 1054.4803110007197 1060.3182469997555 1060.7556020002812 1064.943027999252 1065.7762340009212 1067.4985349997878 1067.8489190004766 1084.3628299999982 1087.2580490000546 1093.5479189995676 1093.8694010004401 1106.3003589995205 1111.5214329995215 1119.187057999894 1129.010045999661 1134.68027099967 1141.8621660005301 1147.5818009991199 1162.476026000455 1166.3744099996984 1172.9872539993376 1181.5829489994794 1192.5545129999518

Current
Mean: 1151.181 ms
Stdev: 47.808 ms (4.2%)
Runs: 1040.6231559999287 1044.7817369997501 1057.8656309992075 1065.752594999969 1076.6286299992353 1081.8938609994948 1086.7644900009036 1109.5930649992079 1114.8882079999894 1126.77131799981 1128.2668239995837 1128.4026089999825 1128.6784000005573 1130.3907580003142 1133.247059000656 1133.9329330008477 1137.06857999973 1140.8279470000416 1142.1549089998007 1148.2990780007094 1149.1798790004104 1150.4968640003353 1150.5938549991697 1151.6775279995054 1153.6281460002065 1153.7245170008391 1156.3563170004636 1156.3862730003893 1156.6098820008337 1162.0484609995037 1163.0026939995587 1164.3951340001076 1165.0885860007256 1175.334409000352 1179.5478959996253 1180.9922000002116 1185.3416879996657 1185.7888409998268 1196.9645540006459 1203.2109719999135 1205.625665999949 1207.7583990003914 1211.28086899966 1214.7024329993874 1223.5812260005623 1226.2922920007259 1230.0422830004245 1240.2070530001074
App start time TTI Baseline
Mean: 1555.073 ms
Stdev: 238.568 ms (15.3%)
Runs: 1131.6167920008302 1183.0420910008252 1200.9075910001993 1212.477383999154 1224.5796719994396 1254.6055100001395 1254.9765130002052 1256.814774999395 1272.8960180003196 1274.0641409996897 1300.6579049993306 1308.0828019995242 1308.9794050008059 1311.6862160004675 1324.4741370007396 1330.2654929999262 1333.9053429998457 1335.7787340003997 1347.709981000051 1365.4578130003065 1368.5831070002168 1376.2409480009228 1376.5837469995022 1381.2986919991672 1385.103287000209 1386.5482609998435 1435.7609289996326 1451.1220410000533 1639.3442850001156 1654.3182469997555 1675.7762340009212 1682.0732860006392 1687.5672990009189 1688.6125419996679 1710.4985349997878 1721.943027999252 1733.8489190004766 1748.010045999661 1748.5201440006495 1755.7267569992691 1756.5214329995215 1773.5479189995676 1778.68027099967 1779.7556020002812 1782.3628299999982 1785.5775649994612 1785.9362100008875 1790.476026000455 1792.3003589995205 1798.8694010004401 1799.8621660005301 1813.4803110007197 1817.5818009991199 1829.0428669992834 1838.3744099996984 1839.9872539993376 1848.5829489994794 1849.187057999894 1851.2580490000546 1852.5545129999518

Current
Mean: 1816.586 ms
Stdev: 80.655 ms (4.4%)
Runs: 1587.0285110007972 1629.7817369997501 1637.6286299992353 1687.5930649992079 1716.7644900009036 1730.8656309992075 1734.77131799981 1755.8279470000416 1762.06857999973 1767.4026089999825 1771.247059000656 1771.2990780007094 1776.6775279995054 1787.6098820008337 1787.6281460002065 1790.3907580003142 1793.8882079999894 1796.3563170004636 1803.4968640003353 1809.6784000005573 1813.6231559999287 1813.8938609994948 1817.1549089998007 1817.9329330008477 1818.1798790004104 1819.0484609995037 1819.5478959996253 1821.0885860007256 1827.3951340001076 1830.3862730003893 1830.7888409998268 1833.9645540006459 1837.5938549991697 1848.752594999969 1856.9922000002116 1862.625665999949 1867.3416879996657 1868.0026939995587 1872.0422830004245 1878.7024329993874 1892.2070530001074 1897.7583990003914 1907.2109719999135 1914.28086899966 1918.334409000352 1926.5812260005623 1953.2922920007259 1958.2668239995837 1991.7245170008391

@github-actions

Copy link
Copy Markdown
Contributor

Performance Comparison Report 📊 (2/3)

Meaningless Changes To Duration (1/2)

Show entries
Name Duration
App start time nativeLaunch 28.433 ms → 29.633 ms (+1.200 ms, +4.2%)
App start time nativeLaunchEnd_To_appCreationStart 99.167 ms → 97.217 ms (-1.950 ms, -2.0%)
App start time appCreationEnd_To_contentAppeared 490.417 ms → 451.982 ms (-38.435 ms, -7.8%)
App start time appCreation 73.678 ms → 77.356 ms (+3.678 ms, +5.0%)
App start time regularAppStart 0.021 ms → 0.021 ms (-0.000 ms, -1.5%)
App start time runJsBundle 320.600 ms → 322.621 ms (+2.021 ms, +0.6%)
App start time (CPU) 152.104 % → 149.068 % (-3.036 %, -2.0%)
App start time (FPS) 60.000 FPS → 60.000 FPS
App start time (RAM) 378.110 MB → 381.358 MB (+3.248 MB, +0.9%)
App start time (CPU/JS) 0.000 % → 0.000 %
App start time (CPU/UI) 28.412 % → 27.607 % (-0.805 %, -2.8%)
Report typing Composer typing rerender count 1.000 renders → 1.000 renders
Report typing Message sent 486.069 ms → 492.990 ms (+6.922 ms, +1.4%)
Report typing (CPU) 75.478 % → 75.718 % (+0.240 %, ±0.0%)
Report typing (FPS) 60.000 FPS → 60.000 FPS
Report typing (RAM) 458.507 MB → 456.586 MB (-1.921 MB, ±0.0%)
Report typing (CPU/JS) 0.000 % → 0.000 %
Report typing (CPU/UI) 17.834 % → 17.952 % (+0.118 %, +0.7%)
Chat opening Chat TTI 890.293 ms → 882.806 ms (-7.487 ms, -0.8%)
Chat opening (CPU) 160.242 % → 159.445 % (-0.796 %, ±0.0%)
Chat opening (FPS) 60.000 FPS → 60.000 FPS
Chat opening (RAM) 397.859 MB → 397.318 MB (-0.542 MB, ±0.0%)
Chat opening (CPU/JS) 0.000 % → 0.000 %
Chat opening (CPU/UI) 32.758 % → 33.036 % (+0.278 %, +0.8%)
Show details
Name Duration
App start time nativeLaunch Baseline
Mean: 28.433 ms
Stdev: 5.622 ms (19.8%)
Runs: 21 21 21 22 23 23 23 23 24 24 24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 26 26 26 26 26 27 27 27 27 28 28 28 28 28 29 29 29 30 31 32 33 34 34 34 35 35 35 35 37 38 38 39 40 42 45

Current
Mean: 29.633 ms
Stdev: 5.459 ms (18.4%)
Runs: 20 21 21 21 22 22 23 24 24 24 24 25 25 25 25 26 26 26 26 26 26 27 27 27 27 28 28 28 29 29 29 30 30 30 30 31 31 32 32 33 33 33 33 33 33 34 34 34 34 35 35 36 36 36 38 38 39 40 41 43
App start time nativeLaunchEnd_To_appCreationStart Baseline
Mean: 99.167 ms
Stdev: 12.931 ms (13.0%)
Runs: 69 71 76 79 80 81 84 84 86 87 87 88 89 89 89 90 91 92 93 93 94 94 96 96 97 97 98 99 100 100 100 101 101 101 101 102 103 103 103 104 106 106 106 108 108 108 108 109 111 111 111 112 112 113 116 116 120 121 129 131

Current
Mean: 97.217 ms
Stdev: 15.846 ms (16.3%)
Runs: 64 70 70 71 75 75 76 77 79 80 81 81 82 83 83 86 87 87 89 91 91 91 92 93 93 94 95 96 97 98 99 100 100 100 100 102 102 103 103 104 104 105 105 107 108 109 109 111 111 114 115 116 116 118 120 120 122 122 123 138
App start time appCreationEnd_To_contentAppeared Baseline
Mean: 490.417 ms
Stdev: 47.751 ms (9.7%)
Runs: 415 426 426 427 427 430 436 438 438 441 442 445 450 453 454 454 456 457 458 461 462 464 465 467 467 469 472 474 475 479 485 488 492 493 493 496 500 503 505 509 510 512 513 524 526 528 531 533 536 540 541 546 551 553 556 565 565 566 618 619

Current
Mean: 451.982 ms
Stdev: 30.232 ms (6.7%)
Runs: 385 401 404 411 411 414 414 417 419 421 426 432 433 434 434 437 437 438 439 439 440 440 442 445 448 448 449 449 450 452 453 456 461 462 462 464 464 465 465 465 470 470 471 471 473 477 477 479 480 491 494 510 516 519 535
App start time appCreation Baseline
Mean: 73.678 ms
Stdev: 7.707 ms (10.5%)
Runs: 53 60 61 63 64 64 64 65 65 65 67 67 67 67 68 68 68 68 69 70 71 71 71 71 72 73 73 74 74 74 74 75 75 76 76 76 77 77 77 77 77 77 77 78 79 79 80 80 81 81 82 84 84 84 85 85 87 87 93

Current
Mean: 77.356 ms
Stdev: 10.307 ms (13.3%)
Runs: 55 60 60 62 63 64 65 66 67 67 67 68 68 69 69 70 70 71 72 72 73 73 73 73 73 73 74 74 76 76 77 77 77 80 80 82 82 82 82 83 83 84 85 85 85 86 87 89 89 89 89 90 91 91 92 93 94 95 102
App start time regularAppStart Baseline
Mean: 0.021 ms
Stdev: 0.002 ms (11.5%)
Runs: 0.015664998441934586 0.017253000289201736 0.017659999430179596 0.017862999811768532 0.018025999888777733 0.01814800128340721 0.018432000651955605 0.018595000728964806 0.018675999715924263 0.01896199956536293 0.019124001264572144 0.01920599862933159 0.019408999010920525 0.019530998542904854 0.01977500133216381 0.019776001572608948 0.019816000014543533 0.019857000559568405 0.01989700086414814 0.019937999546527863 0.020263999700546265 0.020304000005126 0.02034500055015087 0.020549001172184944 0.02075199969112873 0.02075199969112873 0.020913999527692795 0.020913999527692795 0.021076999604701996 0.021118000149726868 0.021361999213695526 0.021361999213695526 0.021484000608325005 0.0215659998357296 0.021687999367713928 0.02185099944472313 0.021890999749302864 0.022095000371336937 0.022176001220941544 0.022258000448346138 0.022339001297950745 0.022582998499274254 0.022909000515937805 0.022988999262452126 0.023111999034881592 0.023194000124931335 0.023194000124931335 0.023274999111890793 0.02404800057411194 0.024373000487685204 0.02490200102329254 0.024984000250697136 0.025187000632286072 0.025350000709295273 0.026041999459266663 0.02669299952685833 0.026937000453472137

Current
Mean: 0.021 ms
Stdev: 0.002 ms (10.1%)
Runs: 0.017334001138806343 0.01753699965775013 0.017781000584363937 0.01826999895274639 0.0185139998793602 0.018758000805974007 0.018960999324917793 0.019206000491976738 0.019206000491976738 0.019368000328540802 0.019409000873565674 0.01940999925136566 0.019612999632954597 0.019693998619914055 0.01973399892449379 0.019816000014543533 0.019816000014543533 0.019857000559568405 0.019937999546527863 0.02006000094115734 0.020100999623537064 0.020101001486182213 0.0201409999281168 0.02018199861049652 0.020263999700546265 0.020426001399755478 0.020508000627160072 0.020547999069094658 0.02058899961411953 0.02075199969112873 0.020791999995708466 0.020792998373508453 0.020914999768137932 0.02099599875509739 0.02103699930012226 0.021158000454306602 0.021239999681711197 0.02128100022673607 0.021361999213695526 0.02144400030374527 0.02148500084877014 0.02185099944472313 0.022257000207901 0.02250099927186966 0.02307100035250187 0.023273998871445656 0.023478999733924866 0.02392599917948246 0.024128999561071396 0.024414001032710075 0.024658000096678734 0.025797998532652855 0.0267340000718832 0.026774000376462936
App start time runJsBundle Baseline
Mean: 320.600 ms
Stdev: 20.133 ms (6.3%)
Runs: 275 275 286 286 288 288 292 292 292 292 293 293 294 294 295 295 296 296 300 300 301 301 301 301 302 302 304 304 304 304 305 305 306 306 309 309 311 311 312 312 314 314 315 315 315 315 316 316 316 316 316 316 316 316 316 316 318 318 319 319 320 320 322 322 322 322 323 323 325 325 325 325 325 325 327 327 328 328 329 329 329 329 331 331 332 332 333 333 334 334 336 336 337 337 339 339 339 339 341 341 343 343 345 345 346 346 346 346 347 347 347 347 348 348 357 357 366 366 367 367

Current
Mean: 322.621 ms
Stdev: 19.750 ms (6.1%)
Runs: 286 286 286 286 290 290 290 290 292 292 297 297 298 298 301 301 301 301 304 304 305 305 305 305 306 306 308 308 310 310 311 311 312 312 312 312 313 313 314 314 315 315 317 317 317 317 317 317 318 318 318 318 318 318 319 319 319 319 319 319 321 321 321 321 323 323 324 324 324 324 325 325 326 326 327 327 331 331 334 334 336 336 336 336 338 338 338 338 339 339 340 340 341 341 344 344 344 344 344 344 345 345 346 346 348 348 352 352 355 355 358 358 359 359 375 375
App start time (CPU) Baseline
Mean: 152.104 %
Stdev: 8.102 % (5.3%)
Runs: 137.07288212419778 138.74468619146845 139.01458482225578 139.24290023378805 139.84387289602012 140.1590457256462 141.68760998392966 141.90565310728238 143.0684498734878 144.968253968254 146.62388095467844 147.12242182302066 147.27706982636556 147.3985539324185 147.59443339960242 147.63915244395238 147.8641173008699 147.87337888718454 147.88900152185462 148.06571601748172 148.4033053428437 148.87968023535336 148.89741598481615 149.23563191412794 149.3663366336634 149.74870393687266 149.75521413196765 150.10688042752165 150.73407828148075 151.55633526710653 151.83656643970517 151.98184388296144 152.45692028504115 152.5630474750696 152.7886787491484 153.57057654075547 153.70895393807336 153.8193891102257 153.9346405228758 154.02861611446446 154.20363109988062 154.46825396825398 154.94498091855388 155.15006640106236 157.86826347305393 158.16326530612238 158.68263473053904 158.70611157501298 158.74492523815024 159.53245619257407 160.96893963589915 161.32475320384856 161.85229540918172 166.25345552765612 166.4675904447127 166.71669848109215 167.16891356066608 172.19320978451992 172.30371534235454

Current
Mean: 149.068 %
Stdev: 5.373 % (3.6%)
Runs: 137.17295425841743 137.9410430565255 139.71560199653808 139.87573365882776 140.60750564927153 141.8171489419025 142.48835662009319 143.05691406032557 143.17044784779404 143.65106500054895 143.66522774638227 143.74552683896619 144.19801980198014 144.77547874547932 145.6483560380896 146.2117177413606 146.24336363466787 146.45908183632739 146.5408857155001 146.95331608617016 147.06223144680092 147.21730950849556 147.33342335937473 148.215422199207 148.31077842177362 149.0930420109194 149.6972585493301 149.70642938490369 150.38038436050363 150.46187428788997 150.58091151985226 150.9735449735449 151.19743347225736 151.3065057008719 151.34136300504764 151.5490436993312 151.56368987384903 151.6073841491106 151.6377106621747 151.70761796460192 151.73316930891482 151.77480880618182 151.78316333212842 151.898868928809 152.61085120959402 152.80793672928667 153.13437381486528 153.44594711712176 153.58250497017895 154.12157648630586 154.5206081067834 154.83825248910463 156.20153038989955 158.33333333333334 159.5725806451613 159.95975855130786 161.69267889922978
App start time (FPS) Baseline
Mean: 60.000 FPS
Stdev: 0.000 FPS (0.0%)
Runs: 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60

Current
Mean: 60.000 FPS
Stdev: 0.000 FPS (0.0%)
Runs: 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60
App start time (RAM) Baseline
Mean: 378.110 MB
Stdev: 11.236 MB (3.0%)
Runs: 351.431640625 354.48828125 356.703125 357.966796875 359.61328125 360.677734375 360.6796875 360.775390625 362.107421875 369.71875 369.9973958333333 371.1953125 371.23828125 371.3346354166667 371.548828125 371.73828125 371.76953125 371.7721354166667 371.798828125 371.853515625 372.5247395833333 373.21875 374.0325520833333 375.01171875 375.3684895833333 376.021484375 376.8971354166667 377.6015625 377.6158854166667 378.470703125 379.013671875 380.0377604166667 381.10546875 381.9986979166667 382.7408854166667 383.54296875 383.7369791666667 384.19140625 384.24609375 384.50390625 384.72265625 384.8854166666667 384.9036458333333 385.0221354166667 385.1002604166667 385.3138020833333 386.1002604166667 386.7057291666667 388.9192708333333 389.3111979166667 390.5364583333333 390.7799479166667 391.625 392.57421875 393.01953125 393.6067708333333 393.95703125 395.1028645833333 396.3932291666667 397.7174479166667

Current
Mean: 381.358 MB
Stdev: 6.387 MB (1.7%)
Runs: 368.8216145833333 370.23046875 370.75 370.80078125 371.7916666666667 372.5390625 372.73046875 372.7734375 372.9713541666667 373.4322916666667 373.6393229166667 373.8411458333333 374.923828125 377.0625 377.2213541666667 377.5364583333333 378.1901041666667 378.2174479166667 378.2265625 378.322265625 379.482421875 379.5221354166667 379.6315104166667 380.43359375 380.6640625 380.6861979166667 381.23828125 381.54296875 381.56640625 381.677734375 382.01953125 382.8815104166667 383.3802083333333 383.53125 383.7513020833333 383.8958333333333 384.1848958333333 384.3515625 384.4895833333333 384.576171875 384.65234375 385.2369791666667 385.4830729166667 385.7057291666667 385.81640625 386.2057291666667 386.2486979166667 386.3216145833333 386.5234375 387.5416666666667 387.78515625 388.22265625 389.8294270833333 390.171875 392.2578125 392.578125 394.7135416666667 395.9127604166667
App start time (CPU/JS) Baseline
Mean: 0.000 %
Stdev: 0.000 % (NaN%)
Runs: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Current
Mean: 0.000 %
Stdev: 0.000 % (NaN%)
Runs: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
App start time (CPU/UI) Baseline
Mean: 28.412 %
Stdev: 3.000 % (10.6%)
Runs: 22 22.7 22.9 24 24 24.5 24.6 24.7 24.7 24.9 25.2 25.8 25.9 26 26.1 26.2 26.5 26.9 27.1 27.2 27.3 27.3 27.8 28 28 28 28 28.5 28.6 28.6 28.9 28.9 29 29 29.2 29.3 29.3 29.5 29.8 29.9 29.9 29.9 30 30 30.1 30.3 30.6 30.6 30.7 31 31 31.1 32.9 32.9 33.2 33.2 33.8 35.1 35.2

Current
Mean: 27.607 %
Stdev: 2.420 % (8.8%)
Runs: 22 23.2 23.9 24 24 24.5 24.6 24.6 24.6 24.7 25.3 25.3 25.3 25.9 25.9 26 26 26 26 26.6 26.6 26.7 27 27.2 27.3 27.8 27.8 27.9 28 28 28 28.1 28.1 28.4 28.6 28.6 28.6 28.8 28.8 28.9 29 29.2 29.3 29.3 29.3 29.3 29.9 29.9 30 30 30.1 30.6 31.1 31.8 31.9 32 33.3
Report typing Composer typing rerender count Baseline
Mean: 1.000 renders
Stdev: 0.000 renders (0.0%)
Runs: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Current
Mean: 1.000 renders
Stdev: 0.000 renders (0.0%)
Runs: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

@github-actions

Copy link
Copy Markdown
Contributor

Performance Comparison Report 📊 (3/3)

Meaningless Changes To Duration (2/2)

Show entries
Name Duration
App start time nativeLaunch 28.433 ms → 29.633 ms (+1.200 ms, +4.2%)
App start time nativeLaunchEnd_To_appCreationStart 99.167 ms → 97.217 ms (-1.950 ms, -2.0%)
App start time appCreationEnd_To_contentAppeared 490.417 ms → 451.982 ms (-38.435 ms, -7.8%)
App start time appCreation 73.678 ms → 77.356 ms (+3.678 ms, +5.0%)
App start time regularAppStart 0.021 ms → 0.021 ms (-0.000 ms, -1.5%)
App start time runJsBundle 320.600 ms → 322.621 ms (+2.021 ms, +0.6%)
App start time (CPU) 152.104 % → 149.068 % (-3.036 %, -2.0%)
App start time (FPS) 60.000 FPS → 60.000 FPS
App start time (RAM) 378.110 MB → 381.358 MB (+3.248 MB, +0.9%)
App start time (CPU/JS) 0.000 % → 0.000 %
App start time (CPU/UI) 28.412 % → 27.607 % (-0.805 %, -2.8%)
Report typing Composer typing rerender count 1.000 renders → 1.000 renders
Report typing Message sent 486.069 ms → 492.990 ms (+6.922 ms, +1.4%)
Report typing (CPU) 75.478 % → 75.718 % (+0.240 %, ±0.0%)
Report typing (FPS) 60.000 FPS → 60.000 FPS
Report typing (RAM) 458.507 MB → 456.586 MB (-1.921 MB, ±0.0%)
Report typing (CPU/JS) 0.000 % → 0.000 %
Report typing (CPU/UI) 17.834 % → 17.952 % (+0.118 %, +0.7%)
Chat opening Chat TTI 890.293 ms → 882.806 ms (-7.487 ms, -0.8%)
Chat opening (CPU) 160.242 % → 159.445 % (-0.796 %, ±0.0%)
Chat opening (FPS) 60.000 FPS → 60.000 FPS
Chat opening (RAM) 397.859 MB → 397.318 MB (-0.542 MB, ±0.0%)
Chat opening (CPU/JS) 0.000 % → 0.000 %
Chat opening (CPU/UI) 32.758 % → 33.036 % (+0.278 %, +0.8%)
Show details
Name Duration
Report typing Message sent Baseline
Mean: 486.069 ms
Stdev: 47.065 ms (9.7%)
Runs: 373.9463299997151 376.1693519987166 378.1265869997442 378.5933029986918 379.17842699959874 386.6387120001018 460.15942399948835 461.11637399718165 464.3930260017514 468.7314050011337 468.78414000198245 469.6867269985378 471.11328199878335 472.1050620004535 472.2495119981468 475.1860349997878 477.18168200179935 477.68253599852324 479.2395429983735 481.69173200055957 484.6369630023837 484.6487639993429 487.0509849973023 487.7079669982195 489.0729980021715 490.98697900027037 492.9873050004244 495.4549149982631 495.5102140009403 497.0718990005553 498.71012400090694 500.3734949976206 501.6359049975872 501.86389200016856 503.78527899831533 516.3268229998648 517.7799890004098 520.6217450015247 520.984496999532 521.2682700008154 521.4761959984899 522.37569199875 523.0773929990828 523.5706379972398 524.6280519999564 525.3708909973502 525.4480799995363 544.719197999686 547.7990319989622 574.9888920001686 575.6033129990101

Current
Mean: 492.990 ms
Stdev: 36.672 ms (7.4%)
Runs: 380.2217200025916 382.85868300125003 406.7688390016556 427.087238997221 461.9318850003183 464.13997500017285 464.3978270031512 464.890583999455 465.66088799759746 466.73815900087357 471.047159999609 471.8968099988997 472.44669600203633 472.6366380006075 473.609496999532 477.06579599902034 480.41223099827766 483.4411620013416 485.2082930020988 486.67899600043893 488.04842199757695 490.6845289990306 496.8231210000813 496.999958999455 497.2460130006075 499.74332700297236 499.92443799972534 502.63924200087786 506.9276130013168 515.1260979995131 516.3071699999273 517.3254400007427 518.0575760006905 519.0882980003953 519.4453939981759 520.3448890000582 521.3511560000479 521.4603270031512 522.140096001327 522.3194169998169 522.5827639997005 522.8712159991264 522.9604899995029 523.3987220004201 525.2493899986148 525.8189699985087 527.0277910009027 532.4678959995508 534.0420329980552 561.9569909982383
Report typing (CPU) Baseline
Mean: 75.478 %
Stdev: 21.429 % (28.4%)
Runs: 44.08381541909022 44.15354354346792 48.2635677890657 48.785564635455344 48.81248468794836 49.14190373688867 49.243561053096705 49.954222567938764 51.64910943230753 51.71992685549365 52.72413293857084 53.205573045279415 53.96331022396234 55.11447121028586 55.26157641269963 55.316269738391455 55.5373589532753 55.582256640031304 55.69433102719941 59.429941915263804 60.35838828819255 60.542297336886016 61.117672224835765 62.65258383474421 66.12825877720626 67.61034254507798 68.79192757893692 72.76652085348216 73.38863156190791 74.78984194723745 78.68246750966928 78.86593276810551 78.86754227662956 79.05005272502375 80.57168163127007 84.25084701158002 84.48894149977016 85.27817359552313 88.19033496214286 89.08224887118197 89.5277383484637 90.20908370492239 90.82684890535631 91.82453225390556 92.83993182194489 93.78495304627637 94.44747040767093 94.81519608672075 97.20496724854267 98.23939640373432 98.72064258385537 100.37054279780864 100.45857833281244 100.64807940350269 101.72337375514142 103.51633355992811 103.52497502467199 103.93723204664288 104.01261510706092 144.93218350577428

Current
Mean: 75.718 %
Stdev: 22.138 % (29.2%)
Runs: 47.119424119032544 47.1943348038591 47.775096677782 48.1999339216304 49.43674180909208 50.57169686096586 50.839403967362 50.96769384976624 50.972204617418505 51.19083952486376 52.23910438619296 52.78633952833073 53.258703372446426 54.15024741930647 54.32501657451435 54.330956417546396 54.88559418270134 55.83787849181135 55.978568873932915 57.02018675130245 57.104825388688354 61.3285426315502 61.528614421059714 62.50007435127765 63.04790340577119 63.33916742968742 65.98479580841722 66.11877788220812 68.55084897889925 70.33737151564586 72.36637761973465 75.60710130957574 77.7997814616026 80.90392824624402 82.46757804841461 82.69007214310095 84.56364340683415 84.94497370366557 87.77796212480294 88.0153027282153 90.22227558787276 92.24539603532891 93.33180615563231 93.7612790146758 93.9074251598126 96.40271819738021 97.44255390342799 98.5406184920565 100.12958883966296 100.14935001363112 102.0104851467879 102.29748366847839 102.49408087430187 102.63697141333421 103.03745552210425 105.91260186527032 112.05711154231335 116.04794689295014 121.81016127523077 122.60412413186633
Report typing (FPS) Baseline
Mean: 60.000 FPS
Stdev: 0.000 FPS (0.0%)
Runs: 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60

Current
Mean: 60.000 FPS
Stdev: 0.000 FPS (0.0%)
Runs: 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60
Report typing (RAM) Baseline
Mean: 458.507 MB
Stdev: 6.432 MB (1.4%)
Runs: 442.7145579268293 442.89588341346155 443.442578125 444.83584872159093 446.2057291666667 446.7389481707317 450.07421875 451.14761513157896 453.2925967261905 453.733984375 454.5516304347826 454.8306686046512 454.8767903645833 455.91841264204544 456.4693216463415 456.7125355113636 457.1982886904762 457.2202785326087 457.5660807291667 458.3530505952381 458.54600694444446 458.72416548295456 459.54923691860466 460.0887152777778 460.482666015625 460.5486111111111 460.59002976190476 460.6302734375 460.89513221153845 461.43168604651163 461.44329637096774 461.8353794642857 461.8604307432432 462.00517578125 462.11151413690476 462.1521990740741 462.38571068548384 462.6175595238095 462.8265830592105 462.8425690406977 463.1291065705128 463.21280570652175 463.53414818548384 463.63657924107144 463.83135190217394 464.1261284722222 464.29377297794116 464.95365767045456 466.1736111111111 466.73939732142856 467.6615625 468.7232142857143

Current
Mean: 456.586 MB
Stdev: 7.584 MB (1.7%)
Runs: 438.01246279761904 441.2982700892857 442.31953125 442.3913892663044 443.6667877906977 444.55815972222223 445.07496279761904 445.1650152439024 445.384375 445.44921875 445.6027513586956 445.9001358695652 450.70338541666666 451.1076388888889 451.740234375 451.81432291666664 452.82629654255317 453.50206801470586 453.5941220238095 455.92066592261904 456.0569661458333 457.4294149709302 457.6429332386364 458.00762648809524 458.0599524456522 458.0900985054348 458.21558277027026 458.2952665441176 458.61257102272725 459.5244140625 459.62109375 460.64880087209303 460.7334449404762 460.865625 460.86842105263156 460.9122869318182 461.0438232421875 461.3985327743902 461.5252976190476 461.9536830357143 461.9911644345238 462.2515980113636 462.4650065104167 462.79017857142856 463.01171875 463.18194444444447 463.2094558189655 463.2330280172414 463.6943108974359 463.76137907608694 463.77027529761904 463.9215029761905 464.0333806818182 464.4555431547619 464.6966488486842 464.7755681818182 465.14203125 466.0736400462963
Report typing (CPU/JS) Baseline
Mean: 0.000 %
Stdev: 0.000 % (NaN%)
Runs: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Current
Mean: 0.000 %
Stdev: 0.000 % (NaN%)
Runs: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Report typing (CPU/UI) Baseline
Mean: 17.834 %
Stdev: 3.400 % (19.1%)
Runs: 11.6 11.7 11.8 11.9 11.9 12.3 12.6 12.6 13.7 13.9 14.1 14.1 14.3 14.5 14.5 14.5 14.7 15.1 15.5 15.6 16 16.5 16.7 18.2 18.4 18.5 18.9 19.1 19.1 19.2 19.3 19.4 19.4 19.5 19.5 19.5 20 20.1 20.1 20.3 20.5 20.5 20.6 20.8 20.8 20.8 20.9 20.9 20.9 20.9 21.1 21.1 21.2 21.3 21.7 22 22.2 22.4 23

Current
Mean: 17.952 %
Stdev: 3.754 % (20.9%)
Runs: 11.6 12 12.1 12.1 12.2 12.3 12.5 12.7 12.7 12.8 14 14.3 14.3 14.4 14.5 14.6 14.7 14.8 15.1 15.2 15.7 15.9 16 17.3 17.5 17.6 18 18.4 18.7 18.7 18.9 19 19.1 19.2 19.3 19.3 19.7 19.9 20 20.1 20.2 20.9 20.9 21 21 21.1 21.2 21.3 21.3 21.5 21.6 21.9 21.9 21.9 21.9 22.1 22.3 24.5 25.6 25.8
Chat opening Chat TTI Baseline
Mean: 890.293 ms
Stdev: 75.360 ms (8.5%)
Runs: 685.500528998673 737.6295580007136 742.2769369967282 746.2372639998794 750.0837409980595 766.6434740014374 772.1367189995944 806.1857100017369 806.4194339998066 808.6188159994781 814.1506760008633 817.219360999763 831.8872070014477 834.8676359988749 836.5044360011816 837.391642998904 839.9425459988415 845.3461919985712 848.6809900030494 850.0956219993532 859.1565360017121 875.9794519990683 883.1894530020654 904.7948409989476 911.1530769988894 917.7117920033634 919.3151040002704 922.9508870020509 925.6955569982529 925.9784750007093 926.2875159978867 926.4273280017078 926.8892830014229 928.2274169996381 928.2772629968822 929.4315599985421 929.6684979982674 930.7522379979491 931.4522310011089 934.3394780009985 938.9283050000668 939.5283209979534 939.9318859986961 940.1287030018866 941.0886640027165 943.7389740012586 948.1796470023692 950.6591810025275 953.1064049974084 954.750121999532 955.588216997683 956.5492770001292 956.8147379979491 958.093384001404 960.5083820000291 964.2048350013793 966.3075769990683 970.3319500014186 1073.3409839980304

Current
Mean: 882.806 ms
Stdev: 73.472 ms (8.3%)
Runs: 676.8859460018575 747.8481450006366 748.0321860015392 760.656576000154 767.3242600001395 768.4275720007718 770.1708579994738 783.2181000001729 794.2332770004869 812.2812099978328 816.9883629977703 819.6086839996278 819.6156009994447 823.522869002074 825.4308679997921 831.6893719993532 833.00614400208 838.0481769964099 839.5294600017369 843.4500330016017 849.1059570014477 872.2067870013416 872.2920739986002 875.9906830005348 886.7176519967616 896.9058029986918 902.8681240007281 904.6902679987252 907.7739669978619 909.5970470011234 914.8384199999273 915.853678997606 916.1486009992659 919.0773519985378 920.4293619990349 920.5597339980304 924.3350830003619 933.578409999609 934.3277589976788 935.5129399970174 938.7889399975538 940.6736659966409 942.4980470016599 942.9023439995944 943.265583999455 947.2178549990058 948.0270589999855 948.0968430005014 952.5995690003037 953.5957849994302 954.4397380016744 962.5976159982383 967.4461680017412 974.453777000308 986.6462399996817 989.8115650005639 994.1035169996321
Chat opening (CPU) Baseline
Mean: 160.242 %
Stdev: 3.500 % (2.2%)
Runs: 154.68286076916004 154.7939694439911 155.03812331494717 155.11373666305107 155.29603422636805 155.30632602122975 155.49427496742425 156.3218337400772 156.4710907241569 156.59504407760454 156.8259152469819 157.08045285192236 157.3617487131169 157.43249191213206 157.55279825870778 157.56017423470206 158.1577712575926 158.29174732685095 158.37074484103553 158.55304206290498 158.61710498607474 158.88356102718717 158.9111429708395 158.94016066219658 159.03990392161987 159.04786859758903 159.08112851123792 159.3100505937833 159.61390497383542 159.6916160837694 160.04572679686177 160.1731218979879 161.0379441674318 161.14757360576797 161.55052915158126 161.60397869954903 161.64876673916206 161.67313447474237 161.81743470588336 162.2934005492183 162.7675390230268 162.8292842550489 162.93829727830834 163.03719867145887 163.06067710610435 163.10331318659993 163.14119747919477 163.75951564414723 164.50036929206388 164.68164953108456 164.83167808024484 164.8669539342189 165.03040421611487 165.40169925754333 165.56707176148248 168.65640426943435 169.16926279575034

Current
Mean: 159.445 %
Stdev: 2.621 % (1.6%)
Runs: 153.31271577934336 155.33290066684825 155.72000151266013 155.980222273111 156.08960581959897 156.45354926028364 156.82399891203235 156.86924245380405 156.87106044094924 157.03304757593202 157.12118512073968 157.22940158727272 157.26408383802323 157.8852406796454 158.004861916626 158.0297446345798 158.16478377422243 158.22558660731823 158.38767164255472 158.4946364858735 158.50063945312687 158.80508989233832 158.88712909979716 158.91501845087984 158.9165768313543 158.93608369171983 159.19791904219773 159.3825991030108 159.41223760360117 159.42266595626808 159.442070558288 159.45493222829566 159.50761038985058 159.53043646267668 160.08605263079306 160.13194477491183 160.25473872163997 160.3507309670587 160.45886366841444 160.72533775444657 160.80845991586673 160.83594245258448 161.2778711710556 161.55135187203277 161.58472107033174 161.73280757682247 161.89640375508532 162.2147383089459 163.73790202945852 163.74977929128187 163.86266521738037 165.44200046122901 165.58517215350062 166.15416363602515
Chat opening (FPS) Baseline
Mean: 60.000 FPS
Stdev: 0.000 FPS (0.0%)
Runs: 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60

Current
Mean: 60.000 FPS
Stdev: 0.000 FPS (0.0%)
Runs: 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60
Chat opening (RAM) Baseline
Mean: 397.859 MB
Stdev: 5.786 MB (1.5%)
Runs: 387.134765625 387.90078125 389.1022135416667 390.162109375 390.173828125 390.3736979166667 390.8815104166667 391.2265625 392.279296875 392.3919270833333 392.6184895833333 392.7545572916667 393.1705729166667 393.2239583333333 393.3078125 393.3190104166667 393.3723958333333 393.484375 393.7213541666667 394.3541666666667 394.3802083333333 395.35703125 395.4876302083333 395.7298177083333 396.04854910714283 396.15625 396.1998697916667 396.7766927083333 396.93359375 397.0442708333333 397.1435546875 397.4153645833333 397.9484375 397.9869791666667 398.4290364583333 399.25 399.453125 399.6295572916667 399.709375 400.13671875 400.2234375 400.40234375 400.45625 401.6731770833333 401.7623697916667 402.14921875 402.3515625 402.9576822916667 403.6614583333333 403.83125 404.2703125 404.6744791666667 405.121875 405.37890625 405.3821614583333 405.439453125 405.447265625 407.6359375 412.1302083333333 414.446875

Current
Mean: 397.318 MB
Stdev: 5.730 MB (1.4%)
Runs: 385.14609375 389.724609375 389.86640625 390.0690104166667 390.68984375 391.0169270833333 391.029296875 391.2845052083333 391.3134765625 391.9984375 392.0130208333333 392.2220052083333 392.4361979166667 392.4518229166667 392.69453125 392.8046875 392.845703125 393.0462239583333 393.2903645833333 393.4967447916667 393.821875 393.8411458333333 394.169921875 394.2493489583333 394.7454427083333 394.787109375 394.85546875 396.2819010416667 396.45078125 396.5872395833333 396.6861979166667 397.0013020833333 397.64453125 397.6490885416667 397.97578125 398.17020089285717 398.6139322916667 398.615234375 398.68247767857144 398.87734375 398.9967447916667 399.8953125 399.931640625 400.205078125 400.4986979166667 401.51171875 402.0520833333333 402.84296875 402.861328125 403.3505859375 403.6 403.9153645833333 404.39453125 404.9203125 405.466796875 406.4153645833333 407.5375 409.059375 409.9546875 412.5171875
Chat opening (CPU/JS) Baseline
Mean: 0.000 %
Stdev: 0.000 % (NaN%)
Runs: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Current
Mean: 0.000 %
Stdev: 0.000 % (NaN%)
Runs: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Chat opening (CPU/UI) Baseline
Mean: 32.758 %
Stdev: 1.646 % (5.0%)
Runs: 28.6 29.6 30.1 30.1 30.3 30.8 31 31.1 31.2 31.3 31.3 31.4 31.5 31.6 31.7 31.7 31.7 31.8 31.9 31.9 31.9 32.2 32.2 32.3 32.3 32.4 32.5 32.5 32.7 32.7 32.7 32.9 33 33.1 33.2 33.3 33.3 33.4 33.4 33.5 33.5 33.7 33.7 33.8 33.8 33.9 34 34 34.1 34.2 34.2 34.3 34.3 34.6 34.9 35.9 36.3 36.5 36.9

Current
Mean: 33.036 %
Stdev: 2.095 % (6.3%)
Runs: 29 29 29.1 29.5 29.9 30 30.4 30.6 30.7 30.8 30.9 31.3 31.4 31.4 31.6 31.6 31.8 31.9 31.9 32.2 32.3 32.3 32.4 32.6 32.7 33 33 33.1 33.2 33.4 33.4 33.4 33.5 33.6 33.6 33.7 33.8 33.8 33.9 33.9 33.9 34 34.1 34.2 34.3 34.3 34.5 34.5 34.5 34.5 34.6 34.8 35.2 35.8 35.9 36.3 37.5 38.2 38.4

@github-actions

Copy link
Copy Markdown
Contributor

@Expensify/mobile-deployers 📣 Please look into this performance regression as it's a deploy blocker.

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/MarioExpensify in version: 9.1.51-0 🚀

platform result
🖥 desktop 🖥 success ✅
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/arosiclair in version: 9.1.51-6 🚀

platform result
🖥 desktop 🖥 success ✅
🕸 web 🕸 success ✅
🤖 android 🤖 failure ❌
🍎 iOS 🍎 success ✅

@c3024

c3024 commented May 30, 2025

Copy link
Copy Markdown
Contributor

@luacmartins

For these steps, the “Move workspace” option shows up in the header, but the backend rejects it, saying that the IOU and workspace payer must be the same.
1. Log in with a new account
2. Create a workspace
3. Enable “Rules” or something else to upgrade the workspace
4. Enable workflows and delay submissions
5. Create a manual expense to someone (not to the workspace chat)
6. Click on the transaction header for this expense > More
7. Click on the “Move workspace” option
8. Backend rejects the request saying: 403 Policy and IOU must share the same payer.

Screen.Recording.2025-05-30.at.8.08.55.PM.mov

Should we show this option only if the IOU and workspace have the same payer? We are working on a PR that uses the isPayer logic for the workspace payer to show this option only when the backend condition matches.

Is this fine?

@c3024 c3024 mentioned this pull request May 30, 2025
51 tasks done
@luacmartins luacmartins removed the DeployBlockerCash This issue or pull request should block deployment label May 30, 2025
@luacmartins

Copy link
Copy Markdown
Contributor Author

Should we show this option only if the IOU and workspace have the same payer?

Yes. Additionally, besides the payer being the same, we can only update the IOU's workspace if all requests come from the same user. So for example:

Scenario 1:

  1. [user a] sends 2 requests to [user b]
  2. [user b] is the IOU payer and also the payer of [workspace]
  3. [user a] cannot move the request to any other workspace because they're not the payer of the IOU report
  4. [user b] can move the request to [workspace] because they are the payer in both

Scenario 2:

  1. [user a] sends 1 request to [user b]
  2. [user b] sends 1 request to [user a]
  3. [user a] and [user b] cannot move the request to any other workspace because the IOU request has requests from multiple users

Comment thread src/libs/ReportUtils.ts
Comment on lines -10513 to -10518
isCurrentUserAdmin &&
verifyState(report, [CONST.REPORT.STATE_NUM.APPROVED]) &&
verifyStatus(report, [CONST.REPORT.STATUS_NUM.APPROVED, CONST.REPORT.STATUS_NUM.REIMBURSED, CONST.REPORT.STATUS_NUM.CLOSED])
) {
return true;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Coming from the #76421 checklist: during the refactor and cleanup of conditions, we missed this case. As a result, the available workspace is shown, but the backend prevents the change

Comment thread src/libs/ReportUtils.ts
return false;
function isWorkspaceEligibleForReportChange(newPolicy: OnyxEntry<Policy>, report: OnyxEntry<Report>, policies: OnyxCollection<Policy>): boolean {
const submitterEmail = getLoginByAccountID(report?.ownerAccountID ?? CONST.DEFAULT_NUMBER_ID);
return isPaidGroupPolicyPolicyUtils(newPolicy) && (isPolicyMember(submitterEmail, newPolicy?.id) || isPolicyAdmin(newPolicy?.id, policies));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Coming from #79075. We should also check here for isPendingDeletePolicy otherwise the change workspace option will be shown whilst offline.

Comment thread src/libs/ReportUtils.ts
Comment on lines +3850 to +3852
if (isSubmitted) {
return (isSubmitter && isAwaitingFirstLevelApproval(report)) || isManager || isAdmin;
}

@cretadn22 cretadn22 May 24, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This behavior is now considered incorrect and was removed in #88530

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.

7 participants