Skip to content

Commit b8ac3d2

Browse files
committed
precise clock_gettime when not using CLOCK_REALTIME; fixes #1795
1 parent 6aff045 commit b8ac3d2

File tree

4 files changed

+29
-23
lines changed

4 files changed

+29
-23
lines changed

src/library.js

+26-3
Original file line numberDiff line numberDiff line change
@@ -6118,12 +6118,17 @@ LibraryManager.library = {
61186118
}
61196119
return _usleep((seconds * 1e6) + (nanoseconds / 1000));
61206120
},
6121-
// TODO: Implement these for real.
6121+
clock_gettime__deps: ['emscripten_get_now'],
61226122
clock_gettime: function(clk_id, tp) {
61236123
// int clock_gettime(clockid_t clk_id, struct timespec *tp);
6124-
var now = Date.now();
6124+
var now;
6125+
if (clk_id === {{{ cDefine('CLOCK_REALTIME') }}}) {
6126+
now = Date.now();
6127+
} else {
6128+
now = _emscripten_get_now();
6129+
}
61256130
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_sec, 'Math.floor(now/1000)', 'i32') }}}; // seconds
6126-
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_nsec, '(now % 1000) * 1000 * 1000', 'i32') }}}; // nanoseconds (really milliseconds)
6131+
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_nsec, 'Math.floor((now % 1000)*1000*1000)', 'i32') }}}; // nanoseconds
61276132
return 0;
61286133
},
61296134
clock_settime: function(clk_id, tp) {
@@ -8672,6 +8677,24 @@ LibraryManager.library = {
86728677
return func();
86738678
},
86748679

8680+
emscripten_get_now: function() {
8681+
if (!_emscripten_get_now.actual) {
8682+
if (ENVIRONMENT_IS_NODE) {
8683+
_emscripten_get_now.actual = function _emscripten_get_now_actual() {
8684+
var t = process['hrtime']();
8685+
return t[0] * 1e3 + t[1] / 1e6;
8686+
}
8687+
} else if (typeof dateNow !== 'undefined') {
8688+
_emscripten_get_now.actual = dateNow;
8689+
} else if (ENVIRONMENT_IS_WEB && window['performance'] && window['performance']['now']) {
8690+
_emscripten_get_now.actual = function _emscripten_get_now_actual() { return window['performance']['now'](); };
8691+
} else {
8692+
_emscripten_get_now.actual = Date.now;
8693+
}
8694+
}
8695+
return _emscripten_get_now.actual();
8696+
},
8697+
86758698
//============================
86768699
// emscripten vector ops
86778700
//============================

src/library_browser.js

-18
Original file line numberDiff line numberDiff line change
@@ -871,24 +871,6 @@ mergeInto(LibraryManager.library, {
871871
{{{ makeSetValue('isFullscreen', '0', 'Browser.isFullScreen ? 1 : 0', 'i32') }}};
872872
},
873873

874-
emscripten_get_now: function() {
875-
if (!_emscripten_get_now.actual) {
876-
if (ENVIRONMENT_IS_NODE) {
877-
_emscripten_get_now.actual = function _emscripten_get_now_actual() {
878-
var t = process['hrtime']();
879-
return t[0] * 1e3 + t[1] / 1e6;
880-
}
881-
} else if (typeof dateNow !== 'undefined') {
882-
_emscripten_get_now.actual = dateNow;
883-
} else if (ENVIRONMENT_IS_WEB && window['performance'] && window['performance']['now']) {
884-
_emscripten_get_now.actual = function _emscripten_get_now_actual() { return window['performance']['now'](); };
885-
} else {
886-
_emscripten_get_now.actual = Date.now;
887-
}
888-
}
889-
return _emscripten_get_now.actual();
890-
},
891-
892874
emscripten_create_worker: function(url) {
893875
url = Pointer_stringify(url);
894876
var id = Browser.workers.length;

src/struct_info.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@
169169
{
170170
"file": "libc/time.h",
171171
"defines": [
172-
["li", "CLOCKS_PER_SEC"]
172+
["li", "CLOCKS_PER_SEC"],
173+
"CLOCK_REALTIME"
173174
],
174175
"structs": {
175176
"timezone": [

tools/shared.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ def find_temp_directory():
307307
# we re-check sanity when the settings are changed)
308308
# We also re-check sanity and clear the cache when the version changes
309309

310-
EMSCRIPTEN_VERSION = '1.7.6'
310+
EMSCRIPTEN_VERSION = '1.7.7'
311311

312312
def generate_sanity():
313313
return EMSCRIPTEN_VERSION + '|' + get_llvm_target() + '|' + LLVM_ROOT

0 commit comments

Comments
 (0)