/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.user.benchmarks; import com.google.gwt.benchmarks.client.Benchmark; import com.google.gwt.benchmarks.client.IntRange; import com.google.gwt.benchmarks.client.Operator; import com.google.gwt.benchmarks.client.RangeField; import com.google.gwt.benchmarks.client.Setup; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimpleCheckBox; import com.google.gwt.user.client.ui.Widget; import java.util.ArrayList; import java.util.List; /** * Measures the speed with which event handlers can be added and removed to a * few simple UI classes. This is here to allow us to compare the performance of * the old event listeners and the new event handlers. This first version, of * course, can only look at listeners, as handlers aren't here yet. */ public class DomEventBenchmark extends Benchmark { /** * Whether to use old listeners or new handlers. */ // protected enum RegistrationStyle { // OLD_LISTENERS, NEW_HANDLERS // } private static final int NUM_WIDGETS = 250; protected final IntRange listenerRange = new IntRange(4, 400, Operator.MULTIPLY, 10); private List<SimpleCheckBox> widgets; private List<ClickListener> listeners; @Override public String getModuleName() { return "com.google.gwt.user.UserBenchmarks"; } // Required for JUnit public void testSimpleCheckBoxAddAndRemoveForClicks() { } @Setup("reset") public void testSimpleCheckBoxAddAndRemoveForClicks( // @RangeEnum(RegistrationStyle.class) RegistrationStyle style, @RangeField("listenerRange") Integer numListeners) { // The RegistrationStyle blank is here to be filled in when handlers arrive. // Until then, just run the tests twice. // if (RegistrationStyle.OLD_LISTENERS == style) { for (SimpleCheckBox cb : widgets) { for (int i = 0; i < numListeners; i++) { cb.addClickListener(listeners.get(i)); } } for (SimpleCheckBox cb : widgets) { for (int i = 0; i < numListeners; i++) { cb.removeClickListener(listeners.get(i)); } } // } } // Required for JUnit public void testSimpleCheckBoxAddForClicks() { } @Setup("reset") public void testSimpleCheckBoxAddForClicks( // @RangeEnum(RegistrationStyle.class) RegistrationStyle style, @RangeField("listenerRange") Integer numListeners) { // The RegistrationStyle blank is here to be filled in when handlers arrive. // Until then, just run the tests twice. // if (RegistrationStyle.OLD_LISTENERS == style) { for (SimpleCheckBox cb : widgets) { for (int i = 0; i < numListeners; i++) { cb.addClickListener(listeners.get(i)); } } // } } void reset(/* RegistrationStyle style , */Integer numListeners) { RootPanel root = RootPanel.get(); root.clear(); widgets = new ArrayList<SimpleCheckBox>(); listeners = new ArrayList<ClickListener>(); for (int i = 0; i < NUM_WIDGETS; i++) { SimpleCheckBox cb = new SimpleCheckBox(); widgets.add(cb); root.add(cb); } for (int i = 0; i < numListeners; i++) { listeners.add(new ClickListener() { public void onClick(Widget sender) { } }); } } // /** // * Cannot do this until we fix our inability to synthesize events, // * pending... // */ // public void testDispatch() { // // } }