]> granicus.if.org Git - vim/commitdiff
patch 7.4.1285 v7.4.1285
authorBram Moolenaar <Bram@vim.org>
Sun, 7 Feb 2016 20:19:28 +0000 (21:19 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 7 Feb 2016 20:19:28 +0000 (21:19 +0100)
Problem:    Cannot measure elapsed time.
Solution:   Add reltimefloat().

src/eval.c
src/ex_cmds2.c
src/proto/ex_cmds2.pro
src/testdir/test_alot.vim
src/version.c

index c2d18aa8694240cc1adadf918ff5ea0f4b546466..787f0f03431e1f606dbbb88363bbc961d438942f 100644 (file)
@@ -690,6 +690,9 @@ static void f_pyeval(typval_T *argvars, typval_T *rettv);
 static void f_range(typval_T *argvars, typval_T *rettv);
 static void f_readfile(typval_T *argvars, typval_T *rettv);
 static void f_reltime(typval_T *argvars, typval_T *rettv);
+#ifdef FEAT_FLOAT
+static void f_reltimefloat(typval_T *argvars, typval_T *rettv);
+#endif
 static void f_reltimestr(typval_T *argvars, typval_T *rettv);
 static void f_remote_expr(typval_T *argvars, typval_T *rettv);
 static void f_remote_foreground(typval_T *argvars, typval_T *rettv);
@@ -8270,6 +8273,7 @@ static struct fst
     {"range",          1, 3, f_range},
     {"readfile",       1, 3, f_readfile},
     {"reltime",                0, 2, f_reltime},
+    {"reltimefloat",   1, 1, f_reltimefloat},
     {"reltimestr",     1, 1, f_reltimestr},
     {"remote_expr",    2, 3, f_remote_expr},
     {"remote_foreground", 1, 1, f_remote_foreground},
@@ -16010,6 +16014,26 @@ f_reltime(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
 #endif
 }
 
+#ifdef FEAT_FLOAT
+/*
+ * "reltimefloat()" function
+ */
+    static void
+f_reltimefloat(typval_T *argvars UNUSED, typval_T *rettv)
+{
+# ifdef FEAT_RELTIME
+    proftime_T tm;
+# endif
+
+    rettv->v_type = VAR_FLOAT;
+    rettv->vval.v_float = 0;
+# ifdef FEAT_RELTIME
+    if (list2proftime(&argvars[0], &tm) == OK)
+       rettv->vval.v_float = profile_float(&tm);
+# endif
+}
+#endif
+
 /*
  * "reltimestr()" function
  */
index 98b8c8fbb53d99f76aacb0ae65cac178bdce4564..49e4d3df44f2ae0febfe91d535f8f280071b3037 100644 (file)
@@ -1010,6 +1010,24 @@ profile_msg(proftime_T *tm)
     return buf;
 }
 
+# if defined(FEAT_FLOAT) || defined(PROTO)
+/*
+ * Return a float that represents the time in "tm".
+ */
+    float_T
+profile_float(proftime_T *tm)
+{
+#  ifdef WIN3264
+    LARGE_INTEGER   fr;
+
+    QueryPerformanceFrequency(&fr);
+    return (float_T)tm->QuadPart / (float_T)fr.QuadPart;
+#  else
+    return (float_T)tm->tv_sec + (float_T)tm->tv_usec / 1000000.0;
+#  endif
+}
+# endif
+
 /*
  * Put the time "msec" past now in "tm".
  */
index 54ccf12c30c788ac90e370348101ca26661cfb64..a73e10f646c69e86a13bdb1d8f7f2a2f83312616 100644 (file)
@@ -14,6 +14,7 @@ void profile_start(proftime_T *tm);
 void profile_end(proftime_T *tm);
 void profile_sub(proftime_T *tm, proftime_T *tm2);
 char *profile_msg(proftime_T *tm);
+float_T profile_float(proftime_T *tm);
 void profile_setlimit(long msec, proftime_T *tm);
 int profile_passed_limit(proftime_T *tm);
 void profile_zero(proftime_T *tm);
index 97454335deb99b4b2126721c9d82ee77d62376d1..e2956492f347aafa2094de371b8c7c1da0c5a08b 100644 (file)
@@ -9,6 +9,7 @@ source test_glob2regpat.vim
 source test_json.vim
 source test_lispwords.vim
 source test_menu.vim
+source test_reltime.vim
 source test_searchpos.vim
 source test_set.vim
 source test_sort.vim
index c2d75bbe82fae6f693a30e311f6c603868378e0b..ea0c77055897d507c08fc493e31d34acb4b7a6a4 100644 (file)
@@ -747,6 +747,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1285,
 /**/
     1284,
 /**/