Author: [EMAIL PROTECTED] Date: Mon Nov 10 11:12:57 2008 New Revision: 4000
Added: releases/1.5/reference/dispatch/ releases/1.5/reference/dispatch/Dispatch.gwt.xml releases/1.5/reference/dispatch/client/ releases/1.5/reference/dispatch/client/Dispatch.java releases/1.5/reference/dispatch/client/Subject.java releases/1.5/reference/dispatch/public/ releases/1.5/reference/dispatch/public/Dispatch.html Log: app measures speed of event dispatch Added: releases/1.5/reference/dispatch/Dispatch.gwt.xml ============================================================================== --- (empty file) +++ releases/1.5/reference/dispatch/Dispatch.gwt.xml Mon Nov 10 11:12:57 2008 @@ -0,0 +1,6 @@ +<!DOCTYPE document SYSTEM + "http://google-web-toolkit.googlecode.com/svn/releases/1.5/distro-source/core/src/gwt-module.dtd"> +<module> + <inherits name='com.google.gwt.user.User' /> + <entry-point class='kellegous.client.Dispatch' /> +</module> Added: releases/1.5/reference/dispatch/client/Dispatch.java ============================================================================== --- (empty file) +++ releases/1.5/reference/dispatch/client/Dispatch.java Mon Nov 10 11:12:57 2008 @@ -0,0 +1,143 @@ +package kellegous.client; + +import com.google.gwt.core.client.Duration; +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Document; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.EventListener; + +public class Dispatch implements EntryPoint { + private static native Event createMockEvent() /*-{ + return { type: "click" }; + }-*/; + + private static double[] runTrial(int numberOfObservers, + int numberOfIterations, int numberOfSamples) { + final double[] results = new double[numberOfSamples]; + final EventListener subject = Subject.create(numberOfObservers); + final Event event = createMockEvent(); + for (int j = 0; j < numberOfSamples; ++j) { + final Duration d = new Duration(); + for (int i = 0; i < numberOfIterations; ++i) { + subject.onBrowserEvent(event); + } + results[j] = d.elapsedMillis(); + } + return results; + } + + private static native void schedule(Command command) /*-{ + $wnd.setTimeout(function() { + [EMAIL PROTECTED]::execute()(); + }, 0); + }-*/; + + // t-distribution for p = 0.05 (used to compute 95% confidence intervals). + // This table is based at df = 2. + private final static double[] TDIST = new double[] { + 4.3027, 3.1824, 2.7765, 2.5706, 2.4469, 2.3646, 2.3060, 2.2622, 2.2281, + 2.2010, 2.1788, 2.1604, 2.1448, 2.1315, 2.1199, 2.1098, 2.1009, 2.0930, + 2.0860, 2.0796, 2.0739, 2.0687, 2.0639, 2.0595, 2.0555, 2.0518, 2.0484, + 2.0452, 2.0423, 2.0395, 2.0369, 2.0345, 2.0322, 2.0301, 2.0281, 2.0262, + 2.0244, 2.0227, 2.0211, 2.0195, 2.0181, 2.0167, 2.0154, 2.0141, 2.0129, + 2.0117, 2.0106, 2.0096, 2.0086, 2.0076, 2.0066, 2.0057, 2.0049, 2.0040, + 2.0032, 2.0025, 2.0017, 2.0010, 2.0003, 1.9996, 1.9990, 1.9983, 1.9977, + 1.9971, 1.9966, 1.9960, 1.9955, 1.9949, 1.9944, 1.9939, 1.9935, 1.9930, + 1.9925, 1.9921, 1.9917, 1.9913, 1.9908, 1.9905, 1.9901, 1.9897, 1.9893, + 1.9890, 1.9886, 1.9883, 1.9879, 1.9876, 1.9873, 1.9870, 1.9867, 1.9864, + 1.9861, 1.9858, 1.9855, 1.9852, 1.9850, 1.9847, 1.9845, 1.9842, 1.9840}; + + private static double computeT(int df) { + return TDIST[df - 2]; + } + + private static double computeMean(double[] s) { + double sum = 0.0; + final int n = s.length; + for (int i = 0; i < n; ++i) { + sum += s[i]; + } + return sum / n; + } + + private static double computeStandardError(double[] data, double mean) { + final int n = data.length; + double sum = 0.0; + for (int i = 0; i < n; ++i) { + final double d = data[i] - mean; + sum += d * d; + } + + return Math.sqrt(sum / n) / Math.sqrt(n); + } + + private static class Stats { + private final double mean, upper, lower; + + Stats(double[] data) { + mean = computeMean(data); + final double error = computeStandardError(data, mean); + final double t = computeT(data.length - 1); + upper = mean + t * error; + lower = mean - t * error; + } + + @Override + public String toString() { + return mean + ", " + lower + ", " + upper; + } + } + + public static class Runner { + private int n; + private final int max, numIterations, numSamples; + private Stats[] results; + + Runner(int min, int max, int numIterations, int numSamples) { + n = min; + this.max = max; + this.numIterations = numIterations; + this.numSamples = numSamples; + results = new Stats[max - min + 1]; + } + + void finish() { + final Document document = Document.get(); + final DivElement root = document.createDivElement(); + document.getBody().appendChild(root); + for (int i = 0, n = results.length; i < n; ++i) { + final DivElement div = document.createDivElement(); + root.appendChild(div); + div.setInnerText("" + results[i].toString()); + } + } + + void next() { + schedule(new Command() { + public void execute() { + final double[] results = runTrial(n, numIterations, numSamples); + Runner.this.results[n] = new Stats(results); + if (++n <= max) { + next(); + } else { + finish(); + } + } + }); + } + + void run() { + next(); + } + } + + public void onModuleLoad() { + // Don't run this in hosted mode. + if (GWT.isScript()) { + new Runner(0, 10, 10000, 20).run(); + } + } +} Added: releases/1.5/reference/dispatch/client/Subject.java ============================================================================== --- (empty file) +++ releases/1.5/reference/dispatch/client/Subject.java Mon Nov 10 11:12:57 2008 @@ -0,0 +1,22 @@ +package kellegous.client; + +import com.google.gwt.user.client.EventListener; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.ClickListener; +import com.google.gwt.user.client.ui.Widget; + +public class Subject { + public static EventListener create(int numberOfObserver) { + final Button subject = new Button("a button"); + for (int i = 0; i < numberOfObserver; ++i) { + subject.addClickListener(new ClickListener() { + private int count = 0; + + public void onClick(Widget sender) { + count++; + } + }); + } + return subject; + } +} Added: releases/1.5/reference/dispatch/public/Dispatch.html ============================================================================== --- (empty file) +++ releases/1.5/reference/dispatch/public/Dispatch.html Mon Nov 10 11:12:57 2008 @@ -0,0 +1,10 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=UTF-8"> + <title>Dispatch5</title> + <script type="text/javascript" language="javascript" src="kellegous.Dispatch.nocache.js"></script> + </head> + <body> + </body> +</html> --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---