brave / brave-browser

Brave browser for Android, iOS, Linux, macOS, Windows.
https://brave.com
Mozilla Public License 2.0
17.54k stars 2.27k forks source link

ANR on a search widget #27903

Closed SergeyZhukovsky closed 1 year ago

SergeyZhukovsky commented 1 year ago

I found that ANR in GPS on 1.47.x stable channel. It happens here https://github.com/brave/brave-core/blob/1.47.x/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java#L1060, we can execute it with a post task when all UI redrawing isn't happening to decrease main thread overload on URL focus.

  #00  pc 0x00000000000a1bd8  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+8)
  #01  pc 0x000000000005b828  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+156)
  #02  pc 0x0000000000054070  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+292)
  #03  pc 0x00000000000552ac  /system/lib64/libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*)+64)
  #04  pc 0x0000000000054ff0  /system/lib64/libbinder.so (android::IPCThreadState::transact(int, unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+224)
  #05  pc 0x000000000004cafc  /system/lib64/libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+196)
  #06  pc 0x0000000000168d3c  /system/lib64/libandroid_runtime.so (android_os_BinderProxy_transact(_JNIEnv*, _jobject*, int, _jobject*, _jobject*, int)+156)
  at android.os.BinderProxy.transactNative (BinderProxy.java)
  at android.os.BinderProxy.transact (BinderProxy.java:571)
  at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.isRequestPinAppWidgetSupported (IAppWidgetService.java:1458)
  at android.appwidget.AppWidgetManager.isRequestPinAppWidgetSupported (AppWidgetManager.java:1204)
  at org.chromium.chrome.browser.widget.quickactionsearchandbookmark.utils.BraveSearchWidgetUtils$$InternalSyntheticApiModelOutline$1$219f055c23cd4850a3bfc8273f0cb7812b1f5e1937b308f3b7e6c0bae8531dc1$0.m (BraveSearchWidgetUtils.java:1)
  at org.chromium.chrome.browser.widget.quickactionsearchandbookmark.utils.BraveSearchWidgetUtils.isRequestPinAppWidgetSupported (BraveSearchWidgetUtils.java:39)
  at org.chromium.chrome.browser.widget.quickactionsearchandbookmark.utils.BraveSearchWidgetUtils.getShouldShowWidgetPromo (BraveSearchWidgetUtils.java:28)
  at org.chromium.chrome.browser.widget.quickactionsearchandbookmark.promo.SearchWidgetPromoPanel.showIfNeeded (SearchWidgetPromoPanel.java:46)
  at org.chromium.chrome.browser.toolbar.top.BraveToolbarLayoutImpl.onUrlFocusChange (BraveToolbarLayoutImpl.java:1060)
  at org.chromium.chrome.browser.toolbar.top.ToolbarPhone.onUrlFocusChange (ToolbarPhone.java:2011)
  at org.chromium.chrome.browser.toolbar.top.BraveTopToolbarCoordinator.b (BraveTopToolbarCoordinator.java:3)
  at org.chromium.chrome.browser.toolbar.ToolbarManager.onUrlFocusChange (ToolbarManager.java:1699)
  at org.chromium.chrome.browser.omnibox.LocationBarMediator.handleUrlFocusAnimation (LocationBarMediator.java:666)
  at org.chromium.chrome.browser.omnibox.LocationBarMediator.onUrlFocusChange (LocationBarMediator.java:294)
  at org.chromium.chrome.browser.omnibox.LocationBarCoordinator$$InternalSyntheticLambda$4$0134c155d3c853a6a1247ac6ee48c13445fd5fee03c38307cc27db6a1d6a5032$0.onResult$bridge (LocationBarCoordinator.java:116)
  at org.chromium.base.CallbackController$CancelableCallback.onResult (CallbackController.java:105)
  at org.chromium.chrome.browser.omnibox.UrlBarCoordinator.onUrlFocusChangeInternal (UrlBarCoordinator.java:298)
  at org.chromium.chrome.browser.omnibox.UrlBarCoordinator$$InternalSyntheticLambda$5$6bfc234b05bb0d78bdd82926159e4ea90018c4a6f6a72fee671ce17a51645698$1.onResult (UrlBarCoordinator.java:55)
  at org.chromium.chrome.browser.omnibox.UrlBarMediator.onUrlFocusChange (UrlBarMediator.java:218)
  at org.chromium.chrome.browser.omnibox.UrlBarMediator$$InternalSyntheticLambda$6$c9693cfe2dd9d479be3affe326ca92b3c16a105028cf7c8ac7db04739f1ec27d$0.onResult (UrlBarMediator.java:42)
  at org.chromium.chrome.browser.omnibox.UrlBarViewBinder.lambda$bind$0 (UrlBarViewBinder.java:55)
  at org.chromium.chrome.browser.omnibox.UrlBarViewBinder$$InternalSyntheticLambda$6$d94fd4e798a89dbac0b1bae36043f9e9279e392b572bf5a463c4925679ba2ab1$0.onFocusChange (UrlBarViewBinder.java:15)
  at android.view.View.onFocusChanged (View.java:8135)
  at android.widget.TextView.onFocusChanged (TextView.java:11107)
  at org.chromium.chrome.browser.omnibox.AutocompleteEditText.onFocusChanged (AutocompleteEditText.java:189)
  at org.chromium.chrome.browser.omnibox.UrlBar.onFocusChanged (UrlBar.java:319)
  at org.chromium.chrome.browser.omnibox.UrlBar.onFocusChanged (UrlBar.java:1)
  at android.view.View.handleFocusGainInternal (View.java:7805)
  at android.view.View.requestFocusNoSearch (View.java:13601)
  at android.view.View.requestFocus (View.java:13575)
  at android.view.View.requestFocus (View.java:13542)
  at android.view.View.requestFocus (View.java:13484)
  at org.chromium.chrome.browser.omnibox.UrlBar$1.onSingleTapUp (UrlBar.java:254)
  at android.view.GestureDetector.onTouchEvent (GestureDetector.java:748)
  at org.chromium.chrome.browser.omnibox.UrlBar.onTouchEvent (UrlBar.java:440)
  at org.chromium.chrome.browser.omnibox.UrlBar.onTouchEvent (UrlBar.java:1)
  at android.view.View.dispatchTouchEvent (View.java:14601)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3120)
  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2801)
  at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:534)
  at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1925)
  at android.app.Activity.dispatchTouchEvent (Activity.java:4298)
  at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:70)
  at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:1)
  at java.lang.reflect.Method.invoke (Method.java)
  at org.chromium.base.ApplicationStatus$WindowCallbackProxy.invoke (ApplicationStatus.java:246)
  at java.lang.reflect.Proxy.invoke (Proxy.java:1006)
  at android.view.Window$Callback.dispatchTouchEvent (Window.java)
  at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:492)
  at android.view.View.dispatchPointerEvent (View.java:14884)
  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:6497)
  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:6298)
  at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5776)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5833)
  at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5799)
  at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5964)
  at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5807)
  at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:6021)
  at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5780)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5833)
  at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5799)
  at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5807)
  at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5780)
  at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:8793)
  at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:8709)
  at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:8678)
  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:8929)
  at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:266)
  at android.os.MessageQueue.nativePollOnce (MessageQueue.java)
  at android.os.MessageQueue.next (MessageQueue.java:342)
  at android.os.Looper.loopOnce (Looper.java:170)
  at android.os.Looper.loop (Looper.java:329)
  at android.app.ActivityThread.main (ActivityThread.java:8063)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1026)

STR/Cases:

Quickly talked to @SergeyZhukovsky, QA just needs to ensure that tapping on the omnibox with a new profile still launches the widget onboarding without any issues.

kjozwiak commented 1 year ago

The above requires 1.47.178 or higher for 1.47.x verification 👍

Uni-verse commented 1 year ago

Verified on Samsung Galaxy S21 using version:

Brave   1.47.181 Chromium: 109.0.5414.87 (Official Build) (64-bit) 
Revision    2dc18eb511c56e012081b4abc9e38c81c885f7d4-refs/branch-heads/5414@{#1241}
OS  Android 13; Build/TP1A.220624.014

Based on STR/Cases in https://github.com/brave/brave-browser/issues/27903#issue-1549526117

Example Example Example
screenshot-1674495436133 screenshot-1674495515415 screenshot-1674495523074