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

disable hermes for debug android builds & enable hermes for release builds #18675

Merged
merged 1 commit into from
Feb 1, 2024

Conversation

siddarthkay
Copy link
Contributor

@siddarthkay siddarthkay commented Jan 30, 2024

fixes #18493

Summary

We enabled hermes for android in the react-native upgrade to 0.72.5
Although things seemed fine but developers were seeing frequent crashes in their local environment.

After some investigation the crashes were traced to max native call stack depth in hermes engine.
Disabling hermes for local debug builds helps fix that issue.

This PR disables hermes by default with the help of a exporting an environment variable in the make run-android command.
It is annoying that this also modifies android/gradle.properties so we keep hermesEnabled as false there as well.
We also enable hermes when generating release builds so that we can take advantage of hermes engine in release builds.

We also add a log to print whether hermes is enabled or not. I think its helpful to have this so that we know whether hermes is enabled or not.

Testing notes

Test locally to see if max native call stack error goes away.

Testing notes

no change in release builds, hermes was enabled in release builds since the upgrade was merged.
Testing is not required.

Platforms

  • Android

status: ready

@status-im-auto
Copy link
Member

status-im-auto commented Jan 30, 2024

Jenkins Builds

Click to see older builds (28)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 7982101 #2 2024-01-30 12:33:48 ~5 min tests 📄log
✔️ 7982101 #2 2024-01-30 12:35:38 ~6 min ios 📱ipa 📲
✔️ 7982101 #2 2024-01-30 12:36:16 ~7 min android-e2e 🤖apk 📲
✔️ 7982101 #2 2024-01-30 12:37:21 ~8 min android 🤖apk 📲
✔️ 658218e #5 2024-01-31 08:08:33 ~5 min ios 📱ipa 📲
✔️ 658218e #5 2024-01-31 08:08:43 ~6 min tests 📄log
✔️ 658218e #5 2024-01-31 08:11:26 ~8 min android 🤖apk 📲
✔️ 658218e #5 2024-01-31 08:11:32 ~8 min android-e2e 🤖apk 📲
✔️ d282e93 #6 2024-01-31 09:39:31 ~4 min tests 📄log
✔️ d282e93 #6 2024-01-31 09:40:17 ~5 min ios 📱ipa 📲
✔️ d282e93 #6 2024-01-31 09:41:34 ~6 min android-e2e 🤖apk 📲
✔️ d282e93 #6 2024-01-31 09:41:51 ~7 min android 🤖apk 📲
✔️ 22b243c #9 2024-02-01 10:45:58 ~5 min tests 📄log
✔️ 22b243c #9 2024-02-01 10:46:03 ~5 min ios 📱ipa 📲
✔️ 22b243c #9 2024-02-01 10:47:16 ~6 min android-e2e 🤖apk 📲
✔️ 22b243c #9 2024-02-01 10:47:44 ~7 min android 🤖apk 📲
✔️ 06fb04c #11 2024-02-01 11:05:57 ~5 min tests 📄log
✔️ 06fb04c #11 2024-02-01 11:07:03 ~6 min ios 📱ipa 📲
✔️ 06fb04c #11 2024-02-01 11:07:47 ~7 min android-e2e 🤖apk 📲
✔️ 06fb04c #11 2024-02-01 11:08:37 ~8 min android 🤖apk 📲
✔️ de799ae #12 2024-02-01 11:33:16 ~5 min ios 📱ipa 📲
✔️ de799ae #12 2024-02-01 11:33:58 ~6 min tests 📄log
✔️ de799ae #12 2024-02-01 11:36:47 ~9 min android 🤖apk 📲
✔️ de799ae #12 2024-02-01 11:36:52 ~9 min android-e2e 🤖apk 📲
✔️ 60686ad #13 2024-02-01 12:14:06 ~5 min ios 📱ipa 📲
✔️ 60686ad #13 2024-02-01 12:14:17 ~5 min tests 📄log
✔️ 60686ad #13 2024-02-01 12:15:26 ~6 min android 🤖apk 📲
✔️ 60686ad #13 2024-02-01 12:16:48 ~8 min android-e2e 🤖apk 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ a63446a #14 2024-02-01 14:25:12 ~5 min tests 📄log
✔️ a63446a #14 2024-02-01 14:25:26 ~5 min ios 📱ipa 📲
✔️ a63446a #14 2024-02-01 14:26:26 ~6 min android-e2e 🤖apk 📲
✔️ a63446a #14 2024-02-01 14:27:38 ~7 min android 🤖apk 📲
✔️ a8baeba #15 2024-02-01 15:17:13 ~6 min tests 📄log
✔️ a8baeba #15 2024-02-01 15:17:14 ~6 min android 🤖apk 📲
✔️ a8baeba #15 2024-02-01 15:17:27 ~6 min ios 📱ipa 📲
✔️ a8baeba #15 2024-02-01 15:19:14 ~8 min android-e2e 🤖apk 📲

@siddarthkay siddarthkay marked this pull request as draft January 30, 2024 18:51
@siddarthkay siddarthkay force-pushed the disable-hermes-locally branch from 658218e to d282e93 Compare January 31, 2024 09:34
@siddarthkay siddarthkay force-pushed the disable-hermes-locally branch 2 times, most recently from afd3ec6 to 22b243c Compare February 1, 2024 10:40
@siddarthkay siddarthkay changed the title chore: disable hermes for debug android builds disable hermes for debug android builds & enable hermes for release builds Feb 1, 2024
@siddarthkay siddarthkay marked this pull request as ready for review February 1, 2024 10:58
@siddarthkay siddarthkay requested a review from jakubgs as a code owner February 1, 2024 10:58
@siddarthkay siddarthkay force-pushed the disable-hermes-locally branch 2 times, most recently from 4e13259 to 06fb04c Compare February 1, 2024 11:00
android/.gitignore Outdated Show resolved Hide resolved
nix/mobile/android/release.nix Outdated Show resolved Hide resolved
src/status_im/core.cljs Show resolved Hide resolved
Makefile Outdated Show resolved Hide resolved
android/gradle.properties Show resolved Hide resolved
@siddarthkay siddarthkay force-pushed the disable-hermes-locally branch from 06fb04c to de799ae Compare February 1, 2024 11:27
src/status_im/core.cljs Outdated Show resolved Hide resolved
@siddarthkay siddarthkay force-pushed the disable-hermes-locally branch from de799ae to 60686ad Compare February 1, 2024 12:08
@status-im-auto
Copy link
Member

88% of end-end tests have passed

Total executed tests: 48
Failed tests: 4
Expected to fail tests: 2
Passed tests: 42
IDs of failed tests: 702809,704613,704615,702775 
IDs of expected to fail tests: 703503,703629 

Failed tests (4)

Click to expand
  • Rerun failed tests

  • Class TestCommunityMultipleDeviceMerged:

    1. test_community_edit_delete_message_when_offline, id: 704615

    Device 1: Looking for a message by text: text after edit
    Device 1: Looking for a message by text: message to delete

    critical/chats/test_public_chat_browsing.py:796: in test_community_edit_delete_message_when_offline
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Updated message 'text after edit' is not delivered to the receiver
    



    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_markdown_support, id: 702809

    Device 1: Looking for a message by text: quote reply (one row)
    Device 2: Looking for a message by text: quote reply (one row)

    critical/chats/test_public_chat_browsing.py:979: in test_community_markdown_support
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     bold text in underscores is not displayed with markdown in community channel for the recipient (device 1)
    



    Device sessions

    Class TestDeepLinksOneDevice:

    1. test_links_open_universal_links_from_chat, id: 704613

    Device 1: Find Text by xpath: //android.view.ViewGroup[@content-desc='chat-item']//android.widget.TextView[contains(@text,'https://status.app/c/G0UAAMTyNsn2QZDEG0EXftOl8pOEfwEBOOSA_YTfIk85xmADDgINGmxpUHAXzK36bN0fK42Xf4YD2yjPk1z2pbFwFw==#zQ3shgkDFQEnwxji7CvMTokMrShmC2UgxiJ549X5Aw746zQrK')]

    critical/test_deep_and_universal_links.py:70: in test_links_open_universal_links_from_chat
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Closed community was not requested to join by the url https://status.app/c/G00AAGS9TbI9mSR-ZNmFrhRjNuEeXAAbcAIUaLLJyjMOG3ACJQ12oIHD78QhzO9s_T5bUeU7rnATWJg3mGgTUemrAg==#zQ3shspPKCZ1VPVQ9dLXGufUGvGphjxVwrcZ6rkZc7S39T4b3
    E    Closed community was not requested to join by the url https://status.app/c/G0UAAMTyNsn2QZDEG0EXftOl8pOEfwEBOOSA_YTfIk85xmADDgINGmxpUHAXzK36bN0fK42Xf4YD2yjPk1z2pbFwFw==#zQ3shgkDFQEnwxji7CvMTokMrShmC2UgxiJ549X5Aw746zQrK
    



    Device sessions

    2. test_links_deep_links, id: 702775

    Device 1: Find BrowserTab by accessibility id: browser-stack-tab
    Device 1: Tap on found: BrowserTab

    critical/test_deep_and_universal_links.py:114: in test_links_deep_links
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Closed community was not requested to join by the deep link status.app://c/G00AAGS9TbI9mSR-ZNmFrhRjNuEeXAAbcAIUaLLJyjMOG3ACJQ12oIHD78QhzO9s_T5bUeU7rnATWJg3mGgTUemrAg==#zQ3shspPKCZ1VPVQ9dLXGufUGvGphjxVwrcZ6rkZc7S39T4b3
    E    Closed community was not requested to join by the deep link status.app://c/G0UAAMTyNsn2QZDEG0EXftOl8pOEfwEBOOSA_YTfIk85xmADDgINGmxpUHAXzK36bN0fK42Xf4YD2yjPk1z2pbFwFw==#zQ3shgkDFQEnwxji7CvMTokMrShmC2UgxiJ549X5Aw746zQrK
    



    Device sessions

    Expected to fail tests (2)

    Click to expand

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_join_when_node_owner_offline, id: 703629

    Device 2: Tap on found: Button
    Device 2: Looking for community: 'open community'

    critical/chats/test_public_chat_browsing.py:1177: in test_community_join_when_node_owner_offline
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     open community is not listed inside Pending communities tab
    E    open community is not listed inside Joined communities tab 
    

    [[Can't join a community if admin goes offline, https://github.com//issues/17678]]

    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_discovery, id: 703503

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Curated communities not loading, https://github.com//issues/17852]]

    Passed tests (42)

    Click to expand

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732
    Device sessions

    2. test_group_chat_mute_chat, id: 703495
    Device sessions

    3. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    4. test_group_chat_reactions, id: 703202
    Device sessions

    5. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    6. test_group_chat_offline_pn, id: 702808
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133
    Device sessions

    2. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    3. test_community_undo_delete_message, id: 702869
    Device sessions

    4. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    5. test_community_mute_community_and_channel, id: 703382
    Device sessions

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_navigation_jump_to, id: 702936
    Device sessions

    2. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_add_contact_field_validation, id: 702777
    Device sessions

    2. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
    Device sessions

    3. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_several_images_send_reply, id: 703194
    Device sessions

    2. test_community_one_image_send_reply, id: 702859
    Device sessions

    3. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    4. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    5. test_community_contact_block_unblock_offline, id: 702894
    Device sessions

    6. test_community_message_delete, id: 702839
    Device sessions

    7. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    8. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
    Device sessions

    9. test_community_message_edit, id: 702843
    Device sessions

    10. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_hashtag_links_to_community_channels, id: 702948
    Device sessions

    2. test_community_mentions_push_notification, id: 702786
    Device sessions

    3. test_community_leave, id: 702845
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    3. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    2. test_1_1_chat_text_message_delete_push_disappear, id: 702733
    Device sessions

    3. test_1_1_chat_push_emoji, id: 702813
    Device sessions

    4. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    5. test_1_1_chat_edit_message, id: 702855
    Device sessions

    6. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    7. test_1_1_chat_pin_messages, id: 702731
    Device sessions

    8. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    Copy link
    Member

    @jakubgs jakubgs left a comment

    Choose a reason for hiding this comment

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

    Thanks for fixing this.

    @siddarthkay siddarthkay force-pushed the disable-hermes-locally branch from 60686ad to a63446a Compare February 1, 2024 14:19
    @siddarthkay siddarthkay marked this pull request as draft February 1, 2024 15:02
    @siddarthkay siddarthkay marked this pull request as ready for review February 1, 2024 15:09
    fixes #18493
    
    We enabled `hermes` for android in the `react-native` upgrade to `0.72.5`
    Although things seemed fine but developers were seeing frequent crashes in their local environment.
    
    After some investigation the crashes were traced to max native call stack depth in `hermes` engine.
    Disabling `hermes` for local debug builds helps fix that issue.
    
    This commit disables `hermes` by default with the help of a exporting an environment variable in the `make run-android` command.
    It is annoying that this also modifies `android/gradle.properties` so we keep `hermesEnabled` as `false` there as well.
    We also enable `hermes` when generating release builds so that we can take advantage of `hermes` engine in release builds.
    
    We also add a log to print whether `hermes` is enabled or not. I think its helpful to have this so that we know whether `hermes` is enabled or not.
    @siddarthkay siddarthkay force-pushed the disable-hermes-locally branch from a63446a to a8baeba Compare February 1, 2024 15:10
    @siddarthkay siddarthkay merged commit df76881 into develop Feb 1, 2024
    6 checks passed
    @siddarthkay siddarthkay deleted the disable-hermes-locally branch February 1, 2024 15:26
    ulisesmac pushed a commit that referenced this pull request Feb 2, 2024
    fixes #18493
    
    We enabled `hermes` for android in the `react-native` upgrade to `0.72.5`
    Although things seemed fine but developers were seeing frequent crashes in their local environment.
    
    After some investigation the crashes were traced to max native call stack depth in `hermes` engine.
    Disabling `hermes` for local debug builds helps fix that issue.
    
    This commit disables `hermes` by default with the help of a exporting an environment variable in the `make run-android` command.
    It is annoying that this also modifies `android/gradle.properties` so we keep `hermesEnabled` as `false` there as well.
    We also enable `hermes` when generating release builds so that we can take advantage of `hermes` engine in release builds.
    
    We also add a log to print whether `hermes` is enabled or not. I think its helpful to have this so that we know whether `hermes` is enabled or not.
    siddarthkay added a commit that referenced this pull request Feb 6, 2024
    We recently disabled `hermes` for debug builds here -> #18675
    A side effect of that is when we run `make nix-update-gradle` the `hermes` pom gets removed from `deps.list`
    This pom is necessary for release builds.
    Currently that pom exists in `deps.list` but someone may accidentally remove it when running `make nix-update-gradle`
    
    In this commit we remove the conditional implementation of `hermes` or `jsc` in `build.gradle`
    This ensures that the `hermes` pom we need during release builds is not removed from `deps.list`.
    
    I also ran `make nix-update-gradle` just to be sure.
    I compared the apk in this commit to other PRs and the size increased by 2MB.
    A small price to pay so that the team can run Malli locally without crashing their debug app frequently.
    
    I've added a FIXME comment in the code for when we want to cut back on bundle size later.
    siddarthkay added a commit that referenced this pull request Feb 6, 2024
    We recently disabled `hermes` for debug builds here -> #18675
    A side effect of that is when we run `make nix-update-gradle` the `hermes` pom gets removed from `deps.list`
    This pom is necessary for release builds.
    Currently that pom exists in `deps.list` but someone may accidentally remove it when running `make nix-update-gradle`
    
    In this commit we remove the conditional implementation of `hermes` or `jsc` in `build.gradle`
    This ensures that the `hermes` pom we need during release builds is not removed from `deps.list`.
    
    I also ran `make nix-update-gradle` just to be sure.
    I compared the apk in this commit to other PRs and the size increased by 2MB.
    A small price to pay so that the team can run Malli locally without crashing their debug app frequently.
    
    I've added a FIXME comment in the code for when we want to cut back on bundle size later.
    siddarthkay added a commit that referenced this pull request Feb 6, 2024
    We recently disabled `hermes` for debug builds here -> #18675
    A side effect of that is when we run `make nix-update-gradle` the `hermes` pom gets removed from `deps.list`
    This pom is necessary for release builds.
    Currently that pom exists in `deps.list` but someone may accidentally remove it when running `make nix-update-gradle`
    
    In this commit we remove the conditional implementation of `hermes` or `jsc` in `build.gradle`
    This ensures that the `hermes` pom we need during release builds is not removed from `deps.list`.
    
    I also ran `make nix-update-gradle` just to be sure.
    I compared the apk in this commit to other PRs and the size increased by 2MB.
    A small price to pay so that the team can run Malli locally without crashing their debug app frequently.
    
    I've added a FIXME comment in the code for when we want to cut back on bundle size later.
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    Archived in project
    Development

    Successfully merging this pull request may close these issues.

    Send flow: "maxiumum call stack exceeded" error on the input_amount screen
    5 participants