| To: vim-dev@vim.org |
| Subject: Patch 7.2.269 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.2.269 |
| Problem: Many people struggle to find out why Vim startup is slow. |
| Solution: Add the --startuptime command line flag. |
| Files: runtime/doc/starting.txt, src/globals.h, src/feature.h, |
| src/main.c, src/macros.h |
| |
| |
| |
| |
| |
| *** 144,149 **** |
| --- 144,156 ---- |
| -u NORC no yes |
| --noplugin yes no |
| |
| + --startuptime={fname} *--startuptime* |
| + During startup write timing messages to the file {fname}. |
| + This can be used to find out where time is spent while loading |
| + your .vimrc and plugins. |
| + When {fname} already exists new messages are appended. |
| + {only when compiled with this feature} |
| + |
| *--literal* |
| --literal Take file names literally, don't expand wildcards. Not needed |
| for Unix, because Vim always takes file names literally (the |
| |
| *** 471,476 **** |
| --- 487,493 ---- |
| window title and copy/paste using the X clipboard. This |
| avoids a long startup time when running Vim in a terminal |
| emulator and the connection to the X server is slow. |
| + See |--startuptime| to find out if affects you. |
| Only makes a difference on Unix or VMS, when compiled with the |
| |+X11| feature. Otherwise it's ignored. |
| To disable the connection only for specific terminals, see the |
| |
| |
| |
| *** 1567,1572 **** |
| --- 1567,1576 ---- |
| /* For undo we need to know the lowest time possible. */ |
| EXTERN time_t starttime; |
| |
| + #ifdef STARTUPTIME |
| + EXTERN FILE *time_fd INIT(= NULL); /* where to write startup timing */ |
| + #endif |
| + |
| /* |
| * Some compilers warn for not using a return value, but in some situations we |
| * can't do anything useful with the value. Assign to this variable to avoid |
| |
| |
| |
| *** 844,853 **** |
| /* #define DEBUG */ |
| |
| /* |
| ! * STARTUPTIME Time the startup process. Writes a "vimstartup" file |
| ! * with timestamps. |
| */ |
| ! /* #define STARTUPTIME "vimstartup" */ |
| |
| /* |
| * MEM_PROFILE Debugging of memory allocation and freeing. |
| --- 844,857 ---- |
| /* #define DEBUG */ |
| |
| /* |
| ! * STARTUPTIME Time the startup process. Writes a file with |
| ! * timestamps. |
| */ |
| ! #if defined(FEAT_NORMAL) \ |
| ! && ((defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)) \ |
| ! || defined(WIN3264)) |
| ! # define STARTUPTIME 1 |
| ! #endif |
| |
| /* |
| * MEM_PROFILE Debugging of memory allocation and freeing. |
| |
| |
| |
| *** 130,139 **** |
| #endif |
| |
| |
| - #ifdef STARTUPTIME |
| - static FILE *time_fd = NULL; |
| - #endif |
| - |
| /* |
| * Different types of error messages. |
| */ |
| --- 130,135 ---- |
| |
| *** 173,178 **** |
| --- 169,177 ---- |
| char_u *fname = NULL; /* file name from command line */ |
| mparm_T params; /* various parameters passed between |
| * main() and other functions. */ |
| + #ifdef STARTUPTIME |
| + int i; |
| + #endif |
| |
| /* |
| * Do any system-specific initialisations. These can NOT use IObuff or |
| |
| *** 203,210 **** |
| #endif |
| |
| #ifdef STARTUPTIME |
| ! time_fd = mch_fopen(STARTUPTIME, "a"); |
| ! TIME_MSG("--- VIM STARTING ---"); |
| #endif |
| starttime = time(NULL); |
| |
| --- 202,216 ---- |
| #endif |
| |
| #ifdef STARTUPTIME |
| ! for (i = 1; i < argc; ++i) |
| ! { |
| ! if (STRNICMP(argv[i], "--startuptime=", 14) == 0) |
| ! { |
| ! time_fd = mch_fopen(argv[i] + 14, "a"); |
| ! TIME_MSG("--- VIM STARTING ---"); |
| ! break; |
| ! } |
| ! } |
| #endif |
| starttime = time(NULL); |
| |
| |
| *** 1150,1155 **** |
| --- 1156,1173 ---- |
| cursor_on(); |
| |
| do_redraw = FALSE; |
| + |
| + #ifdef STARTUPTIME |
| + /* Now that we have drawn the first screen all the startup stuff |
| + * has been done, close any file for startup messages. */ |
| + if (time_fd != NULL) |
| + { |
| + TIME_MSG("first screen update"); |
| + TIME_MSG("--- VIM STARTED ---"); |
| + fclose(time_fd); |
| + time_fd = NULL; |
| + } |
| + #endif |
| } |
| #ifdef FEAT_GUI |
| if (need_mouse_correct) |
| |
| *** 1743,1748 **** |
| --- 1761,1770 ---- |
| /* already processed, skip */ |
| } |
| #endif |
| + else if (STRNICMP(argv[0] + argv_idx, "startuptime", 11) == 0) |
| + { |
| + /* already processed, skip */ |
| + } |
| else |
| { |
| if (argv[0][argv_idx]) |
| |
| *** 3211,3216 **** |
| --- 3233,3252 ---- |
| |
| static struct timeval prev_timeval; |
| |
| + # ifdef WIN3264 |
| + /* |
| + * Windows doesn't have gettimeofday(), although it does have struct timeval. |
| + */ |
| + static int |
| + gettimeofday(struct timeval *tv, char *dummy) |
| + { |
| + long t = clock(); |
| + tv->tv_sec = t / CLOCKS_PER_SEC; |
| + tv->tv_usec = (t - tv->tv_sec * CLOCKS_PER_SEC) * 1000000 / CLOCKS_PER_SEC; |
| + return 0; |
| + } |
| + # endif |
| + |
| /* |
| * Save the previous time before doing something that could nest. |
| * set "*tv_rel" to the time elapsed so far. |
| |
| *** 3299,3318 **** |
| } |
| } |
| |
| - # ifdef WIN3264 |
| - /* |
| - * Windows doesn't have gettimeofday(), although it does have struct timeval. |
| - */ |
| - int |
| - gettimeofday(struct timeval *tv, char *dummy) |
| - { |
| - long t = clock(); |
| - tv->tv_sec = t / CLOCKS_PER_SEC; |
| - tv->tv_usec = (t - tv->tv_sec * CLOCKS_PER_SEC) * 1000000 / CLOCKS_PER_SEC; |
| - return 0; |
| - } |
| - # endif |
| - |
| #endif |
| |
| #if defined(FEAT_CLIENTSERVER) || defined(PROTO) |
| --- 3335,3340 ---- |
| |
| |
| |
| *** 243,249 **** |
| #endif |
| |
| #ifdef STARTUPTIME |
| ! # define TIME_MSG(s) time_msg(s, NULL) |
| #else |
| # define TIME_MSG(s) |
| #endif |
| --- 243,249 ---- |
| #endif |
| |
| #ifdef STARTUPTIME |
| ! # define TIME_MSG(s) { if (time_fd != NULL) time_msg(s, NULL); } |
| #else |
| # define TIME_MSG(s) |
| #endif |
| |
| |
| |
| *** 678,679 **** |
| --- 678,681 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 269, |
| /**/ |
| |
| -- |
| BEDEVERE: Look! It's the old man from scene 24 - what's he Doing here? |
| ARTHUR: He is the keeper of the Bridge. He asks each traveler five |
| questions ... |
| GALAHAD: Three questions. |
| "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ download, build and distribute -- http://www.A-A-P.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |