From 2a554f15694e388eab6aa1044f26e37a6dc27451 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Thu, 10 Apr 2003 17:47:45 +0000 Subject: [PATCH] Added support for object streaming debugging. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2395 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../com/threerings/io/ObjectInputStream.java | 11 ++++- src/java/com/threerings/io/Streamer.java | 45 ++++++++++++++++--- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/java/com/threerings/io/ObjectInputStream.java b/src/java/com/threerings/io/ObjectInputStream.java index 4f7a7675d..9f90f6a32 100644 --- a/src/java/com/threerings/io/ObjectInputStream.java +++ b/src/java/com/threerings/io/ObjectInputStream.java @@ -1,5 +1,5 @@ // -// $Id: ObjectInputStream.java,v 1.2 2002/12/02 22:10:10 mdb Exp $ +// $Id: ObjectInputStream.java,v 1.3 2003/04/10 17:47:45 mdb Exp $ package com.threerings.io; @@ -50,6 +50,9 @@ public class ObjectInputStream extends DataInputStream // a zero code indicates a null value if (code == 0) { + if (STREAM_DEBUG) { + Log.info(hashCode() + ": Read null."); + } return null; // if the code is negative, that means that we've never @@ -63,6 +66,9 @@ public class ObjectInputStream extends DataInputStream String cname = readUTF(); Class sclass = Class.forName(cname); Streamer streamer = Streamer.getStreamer(sclass); + if (STREAM_DEBUG) { + Log.info(hashCode() + ": New class '" + cname + "'."); + } // sanity check if (streamer == null) { @@ -184,4 +190,7 @@ public class ObjectInputStream extends DataInputStream /** The streamer being used currently. */ protected Streamer _streamer; + + /** Used to activate verbose debug logging. */ + protected static final boolean STREAM_DEBUG = false; } diff --git a/src/java/com/threerings/io/Streamer.java b/src/java/com/threerings/io/Streamer.java index 73d91a361..4466a6db8 100644 --- a/src/java/com/threerings/io/Streamer.java +++ b/src/java/com/threerings/io/Streamer.java @@ -1,5 +1,5 @@ // -// $Id: Streamer.java,v 1.5 2002/12/23 00:40:39 mdb Exp $ +// $Id: Streamer.java,v 1.6 2003/04/10 17:47:45 mdb Exp $ package com.threerings.io; @@ -196,9 +196,18 @@ public class Streamer // count and create an array instance of the appropriate type // and size if (_target.isArray()) { - return Array.newInstance( - _target.getComponentType(), in.readInt()); + int length = in.readInt(); + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + ": Creating array '" + + _target.getComponentType().getName() + + "[" + length + "]'."); + } + return Array.newInstance(_target.getComponentType(), length); } else { + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + ": Creating object '" + + _target.getName() + "'."); + } return _target.newInstance(); } @@ -230,8 +239,11 @@ public class Streamer // if we're supposed to and one exists, use the reader method if (useReader && _reader != null) { try { -// Log.info("Reading with reader " + -// "[class=" + _target.getName() + "]."); + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + ": Reading with reader '" + + _target.getName() + "." + + _reader.getName() + "()'."); + } _reader.invoke(object, new Object[] { in }); } catch (Throwable t) { @@ -249,6 +261,10 @@ public class Streamer return; } + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + ": Reading '" + _target.getName() + "'."); + } + // if we're reading in an array, do some special business if (_target.isArray()) { int length = Array.getLength(object); @@ -266,14 +282,25 @@ public class Streamer if (mask.isSet(ii)) { Object element = _delegate.createObject(in); in.setCurrent(_delegate, element); + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + + ": Reading fixed element '" + ii + "'."); + } _delegate.readObject(element, in, useReader); Array.set(object, ii, element); + } else if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + + ": Skipping null element '" + ii + "'."); } } } else { // otherwise we had to write each object out individually for (int ii = 0; ii < length; ii++) { + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + + ": Reading free element '" + ii + "'."); + } Array.set(object, ii, in.readObject()); } } @@ -293,6 +320,10 @@ public class Streamer throw new IOException(errmsg); } try { + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + + ": Reading field '" + field.getName() + "'."); + } fm.readField(field, object, in); } catch (Exception e) { Log.logStackTrace(e); @@ -302,6 +333,10 @@ public class Streamer throw new NestableIOException(errmsg, e); } } + + if (ObjectInputStream.STREAM_DEBUG) { + Log.info(in.hashCode() + ": Read object '" + object + "'."); + } } /**