Revision: 8462
Author: [email protected]
Date: Mon Aug  2 14:49:52 2010
Log: SpeedTracerLogger: Don't throw exceptions on missed events. Instead, try to recover gracefully.

Review at http://gwt-code-reviews.appspot.com/674805

Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=8462

Modified:
/trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java Thu Jul 29 04:13:58 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java Mon Aug 2 14:49:52 2010
@@ -82,7 +82,7 @@
     /**
      * @param data key/value pairs to add to JSON object.
      */
-    public void addData(String[] data) {
+    public void addData(String  ...data) {
       if (data != null) {
         assert (data.length % 2 == 0);
         this.data = Lists.addAll(this.data, data);
@@ -296,27 +296,22 @@
     assert (endTimeNanos >= currentEvent.startTimeNanos);
currentEvent.durationNanos = endTimeNanos - currentEvent.startTimeNanos;

-    List<Event> missedEvents = Lists.create();
-
-    // TODO(zundel): Why not just assert in this case?
     while (currentEvent.type != type && !threadPendingEvents.isEmpty()) {
       // Missed a closing end for one or more frames! Try to sync back up.
-      missedEvents = Lists.add(missedEvents, currentEvent);
+ currentEvent.addData("Missed", "This event was closed without an explicit call to SpeedTracerLogger.end()");
       currentEvent = threadPendingEvents.pop();
+      assert (endTimeNanos >= currentEvent.startTimeNanos);
currentEvent.durationNanos = endTimeNanos - currentEvent.startTimeNanos;
     }
+
+    if (threadPendingEvents.isEmpty() && currentEvent.type != type) {
+ currentEvent.addData("Missed", "Fell off the end of the threadPending events");
+    }
+
     currentEvent.addData(data);
     if (threadPendingEvents.isEmpty()) {
       eventsToWrite.add(currentEvent);
     }
-    if (missedEvents.size() > 0) {
-      StringBuilder sb = new StringBuilder();
- sb.append("SpeedTracerLogger missing end() calls for the following events: ");
-      for (Event event : missedEvents) {
-        sb.append(event.type.getName());
-      }
-      throw new IllegalStateException(sb.toString());
-    }
   }

   /**

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to