Mercurial > hg > xemacs-beta
annotate lib-src/profile.c @ 5724:ede80ef92a74
Make soft links in src for module source files, if built in to the executable.
This ensures that those files are built with the same compiler flags as all
other source files.
See these xemacs-beta messages:
<CAHCOHQn+q=Xuwq+y68dvqi7afAP9f-TdB7=8YiZ8VYO816sjHg@mail.gmail.com>
<f5by5ejqiyk.fsf@calexico.inf.ed.ac.uk>
author | Jerry James <james@xemacs.org> |
---|---|
date | Sat, 02 Mar 2013 14:32:37 -0700 |
parents | b9167d522a9a |
children |
rev | line source |
---|---|
428 | 1 /* profile.c --- generate periodic events for profiling of Emacs Lisp code. |
2 Copyright (C) 1992, 1994 Free Software Foundation, Inc. | |
2367 | 3 Copyright (C) 2004 Ben Wing. |
428 | 4 |
5 Author: Boaz Ben-Zvi <boaz@lcs.mit.edu> | |
6 | |
5406
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
7 This file is part of XEmacs. |
428 | 8 |
5406
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
9 XEmacs is free software: you can redistribute it and/or modify it |
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
10 under the terms of the GNU General Public License as published by the |
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
11 Free Software Foundation, either version 3 of the License, or (at your |
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
12 option) any later version. |
428 | 13 |
5406
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
14 XEmacs is distributed in the hope that it will be useful, but WITHOUT |
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
17 for more details. |
428 | 18 |
5406
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
19 You should have received a copy of the GNU General Public License |
061f4f90f874
Convert lib-src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
2367
diff
changeset
|
20 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
428 | 21 |
22 /* Synched up with: FSF 19.28. */ | |
23 /* #### Not sure if this is needed for XEmacs. */ | |
24 | |
25 /** | |
26 ** To be run as an emacs process. Input string that starts with: | |
27 ** 'z' -- resets the watch (to zero). | |
28 ** 'p' -- return time (on stdout) as string with format <sec>.<micro-sec> | |
29 ** 'q' -- exit. | |
30 ** | |
31 ** abstraction : a stopwatch | |
32 ** operations: reset_watch, get_time | |
33 */ | |
438 | 34 #include <config.h> |
428 | 35 #include <stdio.h> |
36 #include <stdlib.h> | |
37 #include "../src/systime.h" | |
38 | |
39 static struct timeval TV1, TV2; | |
40 static int watch_not_started = 1; /* flag */ | |
41 static char time_string[30]; | |
42 | |
442 | 43 #ifdef WIN32_NATIVE |
428 | 44 #include <sys/timeb.h> |
45 /* Emulate gettimeofday (Ulrich Leodolter, 1/11/95). */ | |
46 void | |
47 gettimeofday (struct timeval *tv, struct timezone *tz) | |
48 { | |
49 struct _timeb tb; | |
50 _ftime (&tb); | |
51 | |
52 tv->tv_sec = tb.time; | |
53 tv->tv_usec = tb.millitm * 1000L; | |
54 if (tz) | |
55 { | |
56 tz->tz_minuteswest = tb.timezone; /* minutes west of Greenwich */ | |
57 tz->tz_dsttime = tb.dstflag; /* type of dst correction */ | |
58 } | |
59 } | |
60 #endif | |
61 | |
62 /* Reset the stopwatch to zero. */ | |
63 | |
64 static void | |
65 reset_watch (void) | |
66 { | |
67 EMACS_GET_TIME (TV1); | |
68 watch_not_started = 0; | |
69 } | |
70 | |
71 /* This call returns the time since the last reset_watch call. The time | |
72 is returned as a string with the format <seconds>.<micro-seconds> | |
73 If reset_watch was not called yet, exit. */ | |
74 | |
75 static char * | |
76 get_time (void) | |
77 { | |
78 if (watch_not_started) | |
79 exit (1); /* call reset_watch first ! */ | |
80 EMACS_GET_TIME (TV2); | |
81 if (TV1.tv_usec > TV2.tv_usec) | |
82 { | |
83 TV2.tv_usec += 1000000; | |
84 TV2.tv_sec--; | |
85 } | |
86 sprintf (time_string, "%lu.%06lu", | |
87 (unsigned long) TV2.tv_sec - TV1.tv_sec, | |
88 (unsigned long) TV2.tv_usec - TV1.tv_usec); | |
89 return time_string; | |
90 } | |
91 | |
92 int | |
2367 | 93 main (int argc, char **argv) |
428 | 94 { |
95 int c; | |
96 while ((c = getchar ()) != EOF) | |
97 { | |
98 switch (c) | |
99 { | |
100 case 'z': | |
101 reset_watch (); | |
102 break; | |
103 case 'p': | |
104 puts (get_time ()); | |
105 break; | |
106 case 'q': | |
107 exit (0); | |
108 } | |
109 /* Anything remaining on the line is ignored. */ | |
110 while (c != '\n' && c != EOF) | |
111 c = getchar (); | |
112 } | |
113 return 1; | |
114 } |