package trikita.anvil; import org.junit.Test; import static trikita.anvil.BaseDSL.v; import static trikita.anvil.DSL.id; import static trikita.anvil.DSL.tag; public class BenchmarkTest extends Utils { private static final int N = 100000; private int mode; @Test public void testRenderBenchmark() { long start; Anvil.Renderable r = new Anvil.Renderable() { public void view() { for (int i = 0; i < 10; i++) { final int fi = i; group(transform(i), new Anvil.Renderable() { public void view() { for (int j = 0; j < 10; j++) { item(transform(fi * 10 + j)); } } }); } } }; mode = 0; Anvil.mount(container, r); start = System.currentTimeMillis(); for (int i = 0; i < N; i++) { Anvil.render(); } System.out.println("render/no-changes: " + (System.currentTimeMillis() - start)*1000/N + "us"); Anvil.unmount(container, true); mode = 1; Anvil.mount(container, r); start = System.currentTimeMillis(); for (int i = 0; i < N; i++) { Anvil.render(); } System.out.println("render/small-changes: " + (System.currentTimeMillis() - start)*1000/N +"us"); Anvil.unmount(container, true); mode = 2; Anvil.mount(container, r); start = System.currentTimeMillis(); for (int i = 0; i < N; i++) { Anvil.render(); } System.out.println("render/big-changes: " + (System.currentTimeMillis() - start)*1000/N+"us"); } private int transform(int i) { switch (mode) { case 0: return i; case 1: return (i == 1 ? (int)(Math.random() * 100): i); case 2: return (int) (Math.random() * 100); } return 0; } private void group(final int i, final Anvil.Renderable r) { v(MockLayout.class, new Anvil.Renderable() { public void view() { id(i * 100); tag("layout"); r.view(); } }); } private void item(final int i) { v(MockView.class, new Anvil.Renderable() { public void view() { id(i); tag("item"+i); } }); } }