android / android/android-test
ViewHierarchyExceptionHandler calls View methods on non-UI thread
- Dominant language
- Java
- Stars
- 1.2k
- Forks
- 342
- Avg merge
- 11h 29m
- Merged PRs (30d)
- 2
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.
Contributor guide
Research direction
Start with ViewHierarchyExceptionHandler.java, especially handleSafely and dumpFullViewHierarchyToFile, and compare the failing stack with Espresso's UI-thread behavior. Use ArchivedTabsDialogCoordinatorTest.testContentDescription as the reported reproduction; done means view-hierarchy error handling no longer calls View methods from the background thread.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 48/100