ViewHierarchyExceptionHandler calls View methods on non-UI thread

Open
#2,443 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
java
Domain
testing-qa

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.

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.

Dominant language
Java
Stars
1.2k
Forks
342
Avg merge
1d 14h
Merged PRs (30d)
5

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from android/android-test

All issues in android/android-test

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.