| 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); |
| }-*/; |
| } |