- reltimestr(): Produce negative value by comparing the unsigned
proftime_T value to INT64_MAX.
https://github.com/neovim/neovim/issues/10452#issuecomment-511155132
1. The interfaces of nearly all platforms return uint64_t. INT64_MAX is
only half of that.
2. Low-level interfaces like this typically define that there is no
fixed starting point. The only guarantees are that it's (a)
monotonically increasing at a rate that (b) matches real time.
ref 06af88cd72fix#10452
Problem: Changing an autoload name into a script file name is inefficient.
Solution: Remember the last replaced #. (Ozaki Kiichi, closesvim/vim#4618)
28fc247f8d
Performance of high-resolution time (clock_gettime via uv_hrtime) is
expensive on some systems. For profiling VimL, syntax, etc., we don't
care about nanosecond-precision and monotonicity edge-cases, so avoid
uv_hrtime().
closes#10328
From the uv__hrtime() source:
0cdb4a5b4b/src/unix/linux-core.c (L442-L462)
/* Prefer CLOCK_MONOTONIC_COARSE if available but only when it has
* millisecond granularity or better. CLOCK_MONOTONIC_COARSE is
* serviced entirely from the vDSO, whereas CLOCK_MONOTONIC may
* decide to make a costly system call.
*/
This micro-benchmark (Debug build) shows negligible differences on my
system:
#include <sys/time.h>
...
proftime_T tm = profile_start();
int trials = 999999;
int64_t t = 0;
struct timeval tv;
for (int i = 0; i < trials; i++) {
t += gettimeofday(&tv,NULL);
}
tm = profile_end(tm);
ILOG("%d trials of gettimeofday: %s", trials, profile_msg(tm));
tm = profile_start();
for (int i = 0; i < trials; i++) {
t += os_hrtime();
}
tm = profile_end(tm);
ILOG("%d trials of os_hrtime: %s", trials, profile_msg(tm));
tm = profile_start();
for (int i = 0; i < trials; i++) {
t += os_utime();
}
tm = profile_end(tm);
ILOG("%d trials of os_utime: %s", trials, profile_msg(tm));
ILOG("%zu", t);
Problem: Cannot use a lambda for the skip argument to searchpair().
Solution: Evaluate a partial, funcref and lambda. (LemonBoy, closesvim/vim#1454,
closesvim/vim#2265)
48570488f1
Problem: setline() does not work on startup. (Manuel Ortega)
Solution: Do not check for ml_mfp to be set for the current buffer.
(Christian Brabandt)
9d954207e2
Problem: Cannot change a line in a buffer other than the current one.
Solution: Add setbufline(). (Yasuhiro Matsumoto, Ozaki Kiichi, closesvim/vim#1953)
b31cf2bb0b
- In appimage, the message catalog is not used because there is no
message catalog in LOCALE_INSTALL_DIR. Therefore, change to
exepath/../share/locale instead of LOCALE_INSTALL_DIR.
- The old vim style($runtime/lang) is no longer used. Thus all relevant
code is removed.
Problem: When skipping over code after an exception was thrown expression
evaluation is aborted after a function call. (Ingo Karkat)
Solution: Do not fail if not executing the expression. (closesvim/vim#4507)
6064073841
Problem: ":profdel func" does not work if func was called already.
(Dominique Pelle)
Solution: Reset uf_profiling and add a flag to indicate initialization was
done.
ad64809610
Problem: reg_executing() is reset by calling input().
Solution: Implement a more generic way to save and restore reg_executing.
(Ozaki Kiichi, closesvim/vim#4192)
9a2c091a74
Problem: A getchar() call while executing a register resets the
reg_executing() result.
Solution: Save and restore reg_executing. (closesvim/vim#406f0fab3046c
Problem: Cannot tell whether a register is being used for executing or
recording.
Solution: Add reg_executing() and reg_recording(). (Hirohito Higashi,
closesvim/vim#2745) Rename the global variables for consistency. Store
the register name in reg_executing.
0b6d911e5d