Skip to content

Commit

Permalink
patch 7.4.1285
Browse files Browse the repository at this point in the history
Problem:    Cannot measure elapsed time.
Solution:   Add reltimefloat().
  • Loading branch information
brammool committed Feb 7, 2016
1 parent dc94a26 commit 79c2c88
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/eval.c
Expand Up @@ -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);
Expand Down Expand Up @@ -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},
Expand Down Expand Up @@ -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
*/
Expand Down
18 changes: 18 additions & 0 deletions src/ex_cmds2.c
Expand Up @@ -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".
*/
Expand Down
1 change: 1 addition & 0 deletions src/proto/ex_cmds2.pro
Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions src/testdir/test_alot.vim
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -747,6 +747,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1285,
/**/
1284,
/**/
Expand Down

2 comments on commit 79c2c88

@bounceme
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wouldn't eval(reltimestr(time)) be equivalent to reltimefloat(time) ? seems compatible for supporting older vims, which is nice

@chrisbra
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you could possibly also use something like reltimestr(time)+0.0 however I am not sure how either of this works on non-float builds.

Please sign in to comment.