android / android/android-test

ViewHierarchyExceptionHandler calls View methods on non-UI thread

Open
#2,443 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.