=== modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.clipboard.js' --- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.clipboard.js 2015-10-14 16:32:09 +0000 +++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.clipboard.js 2015-10-15 15:05:27 +0000 @@ -253,6 +253,10 @@ inputText.value = encodeURIComponent(text); // to escape "\n" inputText.focus(); inputText.select(); + var keyObj = p2j.keys_queue.pop(); + var completed = (Date.now() - keyObj.startTime); + console.log("[" + keyObj.seq + "] " + String.fromCodePoint(keyObj.key) + " takes " + + (completed)); } /** * Check if a string is empty. === modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keyboard.js' --- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keyboard.js 2015-10-14 16:32:09 +0000 +++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keyboard.js 2015-10-15 14:31:53 +0000 @@ -88,6 +88,9 @@ document.addEventListener('keydown', keyboardReader.onkeydown, true); document.addEventListener('keypress', keyboardReader.onkeypress, true); document.addEventListener('keyup', keyboardReader.onkeyup, true); + var sequence = 0; + p2j.keys_queue = []; + p2j.keys_sequence = function() { return ++sequence;}; }; /** @@ -209,6 +212,12 @@ return; } } + p2j.keys_queue.push( + { + key : key, + startTime : Date.now(), + seq : p2j.keys_sequence() + }); sendKeyCode(key); evt.preventDefault(); === modified file 'src/com/goldencode/p2j/ui/client/gui/EditorGuiImpl.java' --- src/com/goldencode/p2j/ui/client/gui/EditorGuiImpl.java 2015-10-14 16:32:09 +0000 +++ src/com/goldencode/p2j/ui/client/gui/EditorGuiImpl.java 2015-10-15 14:38:37 +0000 @@ -198,7 +198,7 @@ public void processKeyEvent(KeyInput ke) { int key = ke.actionCode(); - + gd.setCurrentSelection(String.valueOf(ke.keyChar())); boolean invalidateSelection = true; NativePoint prevCaret = new NativePoint(absoluteX(), absoluteY()); boolean setSelEnd = false; === modified file 'src/com/goldencode/p2j/ui/client/gui/driver/EmulatedWindowState.java' --- src/com/goldencode/p2j/ui/client/gui/driver/EmulatedWindowState.java 2015-09-29 14:43:06 +0000 +++ src/com/goldencode/p2j/ui/client/gui/driver/EmulatedWindowState.java 2015-10-15 15:42:35 +0000 @@ -429,7 +429,7 @@ { int waitForBatch = 0; - System.err.println("START DRAWING CYCLE FOR WINDOW " + windowId); + //System.err.println("START DRAWING CYCLE FOR WINDOW " + windowId); while (!graphicPool.isEmpty() || waitForBatch != 0) { @@ -555,7 +555,7 @@ break; } - System.err.printf("PaintPrimitives.%s %s\n", ps.id.toString(), extra); + //System.err.printf("PaintPrimitives.%s %s\n", ps.id.toString(), extra); switch (ps.id) { @@ -580,7 +580,7 @@ flush(); - System.err.println("END DRAWING CYCLE FOR WINDOW " + windowId); + //System.err.println("END DRAWING CYCLE FOR WINDOW " + windowId); } } } === modified file 'src/com/goldencode/p2j/ui/client/gui/driver/web/GuiWebDriver.java' --- src/com/goldencode/p2j/ui/client/gui/driver/web/GuiWebDriver.java 2015-10-14 16:32:09 +0000 +++ src/com/goldencode/p2j/ui/client/gui/driver/web/GuiWebDriver.java 2015-10-15 15:37:20 +0000 @@ -36,7 +36,8 @@ import java.awt.Component; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; - +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.atomic.AtomicInteger; // don't import the entire logging package as it has naming conflicts with jetty import java.util.logging.Level; import java.util.logging.Logger; @@ -139,6 +140,24 @@ */ private LinkedList repaints = new LinkedList<>(); + private static final AtomicInteger KEYS_SEQ = new AtomicInteger(0); + static class KeyWrapper + { + int key; + long start; + int seq; + /** + * @param key + */ + public KeyWrapper(int key) + { + this.key = key; + this.start = System.currentTimeMillis(); + this.seq = KEYS_SEQ.incrementAndGet(); + } + + } + private static final Queue keys_queue = new ConcurrentLinkedQueue(); /** * Constructor. * @@ -395,7 +414,9 @@ @Override public int readKey() { - return websock.readKey(); + int key = websock.readKey(); + keys_queue.add(new KeyWrapper(key)); + return key; } /** @@ -1216,6 +1237,12 @@ @Override public void setCurrentSelection(String txt) { + KeyWrapper keyObj = keys_queue.poll(); + if (keyObj != null) + { + long completed = System.currentTimeMillis() - keyObj.start; + System.err.println("[" + keyObj.seq + "] " + keyObj.key + " takes " + completed); + } websock.setSelection(txt); } }