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 -- b...@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    ///

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui