blob: 469db17858b919895c4d0a2f295d754110b2fd8b [file] [log] [blame]
package com.google.gwt.reference.microbenchmark.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.TableSectionElement;
import com.google.gwt.i18n.client.NumberFormat;
class Util {
private static final DivElement detachedDiv = Document.get().createDivElement();
static final boolean hasQSA = hasQSA();
static final String EMPTY_OUTER_HTML = "<div>" + Util.EMPTY_INNER_HTML + "</div>";
static final String EMPTY_INNER_HTML = "<div id='div1'>"
+ "<div id='div2'></div>"
+ "<span id='span1'></span>"
+ "</div>"
+ "<div>"
+ "<div id='div3'>"
+ "<div id='div4'></div>"
+ "<span id='span2'></span>"
+ "</div>"
+ "</div>";
static final int TABLE_ROW_COUNT = 40;
static final int TABLE_COLUMN_COUNT = 10;
static final String TEXTY_OUTER_HTML = "<div>" + Util.TEXTY_INNER_HTML + "</div>";
static final String TEXTY_INNER_HTML = "Div root start"
+ "<div id='div1'>Div1 start"
+ "<div id='div2'>Div2</div>"
+ "<span id='span1'>Span1</span>"
+ "Div1 end</div>"
+ "<div>Div anon start"
+ "<div id='div3'>Div3"
+ "<div id='div4'>Div4</div>"
+ "<span id='span2'>Span2</span>"
+ "Div 3 end</div>"
+ "Div anon end</div>"
+ "Div root end";
private static int uniqueId = 0;
private static UtilImpl impl = GWT.create(UtilImpl.class);
static void addText(Element elm, String text) {
elm.appendChild(Document.get().createTextNode(text));
}
static String createTableHtml() {
StringBuilder sb = new StringBuilder();
sb.append("<table><tbody>");
sb.append(createTableRowsHtml());
sb.append("</tbody></table>");
return sb.toString();
}
static String createTableRowsHtml() {
// Assign a unique ID to ensure that we actually change the content.
uniqueId++;
StringBuilder sb = new StringBuilder();
for (int row = 0; row < Util.TABLE_ROW_COUNT; row++) {
if (row % 2 == 0) {
sb.append("<tr class=\"evenRow\">");
} else {
sb.append("<tr class=\"oddRow\">");
}
for (int column = 0; column < Util.TABLE_COLUMN_COUNT; column++) {
sb.append("<td align=\"center\" valign=\"middle\"><div>");
sb.append(uniqueId + " - Cell " + row + ":" + column);
sb.append("</div></td>");
}
sb.append("</tr>");
}
return sb.toString();
}
static String format(double median) {
return NumberFormat.getFormat("0").format(median);
}
static Element fromHtml(String html) {
Util.detachedDiv.setInnerHTML(html);
Element e = Util.detachedDiv.getFirstChildElement();
e.getParentElement().removeChild(e);
return e;
}
static String outerHtml(Element e) {
String string = "<" + e.getNodeName() + ">"
+ e.getInnerHTML()
+ "</" + e.getNodeName() + ">";
return string;
}
static native JsArray<Element> querySelectorAll(Node root, String selector) /*-{
return root.querySelectorAll(selector);
}-*/;
/**
* Replace all of the rows in the specified tbody.
*
* @param tbody the tbody element
* @param rowHtml the HTML that represents the rows
*/
static void replaceTableBodyRows(TableSectionElement tbody, String rowHtml) {
impl.replaceTableBodyRows(tbody, rowHtml);
}
static long roundToTens(double median) {
return Math.round(median/10)*10;
}
private static native boolean hasQSA() /*-{
var qsa = document.querySelectorAll;
return !(null == qsa);
}-*/;
}