summaryrefslogtreecommitdiffstats
path: root/generic/tclCmdMZ.c
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2017-02-09 11:36:17 (GMT)
committersebres <sebres@users.sourceforge.net>2017-02-09 11:36:17 (GMT)
commitfb811680f60f0555a27685601c519ff931956593 (patch)
tree1fd7d26262a58c457148ba5448a9339c3d92771a /generic/tclCmdMZ.c
parent1ff982ffd6785745b647bbe0bb46aca7e13ace8e (diff)
downloadtcl-fb811680f60f0555a27685601c519ff931956593.zip
tcl-fb811680f60f0555a27685601c519ff931956593.tar.gz
tcl-fb811680f60f0555a27685601c519ff931956593.tar.bz2
[timerate] bug fix: missing scale conversion by Mac OSX on platform where high resolution clicks are not microseconds based;
[win] use high resolution timer for the wide clicks and microseconds directly, prevent several forwards/backwards conversions; [win, unix, mac-osx] normalize some functions for common usage in different time units (clicks, micro- and nanoseconds)
Diffstat (limited to 'generic/tclCmdMZ.c')
-rw-r--r--generic/tclCmdMZ.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index 319799c..b0212c3 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -4215,16 +4215,19 @@ usage:
}
/* get start and stop time */
-#ifndef TCL_WIDE_CLICKS
+#ifdef TCL_WIDE_CLICKS
+ start = middle = TclpGetWideClicks();
+ /* time to stop execution (in wide clicks) */
+ stop = start + (maxms * 1000 / TclpWideClickInMicrosec());
+#else
Tcl_GetTime(&now);
start = now.sec; start *= 1000000; start += now.usec;
-#else
- start = TclpGetWideClicks();
+ middle = start;
+ /* time to stop execution (in microsecs) */
+ stop = start + maxms * 1000;
#endif
/* start measurement */
- stop = start + maxms * 1000;
- middle = start;
while (1) {
/* eval single iteration */
count++;
@@ -4246,11 +4249,11 @@ usage:
if (--threshold > 0) continue;
/* check stop time reached, estimate new threshold */
- #ifndef TCL_WIDE_CLICKS
+ #ifdef TCL_WIDE_CLICKS
+ middle = TclpGetWideClicks();
+ #else
Tcl_GetTime(&now);
middle = now.sec; middle *= 1000000; middle += now.usec;
- #else
- middle = TclpGetWideClicks();
#endif
if (middle >= stop) {
break;
@@ -4274,6 +4277,11 @@ usage:
middle -= start; /* execution time in microsecs */
+ #ifdef TCL_WIDE_CLICKS
+ /* convert execution time in wide clicks to microsecs */
+ middle *= TclpWideClickInMicrosec();
+ #endif
+
/* if not calibrate */
if (!calibrate) {
/* minimize influence of measurement overhead */