import com.google.gwt.query.client.DeferredGQuery;\r
import com.google.gwt.query.client.Function;\r
import com.google.gwt.query.client.GQuery;\r
-import com.google.gwt.query.client.SelectorEngine;\r
import com.google.gwt.query.client.impl.SelectorEngineCssToXPath;\r
import com.google.gwt.query.client.impl.SelectorEngineImpl;\r
import com.google.gwt.query.client.impl.SelectorEngineJS;\r
+import com.google.gwt.query.client.impl.SelectorEngineNative;\r
+import com.google.gwt.query.client.impl.SelectorEngineNativeIE8;\r
import com.google.gwt.query.client.impl.SelectorEngineSizzle;\r
import com.google.gwt.query.client.impl.SelectorEngineSizzleGwt;\r
import com.google.gwt.query.client.impl.SelectorEngineXPath;\r
\r
public interface Benchmark {\r
String getId();\r
- int runSelector(DeferredGQuery dq, String selector);\r
+ String getName();\r
+ int runSelector(DeferredGQuery dq);\r
}\r
\r
- /**\r
- * Benchmark for the default dynamic selector implementation \r
- */\r
- private class DynamicBenchmark extends GQueryDynamicBenchmark {\r
- private SelectorEngineImpl engine;\r
-\r
- DynamicBenchmark(SelectorEngineImpl engine, String name) {\r
- super(name);\r
- this.engine = engine;\r
- }\r
-\r
- public int runSelector(DeferredGQuery dq, String selector) {\r
- return engine.select(selector, gwtiframe).getLength();\r
- }\r
- }\r
-\r
/**\r
* Benchmark for the compiled selectors\r
*/\r
private class GQueryCompiledBenchmark implements Benchmark {\r
\r
String id;\r
+ String name;\r
\r
GQueryCompiledBenchmark(String id) {\r
this.id = id;\r
return id;\r
}\r
\r
- public int runSelector(DeferredGQuery dq, String selector) {\r
+ public int runSelector(DeferredGQuery dq) {\r
return dq.array(gwtiframe).getLength();\r
}\r
+\r
+ public String getName() {\r
+ if (name == null) {\r
+ MySelectors s = GWT.create(MySelectors.class);\r
+ s.body(document);\r
+ name = s.getClass().getName().replaceAll("^.*_", "");\r
+ if (s.isDegradated()) {\r
+ name += " [degradated]";\r
+ }\r
+ }\r
+ return name;\r
+ }\r
}\r
\r
/**\r
- * Benchmark for other dynamic selectors\r
+ * Benchmark for dynamic selectors\r
*/\r
- private class GQueryDynamicBenchmark implements Benchmark {\r
+ private class DynamicBenchmark implements Benchmark {\r
\r
- private SelectorEngine engine;\r
+ protected SelectorEngineImpl engine;\r
private String id;\r
\r
- GQueryDynamicBenchmark(String name) {\r
+ DynamicBenchmark(SelectorEngineImpl engine, String name) {\r
this.id = name;\r
- this.engine = new SelectorEngine();\r
+ this.engine = engine;\r
}\r
\r
public String getId() {\r
return id;\r
}\r
\r
- public int runSelector(DeferredGQuery dq, String selector) {\r
- return engine.select(selector, gwtiframe).getLength();\r
+ public int runSelector(DeferredGQuery dq) {\r
+ return engine.select(dq.getSelector(), gwtiframe).getLength();\r
+ }\r
+\r
+ public String getName() {\r
+ String name = engine.getClass().getName().replaceAll("^.*\\.", "");\r
+ return name;\r
}\r
}\r
\r
return id;\r
}\r
\r
- public int runSelector(DeferredGQuery dq, String selector) {\r
- return runSelector(dq, id, selector);\r
+ public int runSelector(DeferredGQuery dq) {\r
+ return runSelector(id, dq.getSelector());\r
}\r
\r
- public native int runSelector(DeferredGQuery dq, String id, String selector) /*-{\r
+ public native int runSelector(String id, String selector) /*-{\r
return eval("$wnd." + id + "benchmark('" + selector + "')");\r
}-*/;\r
+\r
+ public String getName() {\r
+ return id;\r
+ }\r
}\r
\r
private int min_time = 200;\r
*/\r
private final Benchmark[] benchmarks = new Benchmark[] {\r
new GQueryCompiledBenchmark("gwt_compiled"), \r
- new GQueryDynamicBenchmark("gwt_dynamic"),\r
+ new DynamicBenchmark((SelectorEngineImpl)GWT.create(SelectorEngineImpl.class), "gwt_dynamic"),\r
new DynamicBenchmark(new SelectorEngineSizzle(), "gwt_sizzle_jsni"),\r
new DynamicBenchmark(new SelectorEngineSizzleGwt(), "gwt_sizzle_java"),\r
new DynamicBenchmark(new SelectorEngineJS(), "gwt_domassist_java"),\r
new DynamicBenchmark(new SelectorEngineXPath(), "gwt_xpath"),\r
new DynamicBenchmark(new SelectorEngineCssToXPath(), "gwt_css2xpath"),\r
+ new DynamicBenchmark(new SelectorEngineNative(), "gwt_native"),\r
+ new DynamicBenchmark(new SelectorEngineNativeIE8(), "gwt_nativeIE8"),\r
new IframeBenchmark("jquery"),\r
new IframeBenchmark("dojo"), \r
new IframeBenchmark("prototype"),\r
int num = 0;\r
long end = start;\r
Benchmark m = selectedBenchmarks[benchMarkNumber];\r
- String selector = d.getSelector();\r
double runtime = min_time;\r
int found = 0;\r
try {\r
do {\r
- num += m.runSelector(d, selector);\r
+ num += m.runSelector(d);\r
end = System.currentTimeMillis();\r
numCalls++;\r
} while (end - start < min_time);\r
*/\r
public void onModuleLoad() {\r
\r
- \r
final MySelectors m = GWT.create(MySelectors.class);\r
\r
System.out.println(showCapabilities());\r
waitToLoad = Integer.parseInt(par);\r
}\r
\r
- \r
initSelects(benchmarks);\r
initIFrames();\r
$("#results").hide();\r
select = select.replaceAll("%SEL%", "checked='checked'");\r
}\r
}\r
- g.append(select.replaceAll("%ID%", b.getId()).replaceAll("%SEL", ""));\r
+ g.append(select.replaceAll("%ID%", b.getId() + " " + b.getName()).replaceAll("%SEL", ""));\r
}\r
g.append("<br/><button id=run>Run</button>");\r
$("#run").click(runBenchMarks);\r
private Benchmark[] readBenchmarkSelection() {\r
ArrayList<Benchmark> bs = new ArrayList<Benchmark>();\r
for (Element e : $("input", selectPanel.getElement()).elements()) {\r
- String val = $(e).val();\r
+ String val = $(e).val().replaceAll(" .*$", "");\r
if (!"".equals(val)) {\r
for (Benchmark b : benchmarks) {\r
if (b.getId().equals(val)) {\r