diff --git a/classlib/src/main/java/org/teavm/classlib/java/util/TLinkedList.java b/classlib/src/main/java/org/teavm/classlib/java/util/TLinkedList.java index ff98a6b97..d91237ac4 100644 --- a/classlib/src/main/java/org/teavm/classlib/java/util/TLinkedList.java +++ b/classlib/src/main/java/org/teavm/classlib/java/util/TLinkedList.java @@ -343,10 +343,10 @@ public class TLinkedList extends TAbstractSequentialList implements TDeque } removeEntry(currentEntry); if (currentEntry == prevEntry) { - prevEntry = nextEntry.previous; + prevEntry = hasNext() ? nextEntry.previous : null; --index; } else if (currentEntry == nextEntry) { - nextEntry = prevEntry.next; + nextEntry = hasPrevious() ? prevEntry.next : null; } --size; version = modCount; diff --git a/classlib/src/main/java/org/teavm/classlib/java/util/TTimer.java b/classlib/src/main/java/org/teavm/classlib/java/util/TTimer.java index aeb24a736..7e5df559b 100644 --- a/classlib/src/main/java/org/teavm/classlib/java/util/TTimer.java +++ b/classlib/src/main/java/org/teavm/classlib/java/util/TTimer.java @@ -81,4 +81,33 @@ public class TTimer extends TObject { }; task.nativeTimerId = Window.setTimeout(handler, (int) delay); } + + public void scheduleAtFixedRate(final TTimerTask task, long delay, long period) { + if (cancelled || task.timer != null || task.nativeTimerId >= 0) { + throw new TIllegalStateException(); + } + final long[] nextStartTime = new long[]{System.currentTimeMillis() + delay}; + task.timer = this; + TimerHandler handler = new TimerHandler() { + @Override public void onTimer() { + new Thread(() -> { + if (cancelled || task.timer == null) { + return; + } + long nextDelay = nextStartTime[0] - System.currentTimeMillis(); + if (nextDelay < 0 ) { + nextDelay = 0; + } + task.nativeTimerId = Window.setTimeout(this, (int) nextDelay); + nextStartTime[0] += period; + TTimerTask.performOnce(task); + if (!cancelled) { + task.timer = TTimer.this; + } + }).start(); + } + }; + task.nativeTimerId = Window.setTimeout(handler, (int) delay); + nextStartTime[0] += period; + } } diff --git a/samples/benchmark/README.md b/samples/benchmark/README.md index 7cc449341..fd8d1034d 100644 --- a/samples/benchmark/README.md +++ b/samples/benchmark/README.md @@ -1,5 +1,5 @@ -TeaVM, GWT, HotSport JBox2D Benchmark -===================================== +TeaVM, GWT, HotSpot, Bck2Brwsr JBox2D Benchmark +=============================================== Compares the speed of execution on a complex [JBox2D](http://www.jbox2d.org/) CPU extensive computation. JavaScript produced by TeaVM and GWT can be compared by running diff --git a/samples/benchmark/pom.xml b/samples/benchmark/pom.xml index 03634bc92..f1e5ceac9 100644 --- a/samples/benchmark/pom.xml +++ b/samples/benchmark/pom.xml @@ -19,7 +19,7 @@ Compares performance of the JavaScript code produced by TeaVM and GWT - 0.14 + 0.17 @@ -64,13 +64,6 @@ html5-canvas 0.7.2 - - com.dukescript.canvas - canvas-api - 0.7.2 - bck2brwsr - provided - org.apidesign.bck2brwsr ko-bck2brwsr