Bug 1291387 - Log GeckoThread state transitions r=jchen draft
authorJames Willcox <snorp@snorp.net>
Mon, 29 Jan 2018 11:11:27 -0600
changeset 757617 78ffad781013b86caa153e0c8715f4cec4c2329f
parent 757616 7d311c3ea15e9133259d27d128f392e78d768de2
child 757618 f6eb6f03952fac7ab67d6562ff6f0fac30548737
push id99801
push userbmo:snorp@snorp.net
push dateTue, 20 Feb 2018 22:23:15 +0000
reviewersjchen
bugs1291387
milestone60.0a1
Bug 1291387 - Log GeckoThread state transitions r=jchen It may be nice to also log failed state transitions, but we seem to have too many of those for it to be very useful right now. MozReview-Commit-ID: 7z4UMyWQp2F
mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java
@@ -78,16 +78,21 @@ public class GeckoThread extends Thread 
 
         @Override
         public boolean isAtLeast(final NativeQueue.State other) {
             if (other instanceof State) {
                 return this.rank >= ((State) other).rank;
             }
             return false;
         }
+
+        @Override
+        public String toString() {
+            return name();
+        }
     }
 
     private static final NativeQueue sNativeQueue =
         new NativeQueue(State.INITIAL, State.RUNNING);
 
     /* package */ static NativeQueue getNativeQueue() {
         return sNativeQueue;
     }
@@ -490,23 +495,27 @@ public class GeckoThread extends Thread 
      * @return True if the current Gecko thread state matches
      */
     public static boolean isStateBetween(final State minState, final State maxState) {
         return isStateAtLeast(minState) && isStateAtMost(maxState);
     }
 
     @WrapForJNI(calledFrom = "gecko")
     private static void setState(final State newState) {
-        sNativeQueue.setState(newState);
+        checkAndSetState(null, newState);
     }
 
     @WrapForJNI(calledFrom = "gecko")
     private static boolean checkAndSetState(final State expectedState,
                                             final State newState) {
-        return sNativeQueue.checkAndSetState(expectedState, newState);
+        final boolean result = sNativeQueue.checkAndSetState(expectedState, newState);
+        if (result) {
+            Log.d(LOGTAG, "State changed to " + newState);
+        }
+        return result;
     }
 
     @WrapForJNI(stubName = "SpeculativeConnect")
     private static native void speculativeConnectNative(String uri);
 
     public static void speculativeConnect(final String uri) {
         // This is almost always called before Gecko loads, so we don't
         // bother checking here if Gecko is actually loaded or not.