From 8e599bd1fdedcb7bb5cdaee3d304c5bb2e06afda Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Mon, 17 Mar 2014 22:42:34 -0700 Subject: [PATCH] Backed out changeset 1e8fa32e8abd (bug 975838) --- mobile/android/base/GeckoEditable.java | 3 +- mobile/android/base/GeckoInputConnection.java | 17 +++--- mobile/android/base/menu/GeckoMenu.java | 21 +------ mobile/android/base/util/ThreadUtils.java | 55 +++++-------------- 4 files changed, 24 insertions(+), 72 deletions(-) diff --git a/mobile/android/base/GeckoEditable.java b/mobile/android/base/GeckoEditable.java index aff8aa08e83..41962694aff 100644 --- a/mobile/android/base/GeckoEditable.java +++ b/mobile/android/base/GeckoEditable.java @@ -8,7 +8,6 @@ package org.mozilla.gecko; import org.mozilla.gecko.gfx.InputConnectionHandler; import org.mozilla.gecko.gfx.LayerView; import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.util.ThreadUtils.AssertBehavior; import android.os.Build; import android.os.Handler; @@ -362,7 +361,7 @@ final class GeckoEditable } private void assertOnIcThread() { - ThreadUtils.assertOnThread(mIcRunHandler.getLooper().getThread(), AssertBehavior.THROW); + ThreadUtils.assertOnThread(mIcRunHandler.getLooper().getThread()); } private void geckoPostToIc(Runnable runnable) { diff --git a/mobile/android/base/GeckoInputConnection.java b/mobile/android/base/GeckoInputConnection.java index aac8e3f8891..706f456e954 100644 --- a/mobile/android/base/GeckoInputConnection.java +++ b/mobile/android/base/GeckoInputConnection.java @@ -5,16 +5,10 @@ package org.mozilla.gecko; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.util.concurrent.SynchronousQueue; - import org.mozilla.gecko.gfx.InputConnectionHandler; import org.mozilla.gecko.util.Clipboard; import org.mozilla.gecko.util.GamepadUtils; import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.util.ThreadUtils.AssertBehavior; import android.R; import android.content.Context; @@ -39,6 +33,11 @@ import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.concurrent.SynchronousQueue; + class GeckoInputConnection extends BaseInputConnection implements InputConnectionHandler, GeckoEditableListener { @@ -116,7 +115,7 @@ class GeckoInputConnection public void waitForUiThread(Handler icHandler) { if (DEBUG) { - ThreadUtils.assertOnThread(icHandler.getLooper().getThread(), AssertBehavior.THROW); + ThreadUtils.assertOnThread(icHandler.getLooper().getThread()); Log.d(LOGTAG, "waitForUiThread() blocking on thread " + icHandler.getLooper().getThread().getName()); } @@ -155,7 +154,7 @@ class GeckoInputConnection public Editable getEditableForUiThread(final Handler uiHandler, final GeckoEditableClient client) { if (DEBUG) { - ThreadUtils.assertOnThread(uiHandler.getLooper().getThread(), AssertBehavior.THROW); + ThreadUtils.assertOnThread(uiHandler.getLooper().getThread()); } final Handler icHandler = client.getInputConnectionHandler(); if (icHandler.getLooper() == uiHandler.getLooper()) { @@ -172,7 +171,7 @@ class GeckoInputConnection final Method method, final Object[] args) throws Throwable { if (DEBUG) { - ThreadUtils.assertOnThread(uiHandler.getLooper().getThread(), AssertBehavior.THROW); + ThreadUtils.assertOnThread(uiHandler.getLooper().getThread()); Log.d(LOGTAG, "UiEditable." + method.getName() + "() blocking"); } synchronized (icHandler) { diff --git a/mobile/android/base/menu/GeckoMenu.java b/mobile/android/base/menu/GeckoMenu.java index e2aabc816dc..ba69b68f1d1 100644 --- a/mobile/android/base/menu/GeckoMenu.java +++ b/mobile/android/base/menu/GeckoMenu.java @@ -4,10 +4,7 @@ package org.mozilla.gecko.menu; -import org.mozilla.gecko.AppConstants; import org.mozilla.gecko.R; -import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.util.ThreadUtils.AssertBehavior; import android.content.ComponentName; import android.content.Context; @@ -38,12 +35,6 @@ public class GeckoMenu extends ListView GeckoMenuItem.OnShowAsActionChangedListener { private static final String LOGTAG = "GeckoMenu"; - /** - * Controls whether off-UI-thread method calls in this class cause an - * exception or just logging. - */ - private static final AssertBehavior THREAD_ASSERT_BEHAVIOR = AppConstants.RELEASE_BUILD ? AssertBehavior.NONE : AssertBehavior.THROW; - /* * A callback for a menu item selected event. */ @@ -61,7 +52,7 @@ public class GeckoMenu extends ListView // Open the menu. public void openMenu(); - // Show the actual view containing the menu items. This can either be a parent or sub-menu. + // Show the actual view contaning the menu items. This can either be a parent or sub-menu. public void showMenu(View menu); // Close the menu. @@ -139,10 +130,6 @@ public class GeckoMenu extends ListView mSecondaryActionItemBar = (DefaultActionItemBar) LayoutInflater.from(context).inflate(R.layout.menu_secondary_action_bar, null); } - private static void assertOnUiThread() { - ThreadUtils.assertOnUiThread(THREAD_ASSERT_BEHAVIOR); - } - @Override public MenuItem add(CharSequence title) { GeckoMenuItem menuItem = new GeckoMenuItem(this, NO_ID, 0, title); @@ -172,14 +159,12 @@ public class GeckoMenu extends ListView } private void addItem(GeckoMenuItem menuItem) { - assertOnUiThread(); menuItem.setOnShowAsActionChangedListener(this); mAdapter.addMenuItem(menuItem); mItems.add(menuItem); } private boolean addActionItem(final GeckoMenuItem menuItem) { - assertOnUiThread(); menuItem.setOnShowAsActionChangedListener(this); final View actionView = menuItem.getActionView(); @@ -287,7 +272,6 @@ public class GeckoMenu extends ListView @Override public void clear() { - assertOnUiThread(); for (GeckoMenuItem menuItem : mItems) { if (menuItem.hasSubMenu()) { SubMenu sub = menuItem.getSubMenu(); @@ -371,7 +355,6 @@ public class GeckoMenu extends ListView @Override public boolean hasVisibleItems() { - assertOnUiThread(); for (GeckoMenuItem menuItem : mItems) { if (menuItem.isVisible() && !mPrimaryActionItems.containsKey(menuItem) && @@ -403,7 +386,6 @@ public class GeckoMenu extends ListView @Override public void removeItem(int id) { - assertOnUiThread(); GeckoMenuItem item = (GeckoMenuItem) findItem(id); if (item == null) return; @@ -491,7 +473,6 @@ public class GeckoMenu extends ListView } public void onItemChanged(GeckoMenuItem item) { - assertOnUiThread(); if (item.isActionItem()) { final View actionView; if (item.getActionEnum() == GeckoMenuItem.SHOW_AS_ACTION_ALWAYS) { diff --git a/mobile/android/base/util/ThreadUtils.java b/mobile/android/base/util/ThreadUtils.java index 48c8657d0c6..a646f1ae4e9 100644 --- a/mobile/android/base/util/ThreadUtils.java +++ b/mobile/android/base/util/ThreadUtils.java @@ -5,24 +5,15 @@ package org.mozilla.gecko.util; -import java.util.Map; - import android.os.Handler; import android.os.MessageQueue; import android.util.Log; +import java.util.Map; + public final class ThreadUtils { private static final String LOGTAG = "ThreadUtils"; - /** - * Controls the action taken when a method like - * {@link ThreadUtils#assertOnUiThread(AssertBehavior)} detects a problem. - */ - public static enum AssertBehavior { - NONE, - THROW, - } - private static Thread sUiThread; private static Thread sBackgroundThread; @@ -110,46 +101,28 @@ public final class ThreadUtils { GeckoBackgroundThread.post(runnable); } - public static void assertOnUiThread(final AssertBehavior assertBehavior) { - assertOnThread(getUiThread(), assertBehavior); - } - public static void assertOnUiThread() { - assertOnThread(getUiThread(), AssertBehavior.THROW); + assertOnThread(getUiThread()); } public static void assertOnGeckoThread() { - assertOnThread(sGeckoThread, AssertBehavior.THROW); + assertOnThread(sGeckoThread); } public static void assertOnBackgroundThread() { - assertOnThread(getBackgroundThread(), AssertBehavior.THROW); + assertOnThread(getBackgroundThread()); } - public static void assertOnThread(final Thread expectedThread) { - assertOnThread(expectedThread, AssertBehavior.THROW); - } + public static void assertOnThread(Thread expectedThread) { + Thread currentThread = Thread.currentThread(); + long currentThreadId = currentThread.getId(); + long expectedThreadId = expectedThread.getId(); - public static void assertOnThread(final Thread expectedThread, AssertBehavior behavior) { - final Thread currentThread = Thread.currentThread(); - final long currentThreadId = currentThread.getId(); - final long expectedThreadId = expectedThread.getId(); - - if (currentThreadId == expectedThreadId) { - return; - } - - final String message = "Expected thread " + - expectedThreadId + " (\"" + expectedThread.getName() + - "\"), but running on thread " + - currentThreadId + " (\"" + currentThread.getName() + ")"; - final IllegalThreadStateException e = new IllegalThreadStateException(message); - - switch (behavior) { - case THROW: - throw e; - default: - Log.e(LOGTAG, "Method called on wrong thread!", e); + if (currentThreadId != expectedThreadId) { + throw new IllegalThreadStateException("Expected thread " + expectedThreadId + " (\"" + + expectedThread.getName() + + "\"), but running on thread " + currentThreadId + + " (\"" + currentThread.getName() + ")"); } }