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
*** ../vim-7.2.268/runtime/doc/starting.txt 2008-11-09 13:43:25.000000000 +0100
--- runtime/doc/starting.txt 2009-10-25 11:57:51.000000000 +0100
***************
*** 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
*** ../vim-7.2.268/src/globals.h 2009-07-29 12:09:49.000000000 +0200
--- src/globals.h 2009-10-10 15:14:31.000000000 +0200
***************
*** 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
*** ../vim-7.2.268/src/feature.h 2008-11-09 13:43:25.000000000 +0100
--- src/feature.h 2009-10-10 16:16:19.000000000 +0200
***************
*** 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.
*** ../vim-7.2.268/src/main.c 2009-05-26 22:58:43.000000000 +0200
--- src/main.c 2009-10-10 16:18:32.000000000 +0200
***************
*** 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 ----
*** ../vim-7.2.268/src/macros.h 2009-05-17 13:30:58.000000000 +0200
--- src/macros.h 2009-10-10 15:19:07.000000000 +0200
***************
*** 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
*** ../vim-7.2.268/src/version.c 2009-11-03 11:43:05.000000000 +0100
--- src/version.c 2009-11-03 12:06:31.000000000 +0100
***************
*** 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 ///