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

Upgrade lottie-react-native to 6.3.1 #28267

Merged
merged 13 commits into from
Oct 11, 2023

Conversation

ZhenjaHorbach
Copy link
Contributor

@ZhenjaHorbach ZhenjaHorbach commented Sep 26, 2023

Details

Upgrade E/App to use lottie-react-native 6.3.1+

Fixed Issues

$ #28132
PROPOSAL: #28132 (comment)

Tests

  1. Open the app
  2. Moving pictures are displayed correctly in the app. For example: SignIn image, Workspaces Header image and Preferences Header image in settings
  • Verify that no errors appear in the JS console

Offline tests

  1. Open the app
  2. Moving pictures are displayed correctly in the app. For example: SignIn image, Workspaces Header image and Preferences Header image in settings

QA Steps

  1. Open the app
  2. Moving pictures are displayed correctly in the app. For example: SignIn image, Workspaces Header image and Preferences Header image in settings
  • 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 / Chrome
    • iOS / native
    • iOS / 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 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 the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
    • 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 verified the translation was requested/reviewed 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 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 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
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • 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
    • If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
    • 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 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 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.
  • 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 author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
screen-recording-2023-10-08-at-235606_1uah9PAL.mp4
Mobile Web - Chrome
screen-recording-2023-10-09-at-000924_UD19wRwo.mp4
Mobile Web - Safari
screen-recording-2023-10-09-at-002042_Zf909vHa.mp4
Desktop
screen-recording-2023-10-08-at-235908_90zeamRV.mp4
iOS
screen-recording-2023-10-09-at-002514_Weq83e0S.1.mp4
Android
screen-recording-2023-10-09-at-010520_vgOYOsTn.mp4

@ZhenjaHorbach ZhenjaHorbach requested a review from a team as a code owner September 26, 2023 15:20
@melvin-bot melvin-bot bot requested review from dangrous and removed request for a team September 26, 2023 15:21
@melvin-bot
Copy link

melvin-bot bot commented Sep 26, 2023

@dangrous 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]

@dangrous
Copy link
Contributor

@roryabraham do you want to review this? Happy to do so but looks like it's your issue

@roryabraham
Copy link
Contributor

Sure, sorry for the delay. Going to run a test build to make this faster to test

@OSBotify
Copy link
Contributor

Copy link
Contributor

@kosmydel kosmydel left a comment

Choose a reason for hiding this comment

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

We should address the breaking changes in another way than just reverting them.

Comment on lines 42 to 56
+ const aspectRatioStyle = sources.sourceJson
+ ? { aspectRatio: (source as any).w / (source as any).h }
+ : undefined;
+
+ const styleObject = StyleSheet.flatten(style);
+ let sizeStyle;
+ if (
+ !styleObject ||
+ (styleObject.width === undefined && styleObject.height === undefined)
+ ) {
+ sizeStyle =
+ autoSize && sources.sourceJson
+ ? { width: (source as any).w }
+ : StyleSheet.absoluteFill;
+ }
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think that we want to simply revert the breaking changes in the patch.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@kosmydel
Hello )
You're probably right
But what's the point of depriving us of default styles?
Which we can always override using props
Which allows us to calculate the height and aspect ratio of the element without unnecessary problems

Copy link
Contributor

Choose a reason for hiding this comment

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

Can we override using props? I don't really like patching

Copy link
Contributor

Choose a reason for hiding this comment

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

We might also consider passing aspectRatio as a value/prop instead of calculating it. Just an idea.

Copy link
Contributor Author

@ZhenjaHorbach ZhenjaHorbach Oct 3, 2023

Choose a reason for hiding this comment

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

It can be done )
But then we will have to hard code the aspect ratio )

Or
We can take the aspect ratio calculation function from the patch I made
But then does it make sense for each loti component that we use to set the aspect ratio as styles?
If with the patch we will have automatic aspect ratio support

Copy link
Contributor Author

@ZhenjaHorbach ZhenjaHorbach Oct 3, 2023

Choose a reason for hiding this comment

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

@kosmydel
@situchan

Screenshot 2023-10-03 at 10 37 03

Something like this
The only thing is that the function needs to be moved to global styles
But do we need to complicate the styles with what should be enabled by default ?))

Copy link
Contributor

Choose a reason for hiding this comment

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

We should probably also put it into some useMemo. I think that this is still much better than doing it in a patch. Especially when I am working on this related issue. And patching would require regular maintenance if the original library changes.


But there is a problem with this approach. When we move to the .lottie files we can't access the .w and .h so easily, as these animations won't be JSON objects anymore. I'm not sure how should we handle it.


cc @situchan @roryabraham what do you think?

@dangrous dangrous removed their request for review October 2, 2023 15:01
@dangrous
Copy link
Contributor

dangrous commented Oct 2, 2023

I'm OOO this week so unassigning myself as a reviewer, I think y'all should probably have it covered!

@ZhenjaHorbach
Copy link
Contributor Author

@situchan
@roryabraham
PR is ready )

@@ -46,7 +46,7 @@ function ConfirmationPage(props) {
source={props.animation}
autoPlay
loop
style={styles.confirmationAnimation}
style={[styles.confirmationAnimation, styles.aspectRatioLottie(props.animation)]}
Copy link
Contributor

Choose a reason for hiding this comment

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

We could possibly add some kind of wrapper to the <Lottie> component, adding this style, instead of copying the same line several times, with the argument, that is already passed to the component.
Just an idea.

@ZhenjaHorbach
Copy link
Contributor Author

@situchan
@roryabraham
Hello )
PR is ready )

Copy link
Contributor

@situchan situchan left a comment

Choose a reason for hiding this comment

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

Please pull main

"integrity": "sha512-vhdeZstXMfuVKwnddYWjJgQ/1whGL58IJEJu/iSf0XQ5gAb4pp/+vy91mdYQLezlb8Aw4Vu3fKnqErJL2hwchg==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.3.1.tgz",
"integrity": "sha512-M18nAVYeGMF//bhL27D2zuMcrFPH0jbD/deBvcWi0CCcfZf6LQfx45xt+cuDqwr5nh6dMm+ta8KfZJmkbNhtlg==",
"requires": {
Copy link
Contributor

Choose a reason for hiding this comment

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

Not sure why this file I generated is different from this branch.

Replace package-lock.json with this done:

package-lock.json.zip

ios/Podfile.lock Outdated
@@ -188,33 +188,33 @@ PODS:
- GoogleUtilities/Network (~> 7.4)
Copy link
Contributor

Choose a reason for hiding this comment

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

We only need to update lottie related frameworks. Revert all other changes which are out of scope.

Just replace with this file I generated:

Podfile.lock.zip

Copy link
Contributor

@situchan situchan left a comment

Choose a reason for hiding this comment

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

There are 8 lottie animations in the app. Let's make sure all of them are tested in all platforms.

@@ -3779,6 +3779,13 @@ const styles = (theme) => ({
lineHeight: variables.lineHeightLarge,
},

aspectRatioLottie: (source) => {
if (typeof source === 'object' && !source.uri) {
Copy link
Contributor

Choose a reason for hiding this comment

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

We can add more safety condition here, though all Lottie JSON may include w, h properties.

Suggested change
if (typeof source === 'object' && !source.uri) {
if (!source.uri && typeof source === 'object' && source.w && source.h) {

if (typeof source === 'object' && !source.uri) {
return {aspectRatio: source.w / source.h};
}
return {aspectRatio: '1'};
Copy link
Contributor

Choose a reason for hiding this comment

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

I prefer setting this undefined and let user fully customize style properties.
If both width and height are defined, they're skipped because aspectRatio overwrites them.

Suggested change
return {aspectRatio: '1'};
return {};

@situchan
Copy link
Contributor

situchan commented Oct 8, 2023

Check this video which demonstrates all animations are working well. You should test like this on all platforms.

ios.mov

@situchan
Copy link
Contributor

situchan commented Oct 9, 2023

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 the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
    • 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 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 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 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.
  • 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

Web
web.mov
Mobile Web - Chrome
mchrome.mov
Mobile Web - Safari
msafari.mov
Desktop
desktop.mov
iOS
ios.mov
Android
android.mov

Copy link
Contributor

@situchan situchan left a comment

Choose a reason for hiding this comment

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

LGTM
@roryabraham all yours

@mountiny
Copy link
Contributor

@ZhenjaHorbach can you please resolve the conflicts?

@mountiny mountiny self-requested a review October 11, 2023 10:26
@ZhenjaHorbach
Copy link
Contributor Author

@ZhenjaHorbach can you please resolve the conflicts?

Done )

Copy link
Contributor

@mountiny mountiny left a comment

Choose a reason for hiding this comment

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

@situchan has kindly retested IOS and its working, I will move this ahead

@mountiny mountiny merged commit ac1bdf3 into Expensify:main Oct 11, 2023
14 checks passed
@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 github-actions bot added the DeployBlockerCash This issue or pull request should block deployment label Oct 11, 2023
@github-actions
Copy link
Contributor

Performance Comparison Report 📊

Significant Changes To Duration

Name Duration
App start TTI 1181.023 ms → 1250.948 ms (+69.925 ms, +5.9%) 🔴
App start runJsBundle 795.205 ms → 851.620 ms (+56.415 ms, +7.1%) 🔴
Show details
Name Duration
App start TTI Baseline
Mean: 1181.023 ms
Stdev: 46.197 ms (3.9%)
Runs: 1075.2903340002522 1080.1114999996498 1093.0138870002702 1096.954454000108 1106.32783200033 1108.9913149997592 1113.9355009999126 1122.2853469997644 1123.9615000002086 1125.8174949996173 1125.947564999573 1128.6203420003876 1129.3175689997151 1132.3774889996275 1137.386753000319 1138.574411000125 1140.8366080000997 1141.6372680002823 1143.8548320000991 1143.9272180004045 1144.0998400002718 1147.2961240001023 1147.5191000001505 1148.0439499998465 1151.3972829999402 1152.0404399996623 1152.0544619997963 1154.2632440002635 1158.3174830004573 1159.4571110000834 1159.4889989998192 1160.972713000141 1161.5719860000536 1163.1725089997053 1163.2066019997 1163.8936900002882 1166.9120519999415 1169.030412999913 1169.2961980002 1169.6946170004085 1169.812013999559 1171.8648220002651 1177.6998810004443 1177.7705730004236 1180.687013999559 1184.5660239998251 1185.5497530000284 1186.471068000421 1187.2816279996186 1188.7106090001762 1190.3315869998187 1190.53115599975 1191.839076999575 1192.1490979995579 1192.7423000000417 1193.16126300022 1194.7294460004196 1195.3436660002917 1196.1288329996169 1196.9804840004072 1198.574248000048 1201.2453009998426 1202.1073070000857 1202.6714970003814 1204.3039760002866 1204.5379769997671 1204.7650450002402 1207.5300700003281 1207.6174780000001 1207.8532339995727 1211.1254850002006 1214.9015979999676 1218.9323039995506 1221.0698640001938 1221.9515150003135 1225.9100519996136 1226.6674399999902 1229.2047619996592 1235.683915000409 1238.3228730000556 1238.945856999606 1239.2141749998555 1247.5222429996356 1251.1910720001906 1253.482951999642 1256.5935389995575 1258.2578469999135 1273.3857840001583 1278.5482689999044 1281.241651000455 1294.461528999731

Current
Mean: 1250.948 ms
Stdev: 53.048 ms (4.2%)
Runs: 1134.9527589995414 1135.84221099969 1142.6354609997943 1145.3322489997372 1147.1023810002953 1148.3562110001221 1152.3382299998775 1159.558846999891 1160.3961890004575 1165.1670439997688 1166.9659080002457 1168.735485999845 1171.5772690000013 1180.3022870002314 1184.3436049995944 1185.0647729998454 1196.5060539999977 1198.630410999991 1198.8698300002143 1201.2629699995741 1203.3478359999135 1210.5721599999815 1215.7913100002334 1216.8606590004638 1218.1113210003823 1227.343631000258 1233.653607999906 1233.7931669997051 1235.5048839999363 1236.4532899996266 1240.632961999625 1240.7538210004568 1244.102753000334 1246.6951670004055 1246.8530540000647 1247.1102499999106 1251.003189000301 1255.0619090003893 1258.4066620003432 1259.1065899999812 1259.3486299999058 1259.458312000148 1260.7265640003607 1261.1247589997947 1262.3067009998485 1263.2623920002952 1263.4050430003554 1264.1904910001904 1266.5998390000314 1267.9615420000628 1269.2344810003415 1270.0353380003944 1270.5644079996273 1271.2493939995766 1275.7550980001688 1275.936154000461 1276.6711079999804 1276.8718060003594 1277.4833060000092 1277.607493000105 1277.7339810002595 1278.6031609997153 1278.9301190003753 1279.0581120001152 1281.9650299996138 1287.1555660003796 1288.2432960001752 1288.512974999845 1288.7945440001786 1289.2464119996876 1289.7873029997572 1291.429051999934 1293.066979999654 1294.3879810003564 1294.7489790003747 1297.3972709998488 1298.6634489996359 1298.9779850002378 1299.9391350001097 1303.316545999609 1306.0055590001866 1306.7920420002192 1308.3098269999027 1311.228466000408 1313.5469089997932 1315.9731850000098 1316.3177709998563 1323.2031410001218 1324.9568910002708 1326.1412669997662 1341.6682050004601 1358.1817089999095
App start runJsBundle Baseline
Mean: 795.205 ms
Stdev: 34.018 ms (4.3%)
Runs: 723 733 733 740 746 746 747 747 750 751 753 756 756 756 759 763 763 764 765 766 768 772 773 775 775 776 777 778 779 780 783 783 785 785 786 788 789 789 790 790 791 793 793 793 795 797 797 798 799 801 802 803 803 803 805 806 806 807 808 808 808 811 811 811 814 815 816 816 820 820 821 822 823 824 825 826 832 833 837 842 848 851 851 856 863 863 886 887

Current
Mean: 851.620 ms
Stdev: 38.329 ms (4.5%)
Runs: 773 777 779 790 790 790 794 794 797 797 797 797 797 799 804 806 809 810 811 814 815 816 819 821 824 826 830 831 837 837 838 840 843 843 845 846 846 848 851 853 853 853 854 855 856 856 859 859 860 862 862 863 865 865 865 866 867 867 867 868 870 871 872 872 872 876 876 877 878 878 878 878 878 879 880 880 881 882 884 887 887 888 895 898 901 904 920 924 925 930 933 939

Meaningless Changes To Duration

Show entries
Name Duration
Open Search Page TTI 617.804 ms → 620.597 ms (+2.793 ms, ±0.0%)
App start nativeLaunch 20.837 ms → 22.278 ms (+1.440 ms, +6.9%)
App start regularAppStart 0.014 ms → 0.015 ms (+0.001 ms, +10.6%)
Show details
Name Duration
Open Search Page TTI Baseline
Mean: 617.804 ms
Stdev: 17.907 ms (2.9%)
Runs: 584.7976479995996 585.6721600005403 590.9538569999859 596.5734870005399 596.8945730002597 596.9278570003808 597.3682859996334 598.2565919999033 598.3441980006173 599.772420999594 599.8378099994734 601.306599999778 601.3638110002503 601.481730999425 601.7702230000868 602.2588710002601 602.3251539999619 602.3472499996424 605.9072270002216 606.6805830001831 606.818847999908 607.0471189999953 607.0888670003042 607.2510170005262 607.2742929998785 607.4196779998019 607.4354249993339 607.4757489999756 607.5285649998114 607.6352129997686 607.6920570004731 607.8817539997399 607.8835450001061 608.041137999855 608.2892660005018 609.2292069997638 609.681315000169 609.7290450008586 609.8931889999658 610.0710450001061 610.0760099999607 610.1969410004094 612.8133140001446 614.5320229995996 614.5616859998554 614.6393229998648 614.8236090000719 615.1700449995697 615.2228190004826 615.7174070002511 615.7867029998451 616.8102219998837 617.4592289999127 617.937052000314 617.9669599998742 618.1383880004287 618.1593829998747 618.3798019997776 621.530965000391 621.8744299998507 621.9726979993284 623.818237000145 623.990764000453 624.2292480003089 624.6463219998404 625.2714039999992 626.3634439995512 626.3931069998071 626.5360519997776 629.25915500056 632.2545980000868 632.8243410000578 633.136758999899 634.3594159996137 634.4364830004051 636.5214849999174 637.8677579993382 641.2202960001305 643.8505859998986 647.2626959998161 647.7798669999465 647.9715170003474 648.3070880006999 650.6289470000193 652.7175300000235 659.9903570003808 665.2964679999277 665.6520999995992 666.009481000714

Current
Mean: 620.597 ms
Stdev: 20.528 ms (3.3%)
Runs: 590.5831709997728 591.6477859998122 592.8180339997634 593.4008379997686 594.043335000053 597.6381839998066 598.2946370001882 598.6742359995842 598.6905109994113 598.8340659998357 599.0820720000193 599.1859130002558 599.6345210000873 599.761637000367 599.8579919999465 600.3808590006083 600.4394540004432 600.9412839999422 601.113078000024 601.2669280003756 601.3577479999512 602.3122149994597 602.3507890002802 605.438558999449 606.0511880004779 606.379192000255 606.6830240003765 606.9382330002263 607.3338219998404 607.5443120002747 607.7082520006225 607.9267990002409 607.9557299995795 608.0385339995846 608.5238450001925 609.0714119998738 609.0744639998302 609.8568529998884 610.6029460001737 611.8147790003568 614.7621260005981 614.96036899928 615.1752529991791 615.2395019996911 615.2434089994058 615.3187669999897 615.3381350003183 615.34220500011 615.9787189997733 616.3478189995512 616.8240159992129 617.54455600027 618.4219159996137 618.8749190000817 620.0788990007713 620.3899739999324 622.3237720001489 622.7375890007243 622.9035649998114 623.6074629994109 624.150186999701 624.234538000077 624.2643639994785 624.5653079999611 625.1401780005544 632.260783999227 632.5230310000479 632.6089679999277 633.287597999908 635.6925860000774 635.743978000246 637.7083329996094 638.7228199997917 638.9601239999756 639.2667650002986 639.5566409993917 643.6532800002024 647.2736409995705 648.5282800002024 650.5145680001006 650.6562090003863 651.2043059999123 651.9069419996813 652.5075690001249 652.765951000154 655.0808930005878 655.4079590002075 655.4621580000967 655.8608809998259 657.1775310002267 660.150675999932 671.8096110001206 680.1796470005065
App start nativeLaunch Baseline
Mean: 20.837 ms
Stdev: 1.971 ms (9.5%)
Runs: 18 18 18 18 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 24 24 24 25 26 26 26 27

Current
Mean: 22.278 ms
Stdev: 3.215 ms (14.4%)
Runs: 18 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 24 24 24 24 24 24 24 24 25 25 25 26 26 27 27 27 28 28 29 29 29 29 29 30 30 30
App start regularAppStart Baseline
Mean: 0.014 ms
Stdev: 0.001 ms (5.2%)
Runs: 0.012288999743759632 0.012329000048339367 0.012452000752091408 0.012613999657332897 0.012613999657332897 0.012653999961912632 0.012736000120639801 0.012736000120639801 0.012858000583946705 0.012899000197649002 0.012939000502228737 0.012939000502228737 0.0129399998113513 0.012980000115931034 0.012980000115931034 0.013061000034213066 0.013101999647915363 0.013101999647915363 0.013102000579237938 0.01318300049751997 0.01318300049751997 0.013183999806642532 0.013183999806642532 0.013223999179899693 0.013224000111222267 0.013224000111222267 0.013224000111222267 0.013225000351667404 0.013264999724924564 0.0133050000295043 0.013306000269949436 0.013345999643206596 0.013386999256908894 0.013387000188231468 0.013426999561488628 0.0134680001065135 0.0134680001065135 0.0134680001065135 0.013469000346958637 0.013508999720215797 0.01355000026524067 0.01358999963849783 0.013590000569820404 0.013590000569820404 0.013590999878942966 0.013631000183522701 0.013631000183522701 0.013631999492645264 0.013671999797224998 0.013672000728547573 0.01371300034224987 0.013794000260531902 0.013875999487936497 0.013915999792516232 0.013956000097095966 0.013996999710798264 0.013996999710798264 0.013997000642120838 0.0139979999512434 0.014078999869525433 0.014078999869525433 0.014118999242782593 0.014159999787807465 0.01416000071913004 0.01416000071913004 0.014201000332832336 0.014240999706089497 0.014282000251114368 0.014322000555694103 0.014322999864816666 0.014322999864816666 0.014403999783098698 0.01444500032812357 0.014527000486850739 0.014649000018835068 0.014689000323414803 0.0147299999371171 0.014770000241696835 0.014933000318706036 0.015177000313997269 0.015381000004708767 0.015381000004708767 0.01570700015872717

Current
Mean: 0.015 ms
Stdev: 0.001 ms (7.1%)
Runs: 0.013101999647915363 0.013305999338626862 0.01355000026524067 0.01358999963849783 0.013590000569820404 0.013671999797224998 0.013794000260531902 0.013956000097095966 0.013957000337541103 0.0139979999512434 0.014078999869525433 0.014078999869525433 0.014078999869525433 0.014079000800848007 0.014159999787807465 0.014159999787807465 0.014200999401509762 0.014201000332832336 0.014241999946534634 0.014282000251114368 0.014282000251114368 0.014282000251114368 0.014322999864816666 0.01432300079613924 0.014364000409841537 0.014403999783098698 0.014403999783098698 0.014405000023543835 0.014526000246405602 0.014526000246405602 0.014527000486850739 0.014527000486850739 0.014566999860107899 0.014607999473810196 0.01464799977838993 0.01464799977838993 0.014688999392092228 0.014688999392092228 0.014689000323414803 0.014729000627994537 0.0147299999371171 0.0147299999371171 0.0147299999371171 0.014811000786721706 0.014851999469101429 0.014892000705003738 0.0148930000141263 0.014933000318706036 0.014974000863730907 0.015054999850690365 0.015054999850690365 0.01505500078201294 0.015135999768972397 0.015178000554442406 0.015258999541401863 0.015298999845981598 0.015299000777304173 0.01529999915510416 0.015300000086426735 0.01534000039100647 0.015340999700129032 0.015340999700129032 0.015502999536693096 0.015544000081717968 0.015625 0.015625 0.015747000463306904 0.0157880000770092 0.015910000540316105 0.015949999913573265 0.015949999913573265 0.0159919997677207 0.016071999445557594 0.016112999990582466 0.01611399929970503 0.016114000231027603 0.016234999522566795 0.016276000067591667 0.016397999599575996 0.01639800053089857 0.016479999758303165 0.016560999676585197 0.01664199959486723 0.017130999825894833 0.017171000130474567 0.01749700028449297 0.01753699965775013 0.017537999898195267 0.017904000356793404 0.018024999648332596

@github-actions
Copy link
Contributor

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

@@ -0,0 +1,3 @@
import Lottie from './Lottie';
Copy link
Contributor

Choose a reason for hiding this comment

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

Why Lottie.tsx is written in TS and index.js in JS? I think Lottie catalog can be removed and Lottie.tsx file in components catalog should be sufficient.

@ZhenjaHorbach

Copy link
Contributor

Choose a reason for hiding this comment

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

Why Lottie.tsx is written in TS and index.js in JS?

This is already existing pattern, i.e. MapView but agree to write TS for all

I think Lottie catalog can be removed and Lottie.tsx file in components catalog should be sufficient.

Agree. Unless platform specific or has propTypes in js

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Regarding the first point, I did it by analogy with other catalogs)
And about the second one, maybe you're right
Seems a little redundant
Should I create a new PR?

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/jasperhuangg in version: 1.3.83-11 🚀

platform result
🤖 android 🤖 skipped 🚫
🖥 desktop 🖥 skipped 🚫
🍎 iOS 🍎 skipped 🚫
🕸 web 🕸 skipped 🚫

2 similar comments
@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/jasperhuangg in version: 1.3.83-11 🚀

platform result
🤖 android 🤖 skipped 🚫
🖥 desktop 🖥 skipped 🚫
🍎 iOS 🍎 skipped 🚫
🕸 web 🕸 skipped 🚫

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/jasperhuangg in version: 1.3.83-11 🚀

platform result
🤖 android 🤖 skipped 🚫
🖥 desktop 🖥 skipped 🚫
🍎 iOS 🍎 skipped 🚫
🕸 web 🕸 skipped 🚫

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/jasperhuangg in version: 1.3.83-11 🚀

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
DeployBlockerCash This issue or pull request should block deployment Ready To Build
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants