1	================     =================
2	README.profiling     part of Lin-city.
3	================     =================
4
5I have only profiled this program when running with SVGALib.
6(If you what to profile under X, you're on your own.)
7
8If you are using svgalib 1.2.9 or greater (as you should), then you will
9need to edit .../svgalibxxx/src/vga.c and stop svgalib catching the profile
10signal. The code should now look like this:-
11
12/* We invoke the old interrupt handler after setting text mode */
13/* We catch all signals that cause an exit by default (aka almost all) */
14static char sig2catch[] =
15{SIGHUP, SIGINT, SIGQUIT, SIGILL,
16 SIGTRAP, SIGIOT, SIGBUS, SIGFPE,
17 SIGSEGV, SIGPIPE, SIGALRM, SIGTERM,
18 SIGXCPU, SIGXFSZ, SIGVTALRM,
19 /* SIGPROF, */ SIGPWR};
20static struct sigaction old_signal_handler[sizeof(sig2catch)];
21
22	NOTE the comments around SIGPROF.
23
24Now recompile svgalib with make install but READ THE SVGALIB DOCS YOURSELF
25just in case.
26
27To enable profiling, uncomment the PROFx vars in the makefile.
28
29To disable profiling, comment the PROFx vars in the makefile.
30
31Then just run the program as usual.
32
33When you exit, put the profiling info in a file:
34
35	gprof /usr/local/bin/lincity > proffile.txt
36
37(The raw profiling info is stored in gmon.out, a binary.)
38
39Note:
40	I have pushed the gl_setpixel() etc. routines through another
41	function when profiling is enabled. It will slow things down
42	a bit (<1%), but if you want to see how many times these routines
43	are called, you'll have to put up with it. Not all the gl_routines
44	are redirected in this way, only the ones called during the main
45	body of the code. These routines are identified by the FP in front
46	of the 'old' function name, ie the above becomes FPgl_setpixel().
47	(Perhaps not the best choice of prefix for obvious reasons, but
48	it stands for Floyd's Profiling.) You can disable this part alone
49	by commenting out the 'PROFD = -DCS_PROFILE' line.
50
51
52
53