Index: sdk/lib/_internal/js_runtime/lib/preambles/d8.js |
diff --git a/sdk/lib/_internal/js_runtime/lib/preambles/d8.js b/sdk/lib/_internal/js_runtime/lib/preambles/d8.js |
index ca9093756e46bee93a6cdc15d041a9c7a6811376..00f2485248e46a10871650dad74ae93d801b0ae9 100644 |
--- a/sdk/lib/_internal/js_runtime/lib/preambles/d8.js |
+++ b/sdk/lib/_internal/js_runtime/lib/preambles/d8.js |
@@ -15,7 +15,6 @@ if (typeof global != "undefined") self = global; // Node.js. |
"use strict"; // Should be first statement of this function. |
// Location (Uri.base) |
- |
var baseUri = 'org-dartlang-d8-preamble:///mock/uri/base/'; |
if (typeof process != "undefined" && |
typeof process.cwd == "function") { |
@@ -78,7 +77,7 @@ if (typeof global != "undefined") self = global; // Node.js. |
var id = timerIdCounter++; |
f.$timerId = id; |
timerIds[id] = f; |
- if (ms == 0) { |
+ if (ms == 0 && !isNextTimerDue()) { |
zeroTimerQueue.push(f); |
} else { |
addDelayedTimer(f, ms); |
@@ -127,7 +126,10 @@ if (typeof global != "undefined") self = global; // Node.js. |
var originalDate = Date; |
var originalNow = originalDate.now; |
function advanceTimeTo(time) { |
- timeOffset = time - originalNow(); |
+ var now = originalNow(); |
+ if (timeOffset < time - now) { |
+ timeOffset = time - now; |
+ } |
} |
function installMockDate() { |
var NewDate = function Date(Y, M, D, h, m, s, ms) { |
@@ -172,6 +174,12 @@ if (typeof global != "undefined") self = global; // Node.js. |
} |
} |
+ function isNextTimerDue() { |
+ if (timerHeap.length == 0) return false; |
+ var head = timerHeap[0]; |
+ return head[0] < originalNow() + timeOffset; |
+ } |
+ |
function nextDelayedTimerQueue() { |
if (timerHeap.length == 0) return null; |
var result = timerHeap[0]; |
@@ -261,7 +269,7 @@ if (typeof global != "undefined") self = global; // Node.js. |
// Global properties. "self" refers to the global object, so adding a |
// property to "self" defines a global variable. |
- self.self = self |
+ self.self = self; |
self.dartMainRunner = function(main, args) { |
// Initialize. |
var action = function() { main(args); } |