|
1 # -*- Mode: Makefile -*- |
|
2 # |
|
3 # This Source Code Form is subject to the terms of the Mozilla Public |
|
4 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
6 |
|
7 # This makefile will run Mozilla (or the program you specify), observe |
|
8 # the program's memory status using the /proc filesystem, and generate |
|
9 # a ``gross dynamic footprint'' graph using gnuplot. |
|
10 # |
|
11 # Usage: |
|
12 # |
|
13 # make MOZILLA_DIR=<mozilla-dir> PROGRAM=<program> URL=<url> |
|
14 # |
|
15 # e.g., |
|
16 # |
|
17 # make -flinux-gdf.mk \ |
|
18 # MOZILLA_DIR=/export2/waterson/seamonkey-opt/mozilla/dist/bin \ |
|
19 # PROGRAM=gtkEmbed \ |
|
20 # BUSTER_URL="http://localhost/cgi-bin/buster.cgi?refresh=10" |
|
21 # |
|
22 # To use this program, you'll need to: |
|
23 # |
|
24 # 1. Install gnuplot, e.g., using your RedHat distro. |
|
25 # 2. Install the "buster.cgi" script onto a webserver somewhere |
|
26 # 3. Have a mozilla build. |
|
27 # |
|
28 # You can tweak ``linux.gnuplot.in'' to change the graph's output. |
|
29 |
|
30 # This script computes a line using linear regression; its output is |
|
31 # of the form: |
|
32 # |
|
33 # <b1> * x + <b0> |
|
34 # |
|
35 # Where <b1> is the slope and <b0> is the y-intercept. |
|
36 LINEAR_REGRESSION=awk -f linear-regression.awk Skip=5 |
|
37 |
|
38 INTERVAL=10 |
|
39 WATCH=./watch.sh |
|
40 |
|
41 MOZILLA_DIR=../../dist/bin |
|
42 PROGRAM=gtkEmbed |
|
43 BUSTER_URL=http://localhost/cgi-bin/buster.cgi?refresh=$(INTERVAL) |
|
44 OUTFILE=linux.dat |
|
45 |
|
46 #---------------------------------------------------------------------- |
|
47 # Top-level target |
|
48 # |
|
49 all: gdf.png |
|
50 |
|
51 #---------------------------------------------------------------------- |
|
52 # gtkEmbed |
|
53 # |
|
54 |
|
55 .INTERMEDIATE: linux.gnuplot vms.dat vmd.dat vmx.dat rss.dat |
|
56 |
|
57 # Create a PNG image using the generated ``linux.gnuplot'' script |
|
58 gdf.png: vms.dat vmd.dat vmx.dat rss.dat linux.gnuplot |
|
59 gnuplot linux.gnuplot |
|
60 |
|
61 # Generate a ``gnuplot'' script from ``linux.gnuplot.in'', making |
|
62 # appropriate substitutions as necessary. |
|
63 linux.gnuplot: linux.gnuplot.in vms.dat |
|
64 sed -e "s/@PROGRAM@/$(PROGRAM)/" \ |
|
65 -e "s/@VMS-LINE@/`$(LINEAR_REGRESSION) vms.dat`/" \ |
|
66 -e "s/@GROWTH-RATE@/`$(LINEAR_REGRESSION) vms.dat | awk '{ printf \"%0.1lf\\n\", $$1; }'`/" \ |
|
67 -e "s/@BASE-SIZE@/`$(LINEAR_REGRESSION) vms.dat | awk '{ print $$5 + 2000; }'`/" \ |
|
68 linux.gnuplot.in > linux.gnuplot |
|
69 |
|
70 # Break the raw data file into temporary files that can be processed |
|
71 # by gnuplot directly. |
|
72 vms.dat: $(OUTFILE) |
|
73 awk -f create_dat.awk TYPE=vms $? > $@ |
|
74 |
|
75 vmd.dat: $(OUTFILE) |
|
76 awk -f create_dat.awk TYPE=vmd $? > $@ |
|
77 |
|
78 vmx.dat: $(OUTFILE) |
|
79 awk -f create_dat.awk TYPE=vmx $? > $@ |
|
80 |
|
81 rss.dat: $(OUTFILE) |
|
82 awk -f create_dat.awk TYPE=rss $? > $@ |
|
83 |
|
84 # Run $(PROGRAM) to produce $(OUTFILE) |
|
85 $(OUTFILE): |
|
86 LD_LIBRARY_PATH=$(MOZILLA_DIR) \ |
|
87 MOZILLA_FIVE_HOME=$(MOZILLA_DIR) \ |
|
88 $(WATCH) -i $(INTERVAL) -o $@ $(MOZILLA_DIR)/$(PROGRAM) "$(BUSTER_URL)" |
|
89 |
|
90 # Clean up the mess. |
|
91 clean: |
|
92 rm -f $(OUTFILE) gdf.png *~ |
|
93 |