|
1 To: [email protected] |
|
2 Subject: Patch 7.2.269 |
|
3 Fcc: outbox |
|
4 From: Bram Moolenaar <[email protected]> |
|
5 Mime-Version: 1.0 |
|
6 Content-Type: text/plain; charset=UTF-8 |
|
7 Content-Transfer-Encoding: 8bit |
|
8 ------------ |
|
9 |
|
10 Patch 7.2.269 |
|
11 Problem: Many people struggle to find out why Vim startup is slow. |
|
12 Solution: Add the --startuptime command line flag. |
|
13 Files: runtime/doc/starting.txt, src/globals.h, src/feature.h, |
|
14 src/main.c, src/macros.h |
|
15 |
|
16 |
|
17 *** ../vim-7.2.268/runtime/doc/starting.txt 2008-11-09 13:43:25.000000000 +0100 |
|
18 --- runtime/doc/starting.txt 2009-10-25 11:57:51.000000000 +0100 |
|
19 *************** |
|
20 *** 144,149 **** |
|
21 --- 144,156 ---- |
|
22 -u NORC no yes |
|
23 --noplugin yes no |
|
24 |
|
25 + --startuptime={fname} *--startuptime* |
|
26 + During startup write timing messages to the file {fname}. |
|
27 + This can be used to find out where time is spent while loading |
|
28 + your .vimrc and plugins. |
|
29 + When {fname} already exists new messages are appended. |
|
30 + {only when compiled with this feature} |
|
31 + |
|
32 *--literal* |
|
33 --literal Take file names literally, don't expand wildcards. Not needed |
|
34 for Unix, because Vim always takes file names literally (the |
|
35 *************** |
|
36 *** 471,476 **** |
|
37 --- 487,493 ---- |
|
38 window title and copy/paste using the X clipboard. This |
|
39 avoids a long startup time when running Vim in a terminal |
|
40 emulator and the connection to the X server is slow. |
|
41 + See |--startuptime| to find out if affects you. |
|
42 Only makes a difference on Unix or VMS, when compiled with the |
|
43 |+X11| feature. Otherwise it's ignored. |
|
44 To disable the connection only for specific terminals, see the |
|
45 *** ../vim-7.2.268/src/globals.h 2009-07-29 12:09:49.000000000 +0200 |
|
46 --- src/globals.h 2009-10-10 15:14:31.000000000 +0200 |
|
47 *************** |
|
48 *** 1567,1572 **** |
|
49 --- 1567,1576 ---- |
|
50 /* For undo we need to know the lowest time possible. */ |
|
51 EXTERN time_t starttime; |
|
52 |
|
53 + #ifdef STARTUPTIME |
|
54 + EXTERN FILE *time_fd INIT(= NULL); /* where to write startup timing */ |
|
55 + #endif |
|
56 + |
|
57 /* |
|
58 * Some compilers warn for not using a return value, but in some situations we |
|
59 * can't do anything useful with the value. Assign to this variable to avoid |
|
60 *** ../vim-7.2.268/src/feature.h 2008-11-09 13:43:25.000000000 +0100 |
|
61 --- src/feature.h 2009-10-10 16:16:19.000000000 +0200 |
|
62 *************** |
|
63 *** 844,853 **** |
|
64 /* #define DEBUG */ |
|
65 |
|
66 /* |
|
67 ! * STARTUPTIME Time the startup process. Writes a "vimstartup" file |
|
68 ! * with timestamps. |
|
69 */ |
|
70 ! /* #define STARTUPTIME "vimstartup" */ |
|
71 |
|
72 /* |
|
73 * MEM_PROFILE Debugging of memory allocation and freeing. |
|
74 --- 844,857 ---- |
|
75 /* #define DEBUG */ |
|
76 |
|
77 /* |
|
78 ! * STARTUPTIME Time the startup process. Writes a file with |
|
79 ! * timestamps. |
|
80 */ |
|
81 ! #if defined(FEAT_NORMAL) \ |
|
82 ! && ((defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)) \ |
|
83 ! || defined(WIN3264)) |
|
84 ! # define STARTUPTIME 1 |
|
85 ! #endif |
|
86 |
|
87 /* |
|
88 * MEM_PROFILE Debugging of memory allocation and freeing. |
|
89 *** ../vim-7.2.268/src/main.c 2009-05-26 22:58:43.000000000 +0200 |
|
90 --- src/main.c 2009-10-10 16:18:32.000000000 +0200 |
|
91 *************** |
|
92 *** 130,139 **** |
|
93 #endif |
|
94 |
|
95 |
|
96 - #ifdef STARTUPTIME |
|
97 - static FILE *time_fd = NULL; |
|
98 - #endif |
|
99 - |
|
100 /* |
|
101 * Different types of error messages. |
|
102 */ |
|
103 --- 130,135 ---- |
|
104 *************** |
|
105 *** 173,178 **** |
|
106 --- 169,177 ---- |
|
107 char_u *fname = NULL; /* file name from command line */ |
|
108 mparm_T params; /* various parameters passed between |
|
109 * main() and other functions. */ |
|
110 + #ifdef STARTUPTIME |
|
111 + int i; |
|
112 + #endif |
|
113 |
|
114 /* |
|
115 * Do any system-specific initialisations. These can NOT use IObuff or |
|
116 *************** |
|
117 *** 203,210 **** |
|
118 #endif |
|
119 |
|
120 #ifdef STARTUPTIME |
|
121 ! time_fd = mch_fopen(STARTUPTIME, "a"); |
|
122 ! TIME_MSG("--- VIM STARTING ---"); |
|
123 #endif |
|
124 starttime = time(NULL); |
|
125 |
|
126 --- 202,216 ---- |
|
127 #endif |
|
128 |
|
129 #ifdef STARTUPTIME |
|
130 ! for (i = 1; i < argc; ++i) |
|
131 ! { |
|
132 ! if (STRNICMP(argv[i], "--startuptime=", 14) == 0) |
|
133 ! { |
|
134 ! time_fd = mch_fopen(argv[i] + 14, "a"); |
|
135 ! TIME_MSG("--- VIM STARTING ---"); |
|
136 ! break; |
|
137 ! } |
|
138 ! } |
|
139 #endif |
|
140 starttime = time(NULL); |
|
141 |
|
142 *************** |
|
143 *** 1150,1155 **** |
|
144 --- 1156,1173 ---- |
|
145 cursor_on(); |
|
146 |
|
147 do_redraw = FALSE; |
|
148 + |
|
149 + #ifdef STARTUPTIME |
|
150 + /* Now that we have drawn the first screen all the startup stuff |
|
151 + * has been done, close any file for startup messages. */ |
|
152 + if (time_fd != NULL) |
|
153 + { |
|
154 + TIME_MSG("first screen update"); |
|
155 + TIME_MSG("--- VIM STARTED ---"); |
|
156 + fclose(time_fd); |
|
157 + time_fd = NULL; |
|
158 + } |
|
159 + #endif |
|
160 } |
|
161 #ifdef FEAT_GUI |
|
162 if (need_mouse_correct) |
|
163 *************** |
|
164 *** 1743,1748 **** |
|
165 --- 1761,1770 ---- |
|
166 /* already processed, skip */ |
|
167 } |
|
168 #endif |
|
169 + else if (STRNICMP(argv[0] + argv_idx, "startuptime", 11) == 0) |
|
170 + { |
|
171 + /* already processed, skip */ |
|
172 + } |
|
173 else |
|
174 { |
|
175 if (argv[0][argv_idx]) |
|
176 *************** |
|
177 *** 3211,3216 **** |
|
178 --- 3233,3252 ---- |
|
179 |
|
180 static struct timeval prev_timeval; |
|
181 |
|
182 + # ifdef WIN3264 |
|
183 + /* |
|
184 + * Windows doesn't have gettimeofday(), although it does have struct timeval. |
|
185 + */ |
|
186 + static int |
|
187 + gettimeofday(struct timeval *tv, char *dummy) |
|
188 + { |
|
189 + long t = clock(); |
|
190 + tv->tv_sec = t / CLOCKS_PER_SEC; |
|
191 + tv->tv_usec = (t - tv->tv_sec * CLOCKS_PER_SEC) * 1000000 / CLOCKS_PER_SEC; |
|
192 + return 0; |
|
193 + } |
|
194 + # endif |
|
195 + |
|
196 /* |
|
197 * Save the previous time before doing something that could nest. |
|
198 * set "*tv_rel" to the time elapsed so far. |
|
199 *************** |
|
200 *** 3299,3318 **** |
|
201 } |
|
202 } |
|
203 |
|
204 - # ifdef WIN3264 |
|
205 - /* |
|
206 - * Windows doesn't have gettimeofday(), although it does have struct timeval. |
|
207 - */ |
|
208 - int |
|
209 - gettimeofday(struct timeval *tv, char *dummy) |
|
210 - { |
|
211 - long t = clock(); |
|
212 - tv->tv_sec = t / CLOCKS_PER_SEC; |
|
213 - tv->tv_usec = (t - tv->tv_sec * CLOCKS_PER_SEC) * 1000000 / CLOCKS_PER_SEC; |
|
214 - return 0; |
|
215 - } |
|
216 - # endif |
|
217 - |
|
218 #endif |
|
219 |
|
220 #if defined(FEAT_CLIENTSERVER) || defined(PROTO) |
|
221 --- 3335,3340 ---- |
|
222 *** ../vim-7.2.268/src/macros.h 2009-05-17 13:30:58.000000000 +0200 |
|
223 --- src/macros.h 2009-10-10 15:19:07.000000000 +0200 |
|
224 *************** |
|
225 *** 243,249 **** |
|
226 #endif |
|
227 |
|
228 #ifdef STARTUPTIME |
|
229 ! # define TIME_MSG(s) time_msg(s, NULL) |
|
230 #else |
|
231 # define TIME_MSG(s) |
|
232 #endif |
|
233 --- 243,249 ---- |
|
234 #endif |
|
235 |
|
236 #ifdef STARTUPTIME |
|
237 ! # define TIME_MSG(s) { if (time_fd != NULL) time_msg(s, NULL); } |
|
238 #else |
|
239 # define TIME_MSG(s) |
|
240 #endif |
|
241 *** ../vim-7.2.268/src/version.c 2009-11-03 11:43:05.000000000 +0100 |
|
242 --- src/version.c 2009-11-03 12:06:31.000000000 +0100 |
|
243 *************** |
|
244 *** 678,679 **** |
|
245 --- 678,681 ---- |
|
246 { /* Add new patch number below this line */ |
|
247 + /**/ |
|
248 + 269, |
|
249 /**/ |
|
250 |
|
251 -- |
|
252 BEDEVERE: Look! It's the old man from scene 24 - what's he Doing here? |
|
253 ARTHUR: He is the keeper of the Bridge. He asks each traveler five |
|
254 questions ... |
|
255 GALAHAD: Three questions. |
|
256 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD |
|
257 |
|
258 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\ |
|
259 /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
|
260 \\\ download, build and distribute -- http://www.A-A-P.org /// |
|
261 \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |