From 91ff2175f6b2ddc47277e9beb3ad4b33dc87d568 Mon Sep 17 00:00:00 2001 From: Eric House Date: Tue, 12 Mar 2019 07:05:12 -0700 Subject: [PATCH] add logging of CurGameInfo Trying to track down why some player names aren't preserved --- .../main/java/org/eehouse/android/xw4/GameUtils.java | 12 ++++++++++++ .../org/eehouse/android/xw4/XWServiceHelper.java | 4 ++-- .../org/eehouse/android/xw4/jni/CurGameInfo.java | 5 ++++- .../java/org/eehouse/android/xw4/jni/JNIThread.java | 1 + .../main/java/org/eehouse/android/xw4/jni/XwJNI.java | 3 +++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameUtils.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameUtils.java index add6b571b..fba77324f 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameUtils.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameUtils.java @@ -201,6 +201,7 @@ public class GameUtils { private static GameSummary summarize( Context context, GameLock lock, GamePtr gamePtr, CurGameInfo gi ) { + Log.d( TAG, "summarize(gi=%s)", gi ); GameSummary summary = new GameSummary( gi ); XwJNI.game_summarize( gamePtr, summary ); @@ -233,6 +234,14 @@ public class GameUtils { result = DBUtils.getSummary( context, lock ); } } catch ( GameLock.GameLockedException gle ) { + if ( false && BuildConfig.DEBUG ) { + String dump = GameLock.getHolderDump( rowid ); + Log.d( TAG, "getSummary() got gle: %s; cur owner: %s", + gle, dump ); + + String msg = "getSummary() unable to lock; owner: " + dump; + CrashTrack.logAndSend( TAG, msg ); + } } } } @@ -514,6 +523,7 @@ public class GameUtils { CurGameInfo gi, GameLock lock, boolean setCreate ) { + Log.d( TAG, "saveGame() gi: %s", gi ); byte[] stream = XwJNI.game_saveToStream( gamePtr, gi ); return saveGame( context, stream, lock, setCreate ); } @@ -521,6 +531,7 @@ public class GameUtils { public static long saveNewGame( Context context, GamePtr gamePtr, CurGameInfo gi, long groupID ) { + Log.d( TAG, "saveNewGame() gi: %s", gi ); byte[] stream = XwJNI.game_saveToStream( gamePtr, gi ); long rowid; try ( GameLock lock = DBUtils.saveNewGame( context, stream, groupID, null ) ) { @@ -1036,6 +1047,7 @@ public class GameUtils { DBUtils.setMsgFlags( rowid, flags | curFlags ); } } + Log.d( TAG, "feedMessage(): gi: %s)", gi ); } } catch ( GameLock.GameLockedException gle ) { DbgUtils.toastNoLock( TAG, context, rowid, diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWServiceHelper.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWServiceHelper.java index 54efb93a0..06ece2e07 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWServiceHelper.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWServiceHelper.java @@ -123,6 +123,7 @@ abstract class XWServiceHelper { String device, DictFetchOwner dfo ) { boolean success = nli.isValid() && checkNotInFlight( nli ); + CurGameInfo gi = null; if ( success ) { long[] rowids = DBUtils.getRowIDsFor( mService, nli.gameID() ); if ( 0 == rowids.length ) { @@ -135,7 +136,6 @@ abstract class XWServiceHelper { // for duplicates! forceChannel's hard to dig up, but works for ( int ii = 0; success && ii < rowids.length; ++ii ) { long rowid = rowids[ii]; - CurGameInfo gi = null; try ( GameLock lock = GameLock.tryLockRO( rowid ) ) { // drop invite if can't open game; likely a dupe! if ( null != lock ) { @@ -182,7 +182,7 @@ abstract class XWServiceHelper { } } } - Log.d( TAG, "handleInvitation() => %b", success ); + Log.d( TAG, "handleInvitation() => %b (gi: %s)", success, gi ); return success; } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/CurGameInfo.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/CurGameInfo.java index 1e298fb29..eedeaa81e 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/CurGameInfo.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/CurGameInfo.java @@ -167,7 +167,10 @@ public class CurGameInfo implements Serializable { sb.append( players[ii] ) .append( ", " ); } - sb.append( "], gameID: ").append( gameID ); + sb.append( "], gameID: ").append( gameID ) + .append( ", hashCode: ").append( hashCode() ) + .append('}'); + result = sb.toString(); } else { result = super.toString(); diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/JNIThread.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/JNIThread.java index 5a7c8f803..f312537d6 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/JNIThread.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/JNIThread.java @@ -388,6 +388,7 @@ public class JNIThread extends Thread implements AutoCloseable { if ( null != m_newDict ) { m_gi.dictName = m_newDict; } + Log.d( TAG, "save_jni(); m_gi: %s", m_gi ); byte[] state = XwJNI.game_saveToStream( m_jniGamePtr, m_gi ); int newHash = Arrays.hashCode( state ); boolean hashesEqual = m_lastSavedState == newHash; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java index 1d58afea5..72db04333 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java @@ -163,6 +163,7 @@ public class XwJNI { public static void gi_from_stream( CurGameInfo gi, byte[] stream ) { gi_from_stream( getJNI().m_ptr, gi, stream ); + Log.d( TAG, "gi_from_stream() read: %s", gi ); } public static byte[] nliToStream( NetLaunchInfo nli ) @@ -207,6 +208,8 @@ public class XwJNI { cp, procs ) ) { gamePtr.release(); gamePtr = null; + } else { + Log.d( TAG, "initFromStream() read: %s", gi ); } return gamePtr;