Minor refactoring of "dashboard" interfaces in GWT. I'd made these changes this
week in another branch (while initial changes were still in review) to make the
implementation and some of its tests (which are easier to write when method
parameters are interfaces that can easily be mocked vs. classes) a little
cleaner.
Made package-private member of DevModeSession public for testing purposes. Changed DashboardNotifier.devModeEvent() signature to allow easier unit testing due to quirks in SpeedTracerLogger.Event.
Review at http://gwt-code-reviews.appspot.com/1439801
Review by: tobyr@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10176 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/shell/DevModeSession.java b/dev/core/src/com/google/gwt/dev/shell/DevModeSession.java
index 0f32d7a..6ba5b50 100644
--- a/dev/core/src/com/google/gwt/dev/shell/DevModeSession.java
+++ b/dev/core/src/com/google/gwt/dev/shell/DevModeSession.java
@@ -47,13 +47,14 @@
private String userAgent;
/**
- * Creates a new instance.
+ * Creates a new instance. It is public only for unit test purposes and is
+ * not meant to be used outside of this package.
*
* @param moduleName the name of the GWT module for this session
* @param userAgent the User agent field provided by the browser for this
* session
*/
- DevModeSession(String moduleName, String userAgent) {
+ public DevModeSession(String moduleName, String userAgent) {
this.moduleName = moduleName;
this.userAgent = userAgent;
}
diff --git a/dev/core/src/com/google/gwt/dev/util/log/dashboard/DashboardNotifier.java b/dev/core/src/com/google/gwt/dev/util/log/dashboard/DashboardNotifier.java
index 8b9f128..c89ddcc 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/dashboard/DashboardNotifier.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/dashboard/DashboardNotifier.java
@@ -17,7 +17,6 @@
package com.google.gwt.dev.util.log.dashboard;
import com.google.gwt.dev.shell.DevModeSession;
-import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
/**
* Sends information to a dashboard service. The dashboard service collects
@@ -34,7 +33,8 @@
/**
* Records a top-level event to the dashboard.
*/
- void devModeEvent(DevModeSession session, Event event);
+ void devModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+ long durationNanos);
/**
* Records a new module/session.
diff --git a/dev/core/src/com/google/gwt/dev/util/log/dashboard/NoOpDashboardNotifier.java b/dev/core/src/com/google/gwt/dev/util/log/dashboard/NoOpDashboardNotifier.java
index 111660f..844f59d 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/dashboard/NoOpDashboardNotifier.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/dashboard/NoOpDashboardNotifier.java
@@ -13,20 +13,19 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-
package com.google.gwt.dev.util.log.dashboard;
import com.google.gwt.dev.shell.DevModeSession;
-import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
/**
- * Implements the <code>DashboardNotifier</code> interface but does not actually
+ * Implements the {@code DashboardNotifier} interface but does not actually
* do anything.
*/
public class NoOpDashboardNotifier implements DashboardNotifier {
@Override
- public void devModeEvent(DevModeSession sesion, Event event) {
+ public void devModeEvent(DevModeSession sesion, String eventType, long startTimeNanos,
+ long durationNanos) {
// do nothing
}
diff --git a/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java b/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java
index f4cd953..51148a5 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java
@@ -860,7 +860,8 @@
}
DashboardNotifierFactory.getNotifier().devModeEvent(currentEvent.getDevModeSession(),
- currentEvent);
+ currentEvent.getType().getName(), currentEvent.getElapsedStartTimeNanos(),
+ currentEvent.getElapsedDurationNanos());
}
}
diff --git a/dev/core/test/com/google/gwt/dev/shell/DevModeSessionTestUtil.java b/dev/core/test/com/google/gwt/dev/shell/DevModeSessionTestUtil.java
index 8654565..f6443cd 100644
--- a/dev/core/test/com/google/gwt/dev/shell/DevModeSessionTestUtil.java
+++ b/dev/core/test/com/google/gwt/dev/shell/DevModeSessionTestUtil.java
@@ -3,8 +3,9 @@
package com.google.gwt.dev.shell;
/**
- * Provides public method for accessing package-private members of
- * <code>DevModeSession</code> for testing.
+ * Provides public method for convenience in unit tests. Allows access of
+ * package-private member
+ * {@link DevModeSession#setSessionForCurrentThread(DevModeSession)}.
*
* @author jhumphries@google.com (Joshua Humphries)
*/
diff --git a/dev/core/test/com/google/gwt/dev/util/log/dashboard/DashboardNotifierFactoryTest.java b/dev/core/test/com/google/gwt/dev/util/log/dashboard/DashboardNotifierFactoryTest.java
index 44df0fa..d3950dd 100644
--- a/dev/core/test/com/google/gwt/dev/util/log/dashboard/DashboardNotifierFactoryTest.java
+++ b/dev/core/test/com/google/gwt/dev/util/log/dashboard/DashboardNotifierFactoryTest.java
@@ -16,7 +16,6 @@
package com.google.gwt.dev.util.log.dashboard;
import com.google.gwt.dev.shell.DevModeSession;
-import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
import junit.framework.TestCase;
@@ -29,7 +28,8 @@
// create test notifier instance
DashboardNotifier obj = new DashboardNotifier() {
@Override
- public void devModeEvent(DevModeSession session, Event event) {
+ public void devModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+ long durationNanos) {
// no need to do anything
}
diff --git a/dev/core/test/com/google/gwt/dev/util/log/dashboard/SpeedTracerLoggerTestMockNotifier.java b/dev/core/test/com/google/gwt/dev/util/log/dashboard/SpeedTracerLoggerTestMockNotifier.java
index 889a357..1b7cd10 100644
--- a/dev/core/test/com/google/gwt/dev/util/log/dashboard/SpeedTracerLoggerTestMockNotifier.java
+++ b/dev/core/test/com/google/gwt/dev/util/log/dashboard/SpeedTracerLoggerTestMockNotifier.java
@@ -23,9 +23,60 @@
import java.util.LinkedList;
/**
- * Mock object for testing SpeedTracerLogger
+ * Mock object for testing integration of {@code SpeedTracerLogger} and
+ * {@code DashboardNotifier}.
*/
public class SpeedTracerLoggerTestMockNotifier implements DashboardNotifier {
+
+ /**
+ * Represents the parameters passed to {@code devModeEvent()}.
+ */
+ public static class DevModeEvent {
+ private DevModeSession session;
+ private String eventType;
+ private long startTimeNanos;
+ private long durationNanos;
+
+ public DevModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+ long durationNanos) {
+ this.session = session;
+ this.eventType = eventType;
+ this.startTimeNanos = startTimeNanos;
+ this.durationNanos = durationNanos;
+ }
+
+ public DevModeEvent(Event e) {
+ this.session = e.getDevModeSession();
+ this.eventType = e.getType().getName();
+ this.startTimeNanos = e.getElapsedStartTimeNanos();
+ this.durationNanos = e.getElapsedDurationNanos();
+ }
+
+ public DevModeSession getDevModeSession() {
+ return session;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o != null && o instanceof DevModeEvent) {
+ DevModeEvent e = (DevModeEvent) o;
+ return session.equals(e.session) && eventType.equals(e.eventType)
+ && startTimeNanos == e.startTimeNanos && durationNanos == e.durationNanos;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 37;
+ hash = hash*19 + session.hashCode();
+ hash = hash*19 + eventType.hashCode();
+ hash = hash*19 + Long.valueOf(startTimeNanos).hashCode();
+ hash = hash*19 + Long.valueOf(durationNanos).hashCode();
+ return hash;
+ }
+ }
+
/**
* Activates this mock object. After calling this, the notifier factory will
* be setup so that dashboard notifications are enabled and the notifier
@@ -38,13 +89,15 @@
}
/**
- * This keeps track of events
+ * Keeps track of calls to {@code devModeEvent()}.
*/
- private LinkedList<Event> eventSeq = new LinkedList<Event>();
+ private LinkedList<DevModeEvent> eventSeq = new LinkedList<DevModeEvent>();
@Override
- public void devModeEvent(DevModeSession session, Event event) {
- eventSeq.add(event);
+ public void devModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+ long durationNanos) {
+ DevModeEvent e = new DevModeEvent(session, eventType, startTimeNanos, durationNanos);
+ eventSeq.add(e);
}
@Override
@@ -55,7 +108,7 @@
false);
}
- public LinkedList<Event> getEventSequence() {
+ public LinkedList<DevModeEvent> getEventSequence() {
return eventSeq;
}
}
diff --git a/dev/core/test/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLoggerTest.java b/dev/core/test/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLoggerTest.java
index 7ed6395..0cb34de 100644
--- a/dev/core/test/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLoggerTest.java
+++ b/dev/core/test/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLoggerTest.java
@@ -21,6 +21,7 @@
import com.google.gwt.dev.shell.DevModeSession;
import com.google.gwt.dev.shell.DevModeSessionTestUtil;
import com.google.gwt.dev.util.log.dashboard.SpeedTracerLoggerTestMockNotifier;
+import com.google.gwt.dev.util.log.dashboard.SpeedTracerLoggerTestMockNotifier.DevModeEvent;
import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.EventType;
import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Format;
@@ -288,7 +289,7 @@
DevModeSession session2 = DevModeSessionTestUtil.createSession("test2", "test", false);
// expected values (used in final assertions below)
- LinkedList<Event> expectedEvents = new LinkedList<Event>();
+ LinkedList<DevModeEvent> expectedEvents = new LinkedList<DevModeEvent>();
LinkedList<DevModeSession> expectedSessions = new LinkedList<DevModeSession>();
Event evt1, evt2;
@@ -300,7 +301,7 @@
evt2.end();
evt1.end();
// expect only first event
- expectedEvents.add(evt1);
+ expectedEvents.add(new DevModeEvent(evt1));
expectedSessions.add(session1); // event should get "default" session
// now with session specified
@@ -310,12 +311,12 @@
evt2.end();
evt1.end();
// expect only first event
- expectedEvents.add(evt1);
+ expectedEvents.add(new DevModeEvent(evt1));
expectedSessions.add(session2);
evt1 = SpeedTracerLogger.start(session1, DevModeEventType.JS_TO_JAVA_CALL, "k1", "v1");
evt1.end();
- expectedEvents.add(evt1);
+ expectedEvents.add(new DevModeEvent(evt1));
expectedSessions.add(session1);
// Finally, assert that the events and corresponding sessions sent to the
@@ -325,7 +326,7 @@
// Collect sessions associated with each event
LinkedList<DevModeSession> actualSessions = new LinkedList<DevModeSession>();
- for (Event event : notifier.getEventSequence()) {
+ for (DevModeEvent event : notifier.getEventSequence()) {
actualSessions.add(event.getDevModeSession());
}