Skip to content
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

Add simple loader to payment method list #11592

Merged
merged 32 commits into from
Jan 19, 2023
Merged

Conversation

ctkochan22
Copy link
Contributor

@ctkochan22 ctkochan22 commented Oct 4, 2022

@Expensify/pullerbear @nkuoch

Details

Adds a simple loader

Fixed Issues

$ #11460
$ #11460

Tests/QA

  1. Add a payment method, card or bank account
  2. Sign out (or go into console->applications and clear out bankaccountlist and cardlist). We want to start with nothing already loaded
  3. Go to account settings and before navigating to Payments, go offline
  4. Click "Payments" and verify that you do not see an infinite loader. You see no activity that is indicative of pattern none
  5. Now go to console->network-> slow 3G speed. Verify that you see a spinner before your payment methods eventually load

PR Review Checklist

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 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 included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • iOS / native
    • Android / native
    • iOS / Safari
    • Android / Chrome
    • MacOS / Chrome
    • 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 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 was added in all src/languages/* files
    • I verified any copy / text that was added to the app is correct English and approved by marketing by tagging the marketing team on the original GH to get the correct copy.
    • 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.js 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 */
    • Any functional components have the displayName property
    • 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 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(themeColors.componentBG)
  • 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.
  • I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

PR Reviewer Checklist

The reviewer will copy/paste it into a new comment and complete it after the author checklist is completed

  • 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 verified tests pass on all platforms & I tested again on:
    • iOS / native
    • Android / native
    • iOS / Safari
    • Android / Chrome
    • MacOS / Chrome
    • 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 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 was added in all src/languages/* files
    • I verified any copy / text that was added to the app is correct English and approved by marketing by tagging the marketing team on the original GH to get the correct copy.
    • 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.js 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 */
    • Any functional components have the displayName property
    • 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 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(themeColors.componentBG)
  • 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.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

QA Steps

Test

  • Sign out and sign back in
  • Go to "Accounts" -> Payments
  • Verify that you don't see the loader flash. You either never see it because your internet connection is fast. Or for a long enough moment to see that it was loading.
  • Click the back carrot
  • Click "Payments" again, and verify that you don't see a spinner.

Test

  • Sign out and sign back in
  • Set your network speed to "Slow 3G"
  • Go to "Accounts" -> Payments
  • You may see the balance of zero for a moment before have have to load.
  • Click the back carrot
  • Click "Payments" again, and verify that you see the balance. Then a spinner. Then a balance. Make sure it all takes a moment, and it never "flashes"
    Video Example: https://recordit.co/GoFOIWOdA8

Test

  • Sign out and sign back in
  • Go offline
  • Click "Accounts" -> Payments.
  • Verify that the balance is greyed out.
    Video Example: https://recordit.co/0SEts8J1ak

Screenshots

Web

pZXVCJPTIL

Mobile Web - Chrome

https://recordit.co/EJwbMELIz5

Mobile Web - Safari

https://recordit.co/yOIbhuFCWk

Desktop

https://recordit.co/vCrCHuYg3d

iOS

https://recordit.co/cuRlGUY8jG

@ctkochan22 ctkochan22 requested a review from nkuoch October 4, 2022 21:06
@ctkochan22 ctkochan22 requested a review from a team as a code owner October 4, 2022 21:06
@ctkochan22 ctkochan22 self-assigned this Oct 4, 2022
@melvin-bot melvin-bot bot requested review from dangrous and removed request for a team October 4, 2022 21:07
@ctkochan22 ctkochan22 changed the base branch from master to main October 4, 2022 21:10
Copy link
Contributor

@dangrous dangrous left a comment

Choose a reason for hiding this comment

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

So this is working for me and code looks good. Two questions though:

  1. It's failing the security/snyk check. I imagine that's nothing to do with your code? Maybe merge main again - though if it JUST happened then we might have to wait.
  2. This is more a design thought so I guess technically NAB but it bothers me that the loader has less height than a single bank account so it jumps when the list eventually loads (if you only have one account). Is there a way to add padding to it?

@nkuoch
Copy link
Contributor

nkuoch commented Oct 5, 2022

Can you find a way to show the loader right away?

@dangrous
Copy link
Contributor

I'm sure this isn't a priority right now but figured I'd check in to see how things are going - let me know if there's something new to review and happy to do so!

@ctkochan22
Copy link
Contributor Author

We've since moved the payment method button to the bottom, now I'm struggling to keep it at the bottom

@ctkochan22
Copy link
Contributor Author

So it should always show the spinner first now. Updated and ready for review

nkuoch
nkuoch previously approved these changes Nov 25, 2022
@nkuoch
Copy link
Contributor

nkuoch commented Nov 25, 2022

Conflicts

@ctkochan22 ctkochan22 requested a review from a team November 25, 2022 20:33
@melvin-bot melvin-bot bot requested review from neil-marcellini and rushatgabhane and removed request for a team November 25, 2022 20:33
@melvin-bot
Copy link

melvin-bot bot commented Nov 25, 2022

@rushatgabhane @neil-marcellini One of you needs to 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]

@neil-marcellini
Copy link
Contributor

👀

Copy link
Contributor

@neil-marcellini neil-marcellini left a comment

Choose a reason for hiding this comment

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

The code looks pretty good to me, but I do have some questions. I also noticed that the add payment method button is enabled before the payment methods have loaded.

When the user is offline and we haven't fetched the payment methods, why do we show that they have none? That seems wrong.

web.mov

src/pages/settings/Payments/PaymentMethodList.js Outdated Show resolved Hide resolved
@ctkochan22
Copy link
Contributor Author

right now if the list is not loaded and you're offline, the payment list says Add a payment method to send and receive payments directly in the app.

I think thats a good suggestion, but this PR has dragged its feet long enough. I'd rather just get this out and then we can make additional changes after

@neil-marcellini
Copy link
Contributor

I think thats a good suggestion, but this PR has dragged its feet long enough. I'd rather just get this out and then we can make additional changes after

👍 I agree

right now if the list is not loaded and you're offline, the payment list says Add a payment method to send and receive payments directly in the app. which might be kind of confusing for people who thought they had payment methods already (since they might). Should we update that somehow

Yes I agree that's confusing but it's also a very rare flow. How often will someone sign in, add a payment method, sign out, sign back in, go offline, and then open this page?

Although it's rare, I tend to think that these payment pages should use an offline blocking pattern, or at least give some indication that the data could be stale, because if you are offline and you suddenly see $0 in your wallet when it was $1,000 previously you might be alarmed. In another PR I implemented a partial offline blocking pattern for the Reimburse expenses page due to similar reasoning.

Copy link
Contributor

@neil-marcellini neil-marcellini left a comment

Choose a reason for hiding this comment

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

Looking good, very close. The tests work well but I did notice a flashing of the loading indicator which would be a regression IMO. I think we should debounce showing the loading indicator in a similar manner to what I did here.

Screen.Recording.2023-01-03.at.11.31.00.AM.mov

Copy link
Contributor

@neil-marcellini neil-marcellini left a comment

Choose a reason for hiding this comment

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

Unfortunately I found a few problems.

  1. If you are offline and go to the payments page there is a brief loader. I don't think there should be a loader at all in this case.
  2. The same is true when you are online and the data is fetched very quickly. I think it might be better to render nothing or the last balance?
  3. If you go to the payments page twice while offline there is an infinite spinner
  4. componentDidUpdate is getting called in a loop
web.mov
infinite-loader.mov

this.fetchData();
}

setShouldShowLoadingSpinner() {
Copy link
Contributor

@neil-marcellini neil-marcellini Jan 4, 2023

Choose a reason for hiding this comment

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

This function is being called in a loop. Every time we fetchData we update the component, then we call this function, then we fetch data again.

Edit: Hmm my previous explanation was wrong, but if I put a console.log here I see it getting called repeatedly.

@@ -76,12 +80,25 @@ class BasePaymentsPage extends React.Component {
this.setMenuPosition();
}

// If the user was previously offline, skip debouncing showing the loader
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we need to skip debouncing? If we come back online we should fetch data again and show a loader if it takes a while.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The issue is that we also grey out the wallet amount when offline, so it does a strange thing where, the number will go from grey to white, then the loader will take over

Copy link
Contributor

Choose a reason for hiding this comment

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

Ok that makes sense. I'm a bit confused still because if you are on the page and go online->offline->online (slow 3g) then you don't see the loader right away. I would say this is NAB at this point but would be nice to fix.

Screen.Recording.2023-01-19.at.10.41.53.AM.mov

Copy link
Contributor

@neil-marcellini neil-marcellini left a comment

Choose a reason for hiding this comment

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

As requested, I will review only the QA steps and videos first. I think it looks good!

Maybe we could also test going to the page while online, going offline, and going back online to make sure that changing offline state works while the component is mounted. Also please clarify / cleanup tests/QA in the description. I think the steps would be the same for both right? Next I'll test myself and look at the code 🙂

Copy link
Contributor

@neil-marcellini neil-marcellini left a comment

Choose a reason for hiding this comment

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

Looking really close!

src/pages/settings/Payments/PaymentMethodList.js Outdated Show resolved Hide resolved
@@ -76,12 +80,25 @@ class BasePaymentsPage extends React.Component {
this.setMenuPosition();
}

// If the user was previously offline, skip debouncing showing the loader
Copy link
Contributor

Choose a reason for hiding this comment

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

Ok that makes sense. I'm a bit confused still because if you are on the page and go online->offline->online (slow 3g) then you don't see the loader right away. I would say this is NAB at this point but would be nice to fix.

Screen.Recording.2023-01-19.at.10.41.53.AM.mov

@ctkochan22
Copy link
Contributor Author

Updated!

@neil-marcellini
Copy link
Contributor

@rushatgabhane could you please review today?

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

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

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 tests pass on all platforms & I tested again on:
    • Android / native
    • Android / Chrome
    • iOS / native
    • iOS / 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 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 correct English and approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
    • 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.js 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(themeColors.componentBG)
  • 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 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 have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
Screen.Recording.2023-01-20.at.12.53.59.AM.mov
Mobile Web - Chrome
WhatsApp.Video.2023-01-20.at.01.00.37.mp4
Mobile Web - Safari
Screen.Recording.2023-01-20.at.2.48.31.AM.mov
Desktop
Screen.Recording.2023-01-20.at.2.50.43.AM.mov
iOS
Screen.Recording.2023-01-20.at.2.44.43.AM.mov
Android
screen-20230120-005740.mp4

@rushatgabhane
Copy link
Member

rushatgabhane commented Jan 19, 2023

Edit: Chatted 1:1 with @ctkochan22 This is not an issue. I was simulating failed network requests by disabling internet access. This is different as the sim doesn't think it's offline.

Retested by using the force offline toggle in Preferences, and I don't see an infinite loader anymore.

I see a infinite loader on iOS and iOS Safari.

Screen.Recording.2023-01-20.at.1.17.39.AM.mov

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

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

Copy link
Contributor

@dangrous dangrous left a comment

Choose a reason for hiding this comment

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

LGTM! We should definitely follow up to change the "Add a payment method to send and receive payments directly in the app." messaging somewhere but it's good to get this moving!

@ctkochan22 ctkochan22 merged commit d724b84 into main Jan 19, 2023
@ctkochan22 ctkochan22 deleted the ckt_paymentMethodList_loader branch January 19, 2023 21:50
@OSBotify
Copy link
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
Copy link
Contributor

Performance Comparison Report 📊

Significant Changes To Duration

There are no entries

Meaningless Changes To Duration

Show entries
Name Duration
App start TTI 746.076 ms → 787.261 ms (+41.184 ms, +5.5%)
App start runJsBundle 204.469 ms → 218.000 ms (+13.531 ms, +6.6%)
App start nativeLaunch 20.806 ms → 21.097 ms (+0.290 ms, +1.4%)
App start regularAppStart 0.016 ms → 0.018 ms (+0.002 ms, +9.9%)
Open Search Page TTI 617.353 ms → 617.080 ms (-0.273 ms, ±0.0%)
Show details
Name Duration
App start TTI Baseline
Mean: 746.076 ms
Stdev: 35.665 ms (4.8%)
Runs: 671.9987160000019 672.2601069998927 685.1623019999824 703.5951119998936 707.6500870001037 709.832214999944 725.2692509999033 726.7204899999779 727.4023039999884 727.8065039999783 737.6501490001101 738.9828210000414 739.2308889999986 741.628689999925 741.7227320000529 745.6353199998848 749.676991000073 755.830983000109 756.1744220000692 756.3438679999672 759.1090659999754 761.4662019999232 763.3695660000667 773.3781010000966 773.9538569999859 778.003139999928 783.1814900001045 794.9949109998997 800.9616570000071 804.4248659999575 814.9466780000366

Current
Mean: 787.261 ms
Stdev: 26.797 ms (3.4%)
Runs: 729.0630910000764 741.4895659999456 745.1212249998935 752.2133559999056 761.6519440000411 762.2209369998891 764.5719190000091 764.636106000049 776.9616690000985 778.4499949999154 778.9165890000295 780.4727890000213 782.6709239999764 785.1929389999714 788.4721560000908 788.8520259999204 789.7074319999665 789.9771239999682 790.8738730000332 790.9252520001028 792.5337610000279 792.892370000016 804.5319060001057 807.198558999924 810.3554960000329 812.2195649999194 816.2629780001007 817.8597560001072 825.7967139999382 837.0667260000482 845.9203600001056
App start runJsBundle Baseline
Mean: 204.469 ms
Stdev: 17.075 ms (8.4%)
Runs: 172 175 179 184 186 187 189 189 192 193 195 198 200 201 202 203 207 207 208 208 211 213 215 217 218 219 222 224 226 230 230 243

Current
Mean: 218.000 ms
Stdev: 19.710 ms (9.0%)
Runs: 176 187 191 191 193 194 198 202 203 205 209 210 215 216 218 218 221 224 225 225 225 226 229 231 235 235 239 243 245 246 247 254
App start nativeLaunch Baseline
Mean: 20.806 ms
Stdev: 2.220 ms (10.7%)
Runs: 18 18 18 19 19 19 19 19 19 19 19 19 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 28

Current
Mean: 21.097 ms
Stdev: 2.428 ms (11.5%)
Runs: 18 18 19 19 19 19 19 19 19 19 19 20 20 20 20 21 21 21 21 22 22 22 22 22 23 23 24 24 24 27 28
App start regularAppStart Baseline
Mean: 0.016 ms
Stdev: 0.001 ms (6.7%)
Runs: 0.014118999941274524 0.01432300009764731 0.01485200016759336 0.014974000165238976 0.015381000004708767 0.015422000084072351 0.015422000084072351 0.015503000002354383 0.015870000002905726 0.016112999990582466 0.01611399999819696 0.016276000067591667 0.01631700014695525 0.01631700014695525 0.0163569999858737 0.016398000065237284 0.016519999830052257 0.016600999981164932 0.016764000058174133 0.016765000065788627 0.01692699990235269 0.017048999899998307 0.017048999899998307 0.017253000056371093 0.017293999902904034 0.017374999821186066 0.018269999884068966 0.018514000112190843 0.018595999805256724

Current
Mean: 0.018 ms
Stdev: 0.002 ms (8.9%)
Runs: 0.01424099993892014 0.015217999927699566 0.01619499991647899 0.01619499991647899 0.016438999911770225 0.01672299997881055 0.01684599998407066 0.016967999981716275 0.017131000058725476 0.017497000051662326 0.01753800013102591 0.017700000200420618 0.017740000039339066 0.017863000044599175 0.017903000116348267 0.01790400012396276 0.017985000042244792 0.018065999960526824 0.0181470001116395 0.018309999955818057 0.0185139998793602 0.0188400000333786 0.018920999951660633 0.019124000100418925 0.01924699987284839 0.019491000100970268 0.019653000170364976 0.019979000091552734 0.021363000152632594 0.022012999979779124
Open Search Page TTI Baseline
Mean: 617.353 ms
Stdev: 29.505 ms (4.8%)
Runs: 551.9677740000188 560.8346349999774 563.2201739999 576.2389739998616 586.8584399998654 595.1416419998277 597.5345050001051 599.8658450001385 602.0109459999949 602.9130860001314 605.5229090000503 610.6651200000197 612.3959560000803 612.6811929999385 614.1849769998807 620.7438149999361 620.9873860001098 621.6420899999794 622.9335529999807 624.0111899999902 626.2798270001076 632.5794679999817 634.8291019999888 635.747762999963 637.5411380000878 641.0894770000596 641.514932999853 643.072714000009 646.924235999817 665.3473310000263 667.9391280000564 680.0726320000831

Current
Mean: 617.080 ms
Stdev: 15.614 ms (2.5%)
Runs: 576.6676030000672 598.1126710001845 599.1765139999334 599.730916999979 602.8705239999108 602.8827310001943 604.1183269999456 605.559041999979 606.9145100000314 607.674885999877 610.519125000108 611.0042719999328 611.7639160000253 613.6727299999911 615.0385739998892 615.7624920001253 615.976847999962 620.9733890001662 621.9527590000071 622.5692960000597 622.6958830000367 622.7295739999972 624.4284669999033 625.8873289998155 629.3134360001422 630.5316569996066 633.7311609999742 640.3698330000043 640.3766690003686 644.8961589997634 651.5690920001362

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by https://github.com/ctkochan22 in version: 1.2.57-0 🚀

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

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/luacmartins in version: 1.2.57-3 🚀

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

@ctkochan22
Copy link
Contributor Author

Not showing up on #11460

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.

6 participants