Repository navigation
ViewHierarchyExceptionHandler calls View methods on non-UI thread #2443
Copy link
Copy link
Open
Description
This stack comes up in failing chrome tests from time to time:
C 11:28:54.816 87.729s Main java.lang.AssertionError: Class was initialized on the UI thread, but current operation was performed on a background thread: Thread[Instr: org.chromium.base.test.BaseChromiumAndroidJUnitRunner,5,main]
C 11:28:54.816 87.730s Main at org.chromium.base.ThreadUtils$ThreadChecker.assertOnValidThreadHelper(ThreadUtils.java:97)
C 11:28:54.816 87.730s Main at org.chromium.base.ThreadUtils$ThreadChecker.assertOnValidThread(ThreadUtils.java:71)
C 11:28:54.816 87.730s Main at org.chromium.base.UserDataHost.checkThreadAndState(UserDataHost.java:64)
C 11:28:54.816 87.730s Main at org.chromium.base.UserDataHost.getUserData(UserDataHost.java:96)
C 11:28:54.816 87.730s Main at org.chromium.content.browser.webcontents.WebContentsImpl.getOrSetUserData(WebContentsImpl.java:1042)
C 11:28:54.816 87.730s Main at org.chromium.content.browser.input.ImeAdapterImpl.fromWebContents(ImeAdapterImpl.java:253)
C 11:28:54.816 87.730s Main at org.chromium.content_public.browser.ImeAdapter.fromWebContents(ImeAdapter.java:32)
C 11:28:54.816 87.730s Main at org.chromium.components.embedder_support.view.ContentView.onCreateInputConnection(ContentView.java:360)
C 11:28:54.816 87.730s Main at androidx.test.espresso.util.HumanReadables.describe(HumanReadables.java:247)
C 11:28:54.816 87.730s Main at androidx.test.espresso.util.HumanReadables.getViewHierarchyErrorMessage(HumanReadables.java:116)
C 11:28:54.816 87.730s Main at androidx.test.espresso.util.HumanReadables.getViewHierarchyErrorMessage(HumanReadables.java:73)
C 11:28:54.816 87.730s Main at androidx.test.espresso.base.ViewHierarchyExceptionHandler.dumpFullViewHierarchyToFile(ViewHierarchyExceptionHandler.java:96)
C 11:28:54.816 87.730s Main at androidx.test.espresso.base.ViewHierarchyExceptionHandler.handleSafely(ViewHierarchyExceptionHandler.java:65)
C 11:28:54.816 87.730s Main at androidx.test.espresso.base.ViewHierarchyExceptionHandler.handleSafely(ViewHierarchyExceptionHandler.java:38)
C 11:28:54.816 87.730s Main at androidx.test.espresso.base.DefaultFailureHandler$TypedFailureHandler.handle(DefaultFailureHandler.java:158)
C 11:28:54.816 87.730s Main at androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:120)
C 11:28:54.816 87.730s Main at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:385)
C 11:28:54.816 87.730s Main at androidx.test.espresso.ViewInteraction.check(ViewInteraction.java:366)
C 11:28:54.816 87.730s Main at org.chromium.chrome.browser.tasks.tab_management.ArchivedTabsDialogCoordinatorTest.testContentDescription(ArchivedTabsDialogCoordinatorTest.java:754)
Espresso normally jumps to the UI thread to interact with Views, but I think that got missed for ViewHierarchyExceptionHandler. It should do a thread hop before accessing Views.
Metadata
Metadata
Assignees
Labels
No labels
Activity
agrieve commentedon Sep 19, 2025
Note: adding a thread hop to fix the above exception just leads to another one:
This also shows that
HumanReadables.getViewHierarchyErrorMessage()is called twice for the same exception, which maybe is a thing to fix as well.agrieve commentedon Sep 19, 2025
This patch fixes things locally in Chrome:
Probably a "proper" fix would use dagger to inject the
@MainThread Executor, but since I just patched the one file in a chromium checkout, I don't have the ability to run the dagger annotation processor in order to play around with that.Also not sure how to best go about not dumping the view hierarchy twice...
Android: Fix espresso exceptions calling View methods on instrumentat…