Reviewers: zundel,

Description:
SpeedTracerLogger: Don't throw exceptions on missed events. Instead, try
to recover gracefully.

Review by: [email protected]

Please review this at http://gwt-code-reviews.appspot.com/674805/show

Affected files:
M dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java


Index: dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java
===================================================================
--- dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java (revision 8450) +++ dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java (working copy)
@@ -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,26 +296,21 @@
     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