Bug 1080291 (part 4) - Remove Gross Dynamic Footprint Reports code. r=dbaron.
authorNicholas Nethercote <nnethercote@mozilla.com>
Sun, 12 Oct 2014 17:29:27 -0700
changeset 234583 332966bc7aa2b5da5442935968a22cfa17209f37
parent 234582 19a3b5083aaa874c76dfd575cdd4fd8dbe2a580b
child 234584 43f4a2c51d8aafb71fef6f90dc40532319219e17
push id611
push userraliiev@mozilla.com
push dateMon, 05 Jan 2015 23:23:16 +0000
treeherdermozilla-release@345cd3b9c445 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdbaron
bugs1080291
milestone35.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1080291 (part 4) - Remove Gross Dynamic Footprint Reports code. r=dbaron.
tools/footprint/README.reports
tools/footprint/buster.cgi
tools/footprint/create_dat.awk
tools/footprint/linear-regression.awk
tools/footprint/linux-gdf.mk
tools/footprint/linux.gnuplot.in
tools/footprint/lists/100.list
tools/footprint/lists/500.list
tools/footprint/lists/static41.list
tools/footprint/top100.txt
tools/footprint/win32-gdf.mk
tools/footprint/win32.gnuplot.in
tools/footprint/wm.cpp
deleted file mode 100644
--- a/tools/footprint/README.reports
+++ /dev/null
@@ -1,113 +0,0 @@
-                 Gross Dynamic Footprint Reports
-             Chris Waterson <waterson@netscape.com>
-                      November 16, 2000
-
-This is a short primer on how to run the ``gross dynamic footprint''
-reports.
-
-Win32
------
-
-I've tried this on Win2K. Should work on NT, probably not 98.
-
-1. Configure your machine with a ``standard'' mozilla build
-environment, as described at:
-
-  http://www.mozilla.org/build/win32.html
-
-Specifically, you'll need the Cygnus tools (GNU make, awk, sed), which
-can be downloaded from:
-
-  http://sourceware.cygnus.com/cygwin/download.html
-
-2. Install the Win32 version of GNUplot, avaialable from:
-
-  ftp://ftp.dartmouth.edu/pub/gnuplot/gnuplot3.7cyg.zip
-
-3. Configure a web server with the ``buster.cgi'' CGI script contained
-in this directory.
-
-4. Pull and build a ``release'' build. Besides the normal Win32 flags
-described on the Win32 build instructions, be sure that you've set the
-following:
-
-  set BUILD_OPT=1
-  set MOZ_DEBUG=
-
-That is, MOZ_DEBUG should be unset.
-
-5. To collect data and build the dynamic footprint graph, type the
-following command from the mozilla/tools/footprint directory:
-
-  make --unix -fwin32-gdf.mk \
-    BUSTER_URL="http://myserver/cgi-bin/buster.cgi?refresh=10"
-
-(Replace ``myserver'' with the name of the webserver where you
-installed ``buster.cgi'' in step 3, above.)
-
-This should:
-
-  - Build ``wm.exe'', which will spy on memory usage.
-  - Run the winEmbed program over the top 100 URLs (from top100.txt)
-    to generate a file called ``winEmbed.dat''
-  - Run mozilla over the top 100 URLs to generate a file called
-    ``mozilla.dat''
-  - Use gnuplot to create a PNG image file called win32-gdf.png
-
-Linux
------
-
-1. Configure your machine with a ``standard'' mozilla build
-environment, as described at:
-
-  http://www.mozilla.org/build/unix.html
-
-2. Install GNUplot, which is available as an RPM on RedHat-6.2 CDs
-(probably others, as well).
-
-3. Configure a web server with the ``buster.cgi'' CGI script contained
-in this directory.
-
-4. Pull and build a ``release build''. Here are the settings you
-should use in your .mozconfig file:
-
-   ac_add_options --enable-optimize
-   ac_add_options --disable-debug
-   ac_add_options --enable-strip-libs
-
-5. To collect data and build the dynamic footprint graph, type the
-following command from the mozilla/tools/footprint directory:
-
-  make -flinux-gdf.mk \
-    BUSTER_URL="http://myserver/cgi-bin/buster.cgi?refresh=10"
-
-(Replace ``myserver'' with the name of the webserver where you
-installed ``buster.cgi'' in step 3, above.)
-
-Details, details, details
--------------------------
-
-1. When running these tests, you'll probably want to use predictable
-cache settings. You can modify $(DIST)/bin/defaults/pref/all.js to
-tweak settings that will be used by [win|gtk]Embed (these programs
-ignore profile-specific settings AFAIK). For example, I've used these
-to try to cull out cache usage altogether:
-
-  pref("browser.cache.disk_cache_size",       0);
-  pref("browser.cache.enable",                false);
-  pref("browser.cache.disk.enable",           false);
-  pref("browser.cache.memory_cache_size",     0);
-  pref("browser.cache.disk_cache_ssl",        false);
-
-I think the image cache has a pref that you can use to shut it off as
-well. Haven't found it yet.
-
-2. If you collect data using Mozilla (as Win32 will do, by default), I
-recommend using a clean profile for consistency's sake. Otherwise,
-results will vary based on random stuff like how big your bookmarks
-are, how big your global history is, whether or not you've started
-mail, etc.
-
-3. I removed the ``plugin downloader plugin'' libnullplugin.so, as
-well as all other plugins, from $(DIST)/bin/plugins so that no plugins
-would be loaded.
deleted file mode 100755
--- a/tools/footprint/buster.cgi
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/perl
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# This is a modified version of Chris Hofmann's <chofmann@netscape.com>
-# infamous "browser buster" test harness. It's a bit simpler (CGI
-# instead of using cookies; IFRAME instead of FRAMESET), and has some
-# extra parameters that make it a bit easier to test with, but it's
-# pretty faithful otherwise.
-#
-# It accepts a couple of parameters, including
-#
-#   file=<filename> Set this to the name of the file containing
-#     the URLs that you want the buster to cycle through. This
-#     might be a security hole, so don't run this script on a
-#     server with s3kret stuff on it, mmkay?
-#
-#   page=<number> This is used to maintain state, and is the line
-#     number in the file that the buster will pull up in the
-#     IFRAME. Set if by hand if you need to for some reason.
-#
-#   last=<number> The buster will run until it's exhausted all
-#     the URLs in the file, or until it reaches this line in the
-#     file; e.g., setting it to "5" will load five URLs.
-#
-#   refresh=<number> The timeout (in seconds) to wait before doing
-#     a page refresh, and thus loading the next URL. Defaults to
-#     thirty.
-
-use CGI;
-
-# Find the page'th URL in the file with the specified name
-sub FindURL($$)
-{
-    my ($file, $page) = @_;
-
-    open URLS, $file
-        || die("can't open $::File");
-
-    LINE: while (<URLS>) {
-        next LINE if /^#/;
-        last LINE unless --$page;
-    }
-
-    close URLS;
-
-    chomp;
-    return $_;
-}
-
-# Scrape parameters
-$::Query = new CGI;
-
-$::File = $::Query->param("file");
-$::File = "top100.txt" unless $::File;
-
-$::Page = $::Query->param("page");
-$::Page = 0 unless $::Page;
-$::URL = FindURL($::File, ++$::Page);
-
-$::Last = $::Query->param("last");
-$::Last = -1 unless $::Last;
-
-$::Refresh = $::Query->param("refresh");
-$::Refresh = 30 unless $::Refresh;
-
-# Header
-print qq{Content-type: text/html
-
-<html>
-<head>
-};
-
-# Meat
-if ($::URL && ($::Page <= $::Last || $::Last == -1)) {
-    # Make a web page that'll load $::URL in an IFRAME, with
-    # a meta-refresh that'll reload us again in short order.
-    print qq{<meta http-equiv="Pragma" content="no-cache">
-<meta http-equiv="refresh" content="$::Refresh;url=buster.cgi?file=$::File&page=$::Page&last=$::Last&refresh=$::Refresh">
-<title>BrowserBuster II: $::URL</title>
-<style type="text/css">
-body {
-  overflow: hidden;
-  border: 0;
-  margin: 0;
-}
-</style>
-</head>
-<script>
-dump("+++ loading $::URL\\n");
-</script>
-<body>
-};
-    print "$::File: $::URL";
-    if ($::Last != -1) {
-        print " ($::Page of $::Last)<br>";
-    }
-    print qq{
-<iframe width="100%" height="100%" src="$::URL">
-};
-}
-else {
-    # Make a web page that'll close the current browser
-    # window, terminating the test app.
-    print qq{<head>
-<title>BrowserBuster II: Done!</title>
-<body onload="window.close();">
-All done!
-};
-}
-
-# Footer
-print qq{</body>
-</html>
-};
deleted file mode 100644
--- a/tools/footprint/create_dat.awk
+++ /dev/null
@@ -1,21 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-BEGIN     { COUNT = 1
-            if (TYPE == "") TYPE = "vms";
-          }
-
-/^[0-9]/  { if      (TYPE == "vms") print COUNT, $1;
-            else if (TYPE == "vmd") print COUNT, $4;
-            else if (TYPE == "vmx") print COUNT, $2 + $3;
-            else if (TYPE == "rss") print COUNT, $6;
-
-            COUNT = COUNT + 1;
-          }
-
-/^ /      { print COUNT, "0";
-            COUNT = COUNT + 1; \
-          }
-
-
deleted file mode 100755
--- a/tools/footprint/linear-regression.awk
+++ /dev/null
@@ -1,58 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-function regress(DATAPOINTS,SX,SY,SXY,SX2)
-{
-   b1 = (DATAPOINTS * SXY - SX * SY) / (DATAPOINTS * SX2 - SX * SX);
-   b0 = (SY - b1 * SX ) / DATAPOINTS;
-   return b1 " * x + " b0; 
-}
-
-BEGIN {
-        if (!Skip) Skip = 0;
-        if (Interval) 
-        {
-           Count = 0;
-           IntervalCount = 0;
-        }
-      }
-
-NR>Skip {
-        sx += $1;
-        sy += $2;
-        sxy += $1 * $2;
-        sx2 += $1 * $1;
-        #print NR " " sx " " sy " " sxy " " sx2
-
-        if (Interval)
-        {
-           if(Count == Interval-1)
-           {
-              IntervalCount += 1;
-
-              print NR-Count, "-", NR, ":  ", regress(Count,isx,isy,isxy,isx2);
-
-              Count = 0;
-              isx = 0;
-              isy = 0;
-              isxy = 0;
-              isx2 = 0;
-           }
-           else
-           {
-              Count += 1;
-              isx += $1;
-              isy += $2;
-              isxy += $1 * $2;
-              isx2 += $1 * $1;
-           }
-        }
-     }
-
-END {
-       if(Interval) {
-          print NR-Count, "-", NR, ":  ", regress(Count,isx,isy,isxy,isx2);
-       }
-       print regress(NR-Skip, sx, sy, sxy, sx2); 
-    }
deleted file mode 100644
--- a/tools/footprint/linux-gdf.mk
+++ /dev/null
@@ -1,93 +0,0 @@
-# -*- Mode: Makefile -*-
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# This makefile will run Mozilla (or the program you specify), observe
-# the program's memory status using the /proc filesystem, and generate
-# a ``gross dynamic footprint'' graph using gnuplot.
-#
-# Usage:
-#
-#   make MOZILLA_DIR=<mozilla-dir> PROGRAM=<program> URL=<url>
-#
-# e.g.,
-#
-#   make -flinux-gdf.mk \
-#     MOZILLA_DIR=/export2/waterson/seamonkey-opt/mozilla/dist/bin \
-#     PROGRAM=gtkEmbed \
-#     BUSTER_URL="http://localhost/cgi-bin/buster.cgi?refresh=10"
-#
-# To use this program, you'll need to:
-#
-# 1. Install gnuplot, e.g., using your RedHat distro.
-# 2. Install the "buster.cgi" script onto a webserver somewhere
-# 3. Have a mozilla build.
-#
-# You can tweak ``linux.gnuplot.in'' to change the graph's output.
-
-# This script computes a line using linear regression; its output is
-# of the form:
-#
-#   <b1> * x + <b0>
-#
-# Where <b1> is the slope and <b0> is the y-intercept.
-LINEAR_REGRESSION=awk -f linear-regression.awk Skip=5
-
-INTERVAL=10
-WATCH=./watch.sh
-
-MOZILLA_DIR=../../dist/bin
-PROGRAM=gtkEmbed
-BUSTER_URL=http://localhost/cgi-bin/buster.cgi?refresh=$(INTERVAL)
-OUTFILE=linux.dat
-
-#----------------------------------------------------------------------
-# Top-level target
-#
-all: gdf.png
-
-#----------------------------------------------------------------------
-# gtkEmbed
-#
-
-.INTERMEDIATE: linux.gnuplot vms.dat vmd.dat vmx.dat rss.dat
-
-# Create a PNG image using the generated ``linux.gnuplot'' script
-gdf.png: vms.dat vmd.dat vmx.dat rss.dat linux.gnuplot
-	gnuplot linux.gnuplot
-
-# Generate a ``gnuplot'' script from ``linux.gnuplot.in'', making
-# appropriate substitutions as necessary.
-linux.gnuplot: linux.gnuplot.in vms.dat
-	sed -e "s/@PROGRAM@/$(PROGRAM)/" \
-            -e "s/@VMS-LINE@/`$(LINEAR_REGRESSION) vms.dat`/" \
-	    -e "s/@GROWTH-RATE@/`$(LINEAR_REGRESSION) vms.dat | awk '{ printf \"%0.1lf\\n\", $$1; }'`/" \
-	    -e "s/@BASE-SIZE@/`$(LINEAR_REGRESSION) vms.dat | awk '{ print $$5 + 2000; }'`/" \
-		linux.gnuplot.in > linux.gnuplot
-
-# Break the raw data file into temporary files that can be processed
-# by gnuplot directly.
-vms.dat: $(OUTFILE)
-	awk -f create_dat.awk TYPE=vms $? > $@
-
-vmd.dat: $(OUTFILE)
-	awk -f create_dat.awk TYPE=vmd $? > $@
-
-vmx.dat: $(OUTFILE)
-	awk -f create_dat.awk TYPE=vmx $? > $@
-
-rss.dat: $(OUTFILE)
-	awk -f create_dat.awk TYPE=rss $? > $@
-
-# Run $(PROGRAM) to produce $(OUTFILE)
-$(OUTFILE):
-	LD_LIBRARY_PATH=$(MOZILLA_DIR) \
-	MOZILLA_FIVE_HOME=$(MOZILLA_DIR) \
-	$(WATCH) -i $(INTERVAL) -o $@ $(MOZILLA_DIR)/$(PROGRAM) "$(BUSTER_URL)"
-
-# Clean up the mess.
-clean:
-	rm -f $(OUTFILE) gdf.png *~
-
deleted file mode 100644
--- a/tools/footprint/linux.gnuplot.in
+++ /dev/null
@@ -1,15 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-set term png color
-set output 'gdf.png'
-set title '@PROGRAM@ - Gross Dynamic Footprint'
-set xlabel 'Time (sec)'
-set ylabel 'KB'
-set key bottom right
-set label '@GROWTH-RATE@KB/sec' at 5, @BASE-SIZE@
-plot 'vms.dat' title 'Total VM Size' with line 1,\
-  @VMS-LINE@ notitle with line 1,\
-  'vmd.dat' title 'Data Size' with line 3,\
-  'vmx.dat' title 'Code Size' with line 5,\
-  'rss.dat' title 'Resident Set Size' with line 7
deleted file mode 100644
--- a/tools/footprint/lists/100.list
+++ /dev/null
@@ -1,147 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# These are the "Top 100" from chofmann's list
-#   BTW, the first url is duplicated several times under the expectation
-#   that the first 5 memory readings will be ignored as startup noise.
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.netscape.com
-http://www.microsoft.com
-http://www.excite.com
-http://www.mckinley.com
-http://www.city.net
-http://www.webcrawler.com
-http://www.mirabilis.com
-http://www.infoseek.com
-http://www.pathfinder.com
-http://www.warnerbros.com
-http://www.webmd.com
-http://www.altavista.digital.com
-http://www.altavista.com
-http://www.usatoday.com
-http://www.mysap.com
-http://www.starwave.com
-http://www.hotwired.com
-http://www.statmarket.com
-http://www.lycos.com
-http://espn.go.com
-http://www.cnet.com
-http://www.search.com
-http://www.news.com
-http://www.download.com
-http://www.geocities.com
-http://www.shockwave.com
-http://www.bn.com
-http://www.imdb.com
-http://uk.imdb.com
-http://www.macromedia.com
-http://www.infobeat.com
-http://www.fxweb.com
-http://www.whowhere.com
-http://www.real.com
-http://www.sportsline.com
-http://www.dejanews.com
-http://www.the-park.com
-http://www.cmpnet.com
-http://www.go2net.com
-http://www.metacrawler.com
-http://www.playsite.com
-http://www.stocksite.com
-http://www.ameritrade.com
-http://www.zone.com
-http://www.nyse.com
-http://www.economist.com
-http://www.infospace.com
-http://www.zdnet.com
-http://www.hotfiles.com
-http://www.chathouse.com
-http://www.looksmart.com
-http://www.hotjobs.com
-http://www.macaddict.com
-http://www.benews.com
-http://www.apple.com
-http://www.beseen.com
-http://www.dogpile.com
-http://www.xoom.com
-http://www.tucows.com
-http://www.freethemes.com
-http://www.winfiles.com
-http://www.vservers.com
-http://www.mtv.com
-http://www.the-xfiles.com
-http://www.autoworld.com
-http://www.monster.com
-http://www.surplusdirect.com
-http://www.tomshardware.com
-http://www.bigyellow.com
-http://www.100hot.com
-http://www.messagemates.com
-http://www.onelist.com
-http://www.bluemountain.com
-http://www.ea.com
-http://www.bullfrog.co.uk
-http://www.travelocity.com
-http://www.pbs.com
-http://www.bigcharts.com
-http://www.davesclassics.com
-http://www.goto.com
-http://www.weather.com
-http://www.gamespot.com
-http://www.bloomberg.com
-http://www.winzip.com
-http://www.filez.com
-http://www.browserwatch.com
-http://www.internet.com
-http://www.cardmaster.com
-http://www.creaf.com
-http://netaddress.usa.net
-http://www.occ.com
-http://www.as.org
-http://www.amazon.com
-http://www.drudgereport.com
-http://www.hardradio.com
-http://www.intel.com
-http://www.mp3.com
-http://www.ebay.com
-http://www.msn.com
-http://www.fifa.com
-http://www.attitude.com
-http://www.happypuppy.com
-http://www.gamesdomain.com
-http://www.onsale.com
-http://www.tm.com
-http://www.xlnc1.com
-http://www.greatsports.com
-http://www.discovery.com
-http://www.nai.com
-http://www.nasa.gov
-http://www.os2ss.com
-http://www.warzone.com
-http://www.gamestats.com
-http://www.winamp.com
-http://java.sun.com
-http://www.hp.com
-http://www.cdnow.com
-http://www.nytimes.com
-http://www.majorleaguebaseball.com
-http://www.thestreet.com
-http://www.planetquake.com
-http://www.cnbc.com
-http://www.slashdot.org
-http://www.adobe.com
-http://www.quicken.com
-http://www.developer.com
-http://www.mapquest.com
-http://www.freshmeat.net
-http://www.bxa.doc.gov/Encryption/regs.htm
-http://www.rewards2k.com
-http://www.cnnfn.com
-http://www.blockbuster.com
-http://www.richinstyle.com/
-http://www.xml.com
deleted file mode 100644
--- a/tools/footprint/lists/500.list
+++ /dev/null
@@ -1,551 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# This is a long list (over 500 urls) which we got from AOL.
-#   BTW, the first url is duplicated several times under the expectation
-#   that the first 5 memory readings will be ignored as startup noise.
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.yahoo.com
-http://www.iwin.com
-http://www.infoev.com
-http://www.ITARGET.COM
-http://www.ITN.NET
-http://www.IVILLAGE.com
-http://www.1800USSEARCH.COM
-http://www.1ST-NETCARD.COM
-http://www.3COM.COM
-http://www.4ANYTHING.COM
-http://www.50MEGS.COM
-http://www.555-1212.COM
-http://www.8M.COM
-http://www.AA.COM
-http://www.ABOUT.COM
-http://www.ACCOUNTONLINE.COM
-http://www.ACCUWEATHER.COM
-http://www.ACOP.COM
-http://www.ADOBE.COM
-http://www.ALLADVANTAGE.COM
-http://www.ALLOY.COM
-http://www.ALTAVISTA.com
-http://www.AMAZON.COM
-http://www.AMERICANEXPRESS.COM
-http://www.AMERICANGREETINGS.COM
-http://www.AMERICAONLINE.com
-http://www.AMTRAK.COM
-http://www.ANCESTRY.COM
-http://www.ANGELFIRE.COM
-http://www.ANYWHO.COM
-http://www.APPLE.COM
-http://www.ARCAMAX.COM
-http://www.ARIA.COM
-http://www.ARTISTDIRECT.COM
-http://www.ASKJEEVES.COM
-http://www.ASKME.COM
-http://www.ASTRONET.COM
-http://www.ATOMZ.COM
-http://www.ATT.NET
-http://www.AUCTIONWATCH.COM
-http://www.AUDIOHIGHWAY.COM
-http://www.AUTOBYTEL.COM
-http://www.AUTOTRADER.COM
-http://www.AUTOWEB.COM
-http://www.BABYCENTER.COM
-http://www.BACKWIRE.COM
-http://www.BANKOFAMERICA.COM
-http://www.BARGAINDOG.COM
-http://www.BARNESANDNOBLE.COM
-http://www.BASSHOTELS.COM
-http://www.BBC.CO.UK
-http://www.BERKELEY.EDU
-http://www.BESEEN.COM
-http://www.BESTBUY.COM
-http://www.BESTOFTHEWEB.COM
-http://www.BFAST.COM
-http://www.BIGBROTHER.COM
-http://www.BIGBROTHER2000.COM
-http://www.BIGFAST.NET
-http://www.BIGFATBABY.COM
-http://www.BIZLAND.COM
-http://www.BIZRATE.COM
-http://www.BLUELIGHT.COM
-http://www.BLUEMOUNTAINARTS.COM
-http://www.BMGMUSICSERVICE.COM
-http://www.BOLT.COM
-http://www.BONUSCHAT.NET
-http://www.BONZI.COM
-http://www.BOSTON.COM
-http://www.BRAVENET.COM
-http://www.BRITANNICA.COM
-http://www.BROADCAST.COM
-http://www.BUTTONWARE.NET
-http://www.BUY.COM
-http://www.CALLWAVE.COM
-http://www.CAPITALONE.COM
-http://www.CARCLUB.COM
-http://www.CAREERBUILDER.COM
-http://www.CAREERPATH.COM
-http://www.CARPOINT.COM
-http://www.CARS.COM
-http://www.CBS.COM
-http://www.CCBILL.COM
-http://www.CDNOW.COM
-http://www.CHEAPTICKETS.COM
-http://www.CHEATCC.COM
-http://www.CIRCUITCITY.COM
-http://www.CITIBANK.COM
-http://www.CITYSEARCH.com
-http://www.CJB.NET
-http://www.CLASSMATES.COM
-http://www.CLICKHERETOFIND.COM
-http://www.CNBC.COM
-http://www.CNCHOST.COM
-http://www.CNET.com
-http://www.CNN.COM
-http://www.CNNFN.COM
-http://www.CNNSI.COM
-http://www.COLLEGECLUB.COM
-http://www.COLONIZE.COM
-http://www.COLUMBIAHOUSE.COM
-http://www.COME.TO
-http://www.COMETSYSTEMS.COM
-http://www.COMMISSION-JUNCTION.COM
-http://www.COMPAQ.COM
-http://www.COMPUSERVE.COM
-http://www.COMPUTINGCENTRAL.COM
-http://www.CONDENET.com
-http://www.CONTENTMAIL.COM
-http://www.CONTINENTAL.COM
-http://www.CONXION.COM
-http://www.COOLSAVINGS.COM
-http://www.CORNELL.EDU
-http://www.CROSSWINDS.NET
-http://www.CUPCAKEPARTY.COM
-http://www.CYBERGOLD.COM
-http://www.CYBERREBATE.COM
-http://www.DAI.NET
-http://www.DASH.COM
-http://www.DEALTIME.COM
-http://www.DEJA.COM
-http://www.DELL.COM
-http://www.DELPHI.COM
-http://www.DELTA-AIR.COM
-http://www.DEMON.CO.UK
-http://www.DESTINATIONWWW.COM
-http://www.DIALPAD.COM
-http://www.DIGITALCITY.COM
-http://www.DIRECTHIT.COM
-http://www.DISCOVERCARD.COM
-http://www.DISCOVERY.COM
-http://www.DMOZ.ORG
-http://www.DOGPILE.COM
-http://www.DRKOOP.COM
-http://www.DRUGSTORE.COM
-http://www.EAAEA.COM
-http://www.EAONLINE.com
-http://www.EARTHLINK.NET
-http://www.EASYWINNING.COM
-http://www.EBAY.COM
-http://www.EDIETS.COM
-http://www.EDMUNDS.COM
-http://www.EGGHEAD.COM
-http://www.EGREETINGS.COM
-http://www.EGROUPS.COM
-http://www.EHOW.COM
-http://www.EMAZING.COM
-http://www.ENCARTA.COM
-http://www.ENEWS.COM
-http://www.ENTERTAINDOM-WARNERBROSONLINE.com
-http://www.EONLINE.COM
-http://www.EPINIONS.COM
-http://www.EROLS.COM
-http://www.ESHOP.COM
-http://www.ETOUR.COM
-http://www.ETOYS.COM
-http://www.ETRADE.COM
-http://www.EVALBUM.COM
-http://www.EVADC.ORG
-http://www.EVOICE.COM
-http://www.EW.COM
-http://www.EWANTED.COM
-http://www.EXCITE.com
-http://www.EXITFUEL.COM
-http://www.EXPAGE.COM
-http://www.EXPEDIA.COM
-http://www.EZSWEEPS.COM
-http://www.FASTWEB.COM
-http://www.FEDEX.COM
-http://www.FIDELITY.COM
-http://www.FIRSTNAME.COM
-http://www.FIRSTUSA.COM
-http://www.FLASH.NET
-http://www.FLOWGO.COM
-http://www.FOCALEX.COM
-http://www.FOODTV.COM
-http://www.FOOL.COM
-http://www.FORTUNECITY.COM
-http://www.FOUND404.COM
-http://www.FOXKIDS.COM
-http://www.FOXNEWS.COM
-http://www.FREEINTERNET.COM
-http://www.FREELOTTO.COM
-http://www.FREERIDE.COM
-http://www.FREESERVE.COM
-http://www.FREESERVERS.COM
-http://www.FREESHOP.COM
-http://www.FREEYELLOW.COM
-http://www.FUNNYGREETINGS.COM
-http://www.FUNONE.COM
-http://www.FUNSTUN.COM
-http://www.GAMESVILLE.com
-http://www.GAP.COM
-http://www.GARDEN.COM
-http://www.GASPRICEWATCH.COM
-http://www.GATEWAY.COM
-http://www.GATOR.COM
-http://www.GETSMART.COM
-http://www.GO.COM
-http://www.GO2NET.COM
-http://www.GOOGLE.COM
-http://www.GOTO.COM
-http://www.GOVERNMENTGUIDE.COM
-http://www.GREENFIELDONLINE.COM
-http://www.GTESUPERPAGES.com
-http://www.HALF.COM
-http://www.HALLMARK.COM
-http://www.HARRISPOLLONLINE.COM
-http://www.HARVARD.EDU
-http://www.HEADHUNTER.NET
-http://www.HIGHSCHOOLALUMNI.COM
-http://www.HITBOX.COM
-http://www.HOLLYWOOD.COM
-http://www.HOME.COM
-http://www.HOME.NET
-http://www.HOMEADVISOR.COM
-http://www.HOMEARTS.COM
-http://www.HOMEPAGE.COM
-http://www.HOMESTEAD.COM
-http://www.HOMESTORE.COM
-http://www.HOTJOBS.COM
-http://www.HOTMAIL.COM
-http://www.HOTSOCKET.COM
-http://www.HP.COM
-http://www.HYPERMART.NET
-http://www.IBM.COM
-http://www.ICQ.COM
-http://www.ICQ.net
-http://www.IGN.COM
-http://www.IMDB.COM
-http://www.INDIVIDUAL.COM
-http://www.INFOSPACE.COM
-http://www.INSIDETHEWEB.COM
-http://www.INTEL.com
-http://www.INTELIHEALTH.COM
-http://www.INTELLICAST.COM
-http://www.INTERNETFUEL.COM
-http://www.IPRINT.COM
-http://www.IWON.COM
-http://www.JACKPOT.COM
-http://www.JCPENNEY.COM
-http://www.JOBSONLINE.COM
-http://www.JUNO.COM
-http://www.JUSTSAYWOW.COM
-http://www.KBB.COM
-http://www.KEEN.COM
-http://www.LATIMES.com
-http://www.LAUNCH.COM
-http://www.LIFEMINDERS.COM
-http://www.LITERARYGUILD.COM
-http://www.LOOKSMART.COM
-http://www.LOWESTFARE.COM
-http://www.LUCKY7.COM
-http://www.LUCKYSURF.COM
-http://www.LYCOS.COM
-http://www.M0.NET
-http://www.NETBROADCASTER.COM
-http://www.NETFLIP.COM
-http://www.NETMARKET.COM
-http://www.NETMIND.COM
-http://www.NETSCAPE.COM
-http://www.NETSETTER.COM
-http://www.NETSONIC.COM
-http://www.NETTAXI.COM
-http://www.NETWORKSOLUTIONS.COM
-http://www.NETZIP.COM
-http://www.NEXTCARD.COM
-http://www.NFL.COM
-http://www.NFO-INTERACTIVE.COM
-http://www.NICK.COM
-http://www.NORTHERNLIGHT.COM
-http://www.NOVUSNET.COM
-http://www.NWA.COM
-http://www.NYTIMES.COM
-http://www.OFFICEDEPOT.COM
-http://www.OFFICEMAX.COM
-http://www.ONHEALTH.COM
-http://www.ONLINECREDITNOW.COM
-http://www.ONMONEY.COM
-http://www.ONRESPONSE.COM
-http://www.OPINIONFORCE.COM
-http://www.OPINIONSURVEY.COM
-http://www.OURHOUSE.COM
-http://www.OVERSTOCK.COM
-http://www.OXYGEN.COM
-http://www.PAGOO.COM
-http://www.PARAMOUNT.com
-http://www.PASSPORT.COM
-http://www.PAYPAL.COM
-http://www.PBS.ORG
-http://www.PCH.COM
-http://www.PCWORLD.COM
-http://www.PEGSINC.COM
-http://www.PENNYWEB.COM
-http://www.PETS.COM
-http://www.PETSMART.COM
-http://www.PHOTOPOINT.COM
-http://www.PHOTOWORKS.COM
-http://www.PLANETOFMUSIC.COM
-http://www.PLANETRX.COM
-http://www.POGO.COM
-http://www.PRESARIO.NET
-http://www.PREVENTION.COM
-http://www.PRICELINE.COM
-http://www.PRIZECENTRAL.COM
-http://www.PRIZES.COM
-http://www.PRODIGY.NET
-http://www.PRODUCTOPIA.COM
-http://www.PROMOGAMES.COM
-http://www.PROMOTIONS.COM
-http://www.QUICKEN.COM
-http://www.QVC.COM
-http://www.READERSDIGEST.COM
-http://www.REAL.COM
-http://www.REALNETWORKS.COM
-http://www.REALTOR.COM
-http://www.REGISTER.COM
-http://www.REGISTER-ONCE.COM
-http://www.ROCKETLINKS.COM
-http://www.ROLLINGSTONE.COM
-http://www.ROOTSWEB.COM
-http://www.RR.COM
-http://www.RSVP0.NET
-http://www.SACCITYWEB.COM
-http://www.SALESMOUNTAIN.COM
-http://www.SALON.COM
-http://www.SANDBOX.COM
-http://www.SEND4FUN.COM
-http://www.SENDAFRIEND.COM
-http://www.SENDLAUGHTER.COM
-http://www.SENDMOREINFO.COM
-http://www.SHOCKWAVE.COM
-http://www.SHOPNOW.COM
-http://www.SHOPPINGLIST.COM
-http://www.SIERRA.COM
-http://www.SIMPLENET.COM
-http://www.SLATE.COM
-http://www.SMARTBOTPRO.NET
-http://www.SMARTPAGES.COM
-http://www.SNAP.COM
-http://www.SONICNET.COM
-http://www.SONYONLINE.com
-http://www.SOUTHWEST.COM
-http://www.SPEEDYCLICK.COM
-http://www.SPINNER.COM
-http://www.SPORTINGNEWS.COM
-http://www.SPORTSLINE.COM
-http://www.SPREE.COM
-http://www.SPRINT.COM
-http://www.SPRINTPCS.COM
-http://www.STAMPS.COM
-http://www.STAPLES.COM
-http://www.STARTSAMPLING.COM
-http://www.STORERUNNER.COM
-http://www.SWEEPSCLUB.COM
-http://www.SWITCHBOARD.COM
-http://www.SWITCHOUSE.COM
-http://www.SYMANTEC.COM
-http://www.TALKCITY.COM
-http://www.TARGET.COM
-http://www.TARGETNET.COM
-http://www.THEBIRTHDAYGAME.COM
-http://www.THEGLOBE.COM
-http://www.THESTREET.COM
-http://www.THIRDAGE.COM
-http://www.THRIVEONLINE.COM
-http://www.TICKETMASTER.com
-http://www.TIME.COM
-http://www.TM0.COM
-http://www.TOYSRUS.COM
-http://www.TRAFFICINC.COM
-http://www.TRAVELNOW.COM
-http://www.TRAVELOCITY.COM
-http://www.TREELOOT.COM
-http://www.TRIP.COM
-http://www.TRIPOD.COM
-http://www.TROPPOLOTTO.COM
-http://www.TUCOWS.COM
-http://www.TVGUIDE.COM
-http://www.TWISTEDHUMOR.COM
-http://www.UBID.COM
-http://www.UIUC.EDU
-http://www.UMICH.EDU
-http://www.UNC.EDU
-http://www.UNICAST.COM
-http://www.UNITED.COM
-http://www.UPROAR.COM
-http://www.UPS.COM
-http://www.USAIRWAYS.COM
-http://www.USATODAY.COM
-http://www.USPS.COM
-http://www.UTEXAS.EDU
-http://www.VALUPAGE.COM
-http://www.VICINITY.COM
-http://www.VICTORIASSECRET.COM
-http://www.VIRTUALAVE.NET
-http://www.VIRTUALVEGAS.COM
-http://www.VSTORE.COM
-http://www.WALMART.COM
-http://www.WASHINGTONPOST.COM
-http://www.WEATHER.COM
-http://www.WEB1000.COM
-http://www.WEBCRAWLER.COM
-http://www.WEBJUMP.COM
-http://www.WEBMD.COM
-http://www.WEBRING.ORG
-http://www.WEBSHOTS.COM
-http://www.WEBSTAKES.COM
-http://www.WSJ.COM
-http://www.WUNDERGROUND.COM
-http://www.X.COM
-http://www.XDRIVE.COM
-http://www.XOOM.COM
-http://www.YAHOO.COM
-http://www.YIMG.COM
-http://www.YOUWINIT.COM
-http://www.YOUWINMAIL.COM
-http://www.ZDNET.com
-http://www.ZING.COM
-http://www.ZIP2.COM
-http://www.ZMEDIA.COM
-http://www.ZONE.COM
-http://www.1STUP.COM
-http://www.1STUP.COM
-http://www.newslink.org
-http://www.answers.com
-http://www.TheAtlantic.com
-http://www.audionet.com
-http://www.bigbook.com
-http://www.biography.com
-http://www.cartalk.com
-http://www.careermosaic.com
-http://www.thecase.com
-http://www.city.net
-http://www.coolcentral.com
-http://www.cyberatlas.com
-http://www.davecentral.com
-http://www.menusonline.com
-http://www.usnews.com
-http://www.minds.com
-http://www.epicurious.com
-http://espnet.sportszone.com
-http://live.excite.com
-http://www.freeways.com
-http://www.gamelan.com
-http://www.gw2k.com
-http://www.haring.com
-http://www.homefair.com
-http://www.hotwired.com
-http://www.industry.net
-http://www.inquiry.com
-http://rampages.onramp.net
-http://www.manslife.com
-http://www.match.com
-http://www.sjmercury.com
-http://www.777film.com
-http://www.mrshowbiz.com
-http://www.pathfinder.com
-http://www.quote.com
-http://www.rocktropolis.com
-http://www.salonmagazine.com
-http://www.sciam.com
-http://voyeur.mckinley.com
-http://wheel.ucdavis.edu
-http://www.atr.org
-http://www.stroud.com
-http://www.sun.com
-http://www.supporthelp.com
-http://www.swoon.com
-http://www.tuneup.com
-http://www.w3.org
-http://www.conductor.com
-http://www.webreference.com
-http://www.windows95.com
-http://www.bezerk.com
-http://www.zauction.com
-http://www.abc.com
-http://www.usair.com
-http://www.dec.com
-http://www.eds.com
-http://www.wang.com
-http://www.shop.com
-http://www.www.com
-http://www.nbc.com
-http://www.russia.com
-http://www.delta.com
-http://www.123.com
-http://www.horses.com
-http://www.dogs.com
-http://www.frogs.com
-http://www.france.com
-http://www.karate.com
-http://www.latin.com
-http://www.sec.com
-http://cbs.sportsline.com
-http://events.ticketmaster.com
-http://home.sprynet.com
-http://lust.ops.outpost.com
-http://members.aol.com
-http://members.visi.net
-http://members.xoom.com
-http://www.aircoinc.com
-http://www.fshr.com
-http://www.geocities.com
-http://www.mcneel.com
-http://www.microwings.com
-http://www.mirabilis.com
-http://www.netwalk.com
-http://www.nyssba.org
-http://www.syquest.com
-http://www.ussb.com
-http://www.vision3d.com
-http://www.wbwebcards.com
-http://www.webmole.com
-http://www.bluemountain.com
-http://www.cdarchive.com
-http://www.clubextreme.net
-http://www.excite.co.uk
-http://www.feehery-grind.com
-http://www.freetel.com
-http://www.lib.utexas.edu
-http://www.puzzletts.com
-http://www.speakeasy.org
-http://www.nbn.com
-http://www.pepsi.com
-http://www.acm.uiuc.edu
-http://wwww.washingtonpost.com
-http://webcrawler.com
-http://www.expedia.msn.com
-http://www.digital.com
-http://www.sportszone.com
-http://www.mdc.com
-http://www.disney.com
-http://www.riddler.com
-http://www.shareware.com
-http://www.olympic.org
-http://www.gamespot.com
-http://www.gte.com
-http://netfind.aol.com
-http://ad.doubleclick.net
deleted file mode 100644
--- a/tools/footprint/lists/static41.list
+++ /dev/null
@@ -1,61 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# List of 41 urls which are static and inside the firewall.
-# Sorted in order from biggest memory user to least memory
-#   user.
-# 1/22/01 - Added 5 international urls, so this now has 46 urls
-#   in the list (even though the name doesn't sound like it).
-http://jrgm.mcom.com/perf/loadtime5/base/www.yahoo.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.yahoo.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.yahoo.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.yahoo.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.yahoo.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.iplanet.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.voodooextreme.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.cnn.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.tomshardware.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.zdnet.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.nytimes.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.w3.org_DOML2Core
-http://jrgm.mcom.com/perf/loadtime5/base/www.nytimes.com_Table
-http://jrgm.mcom.com/perf/loadtime5/base/web.icq.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.zdnet.com_Gamespot.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.spinner.com
-http://jrgm.mcom.com/perf/loadtime5/base/espn.go.com
-http://jrgm.mcom.com/perf/loadtime5/base/home.netscape.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.travelocity.com
-http://jrgm.mcom.com/perf/loadtime5/base/news.cnet.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.time.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.wired.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.msnbc.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.excite.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.compuserve.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.digitalcity.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.aol.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.amazon.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.moviefone.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.msn.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.apple.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.quicken.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.expedia.com
-http://jrgm.mcom.com/perf/loadtime5/base/hotwired.lycos.com
-http://jrgm.mcom.com/perf/loadtime5/base/my.netscape.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.sun.com
-http://jrgm.mcom.com/perf/loadtime5/base/bugzilla.mozilla.org
-http://jrgm.mcom.com/perf/loadtime5/base/slashdot.org
-http://jrgm.mcom.com/perf/loadtime5/base/www.microsoft.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.mapquest.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.ebay.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.altavista.com
-http://jrgm.mcom.com/perf/loadtime5/base/www.google.com
-http://jrgm.mcom.com/perf/loadtime5/base/lxr.mozilla.org
-http://jrgm.mcom.com/perf/loadtime5/base/www.yahoo.com
-http://jrgm.mcom.com/perf/loadtime5/base/vanilla-page
-# International Urls:
-http://jrgm.mcom.com/perf/loadtime5/base/www.jp.aol.com/index.html
-http://jrgm.mcom.com/perf/loadtime5/base/www.zdnet.co.jp_eweek/index.html
-http://jrgm.mcom.com/perf/loadtime5/base/www.ttimes.com.tw/index.html
-http://jrgm.mcom.com/perf/loadtime5/base/www.chinacue.cn.net/index.html
-http://jrgm.mcom.com/perf/loadtime5/base/www.lesechos.fr/index.html
deleted file mode 100644
--- a/tools/footprint/top100.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-# These are the "Top 100" from chofmann's list
-http://www.yahoo.com
-http://www.netscape.com
-http://www.microsoft.com
-http://www.excite.com
-http://www.mckinley.com
-http://www.city.net
-http://www.webcrawler.com
-http://www.mirabilis.com
-http://www.infoseek.com
-http://www.pathfinder.com
-http://www.warnerbros.com
-http://www.webmd.com
-http://www.altavista.digital.com
-http://www.altavista.com
-http://www.usatoday.com
-http://www.mysap.com
-http://www.starwave.com
-http://www.hotwired.com
-http://www.statmarket.com
-http://www.lycos.com
-http://espn.go.com
-http://www.cnet.com
-http://www.search.com
-http://www.news.com
-http://www.download.com
-http://www.geocities.com
-http://www.shockwave.com
-http://www.bn.com
-http://www.imdb.com
-http://uk.imdb.com
-http://www.macromedia.com
-http://www.infobeat.com
-http://www.fxweb.com
-http://www.whowhere.com
-http://www.real.com
-http://www.sportsline.com
-http://www.dejanews.com
-http://www.the-park.com
-http://www.cmpnet.com
-http://www.go2net.com
-http://www.metacrawler.com
-http://www.playsite.com
-http://www.stocksite.com
-http://www.ameritrade.com
-http://www.zone.com
-http://www.nyse.com
-http://www.economist.com
-http://www.infospace.com
-http://www.zdnet.com
-http://www.hotfiles.com
-http://www.chathouse.com
-http://www.looksmart.com
-http://www.hotjobs.com
-http://www.macaddict.com
-http://www.benews.com
-http://www.apple.com
-http://www.beseen.com
-http://www.dogpile.com
-http://www.xoom.com
-http://www.tucows.com
-http://www.freethemes.com
-http://www.winfiles.com
-http://www.vservers.com
-http://www.mtv.com
-http://www.the-xfiles.com
-http://www.autoworld.com
-http://www.monster.com
-http://www.surplusdirect.com
-http://www.tomshardware.com
-http://www.bigyellow.com
-http://www.100hot.com
-http://www.messagemates.com
-http://www.onelist.com
-http://www.bluemountain.com
-http://www.ea.com
-http://www.bullfrog.co.uk
-http://www.travelocity.com
-http://www.pbs.com
-http://www.bigcharts.com
-http://www.davesclassics.com
-http://www.goto.com
-http://www.weather.com
-http://www.gamespot.com
-http://www.bloomberg.com
-http://www.winzip.com
-http://www.filez.com
-http://www.browserwatch.com
-http://www.internet.com
-http://www.cardmaster.com
-http://www.creaf.com
-http://netaddress.usa.net
-http://www.occ.com
-http://www.as.org
-http://www.amazon.com
-http://www.drudgereport.com
-http://www.hardradio.com
-http://www.intel.com
-http://www.mp3.com
-http://www.ebay.com
-http://www.msn.com
-http://www.fifa.com
-http://www.attitude.com
-http://www.happypuppy.com
-http://www.gamesdomain.com
-http://www.onsale.com
-http://www.tm.com
-http://www.xlnc1.com
-http://www.greatsports.com
-http://www.discovery.com
-http://www.nai.com
-http://www.nasa.gov
-http://www.os2ss.com
-http://www.warzone.com
-http://www.gamestats.com
-http://www.winamp.com
-http://java.sun.com
-http://www.hp.com
-http://www.cdnow.com
-http://www.nytimes.com
-http://www.majorleaguebaseball.com
-http://www.thestreet.com
-http://www.planetquake.com
-http://www.cnbc.com
-http://www.slashdot.org
-http://www.adobe.com
-http://www.quicken.com
-http://www.developer.com
-http://www.mapquest.com
-http://www.freshmeat.net
-http://www.bxa.doc.gov/Encryption/regs.htm
-http://www.rewards2k.com
-http://www.cnnfn.com
-http://www.blockbuster.com
-http://www.richinstyle.com/
-http://www.xml.com
deleted file mode 100644
--- a/tools/footprint/win32-gdf.mk
+++ /dev/null
@@ -1,109 +0,0 @@
-# -*- Mode: Makefile -*-
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# This makefile takes raw data files named ``winEmbed.dat'' and
-# ``mozilla.dat'' produces a graph that shows memory usage and peak
-# memory usage versus number of URLs loaded.
-#
-# The data files are assumed to be of the form:
-#
-#   <working-set-size-1> <peak-working-set-size-1>
-#   <working-set-size-2> <peak-working-set-size-2>
-#   ...
-#
-# It is also assumed that each measurement corresponds (roughly) to a
-# URL load.
-#
-# You can tweak ``win32.gnuplot.in'' to change the graph's output.
-#
-# You should use this with ``make --unix'' (which will use
-# sh.exe instead of cmd.exe to process commands); e.g.,
-#
-#   make --unix -f win32-gdf.mk \
-#     BUSTER_URL="http://localhost/cgi-bin/buster.cgi?refresh=10"
-#
-# What You'll Need
-# ----------------
-#
-# . Get gnuplot for Win32 from
-#
-#     ftp://ftp.dartmouth.edu/pub/gnuplot/gnuplot3.7cyg.zip
-#
-# . The "standard" cygwin tools that you probably already have. (If
-#   you don't have 'em, see the Win32 build instructions on
-#   mozilla.org.)
-#
-
-# This script computes a line using linear regression; its output is
-# of the form:
-#
-#   <b1> * x + <b0>
-#
-# Where <b1> is the slope and <b0> is the y-intercept.
-LINEAR_REGRESSION=awk -f linear-regression.awk
-
-PROGRAM_PATH=..\\..\\dist\\win32_o.obj\\bin
-WINEMBED_PROGRAM=winEmbed
-MOZILLA_PROGRAM=mozilla
-
-GNUPLOT=wgnuplot.exe
-BUSTER_URL=http://btek/cgi-bin/buster.cgi?refresh=10
-
-#----------------------------------------------------------------------
-# Top-level target
-#
-all: win32-gdf.png
-
-#----------------------------------------------------------------------
-# winEmbed
-#
-
-.INTERMEDIATE: winEmbed-ws.dat winEmbed-pws.dat mozilla-ws.dat mozilla-pws.dat win32.gnuplot
-
-# Create a PNG image using the generated ``win32.gnuplot'' script
-win32-gdf.png: winEmbed-ws.dat winEmbed-pws.dat mozilla-ws.dat mozilla-pws.dat win32.gnuplot
-	$(GNUPLOT) win32.gnuplot
-
-# Generate a ``gnuplot'' script from ``win32.gnuplot.in'', making
-# appropriate substitutions as necessary.
-win32.gnuplot: win32.gnuplot.in winEmbed-ws.dat mozilla-ws.dat
-	sed -e "s/@WINEMBED-WS-LINE@/`$(LINEAR_REGRESSION) winEmbed-ws.dat`/" \
-	    -e "s/@WINEMBED-GROWTH-RATE@/`$(LINEAR_REGRESSION) winEmbed-ws.dat | awk '{ printf \"%0.1f\n\", $$1; }'`/" \
-	    -e "s/@WINEMBED-BASE-SIZE@/`$(LINEAR_REGRESSION) winEmbed-ws.dat | awk '{ print $$5; }'`/" \
-	    -e "s/@MOZILLA-WS-LINE@/`$(LINEAR_REGRESSION) mozilla-ws.dat`/" \
-	    -e "s/@MOZILLA-GROWTH-RATE@/`$(LINEAR_REGRESSION) mozilla-ws.dat | awk '{ printf \"%0.1f\n\", $$1; }'`/" \
-	    -e "s/@MOZILLA-BASE-SIZE@/`$(LINEAR_REGRESSION) mozilla-ws.dat | awk '{ print $$5; }'`/" \
-		win32.gnuplot.in > $@
-
-# Break the raw data file into temporary files that can be processed
-# by gnuplot directly.
-winEmbed-ws.dat: winEmbed.dat
-	awk '{ print NR, $$1 / 1024; }' $? > $@
-
-winEmbed-pws.dat: winEmbed.dat
-	awk '{ print NR, $$2 / 1024; }' $? > $@
-
-mozilla-ws.dat: mozilla.dat
-	awk '{ print NR, $$1 / 1024; }' $? > $@
-
-mozilla-pws.dat: mozilla.dat	
-	awk '{ print NR, $$2 / 1024; }' $? > $@
-
-# Run programs to collect data
-winEmbed.dat: wm.exe
-	cmd /c "start $(PROGRAM_PATH)\\$(WINEMBED_PROGRAM) $(BUSTER_URL) && .\\wm $(WINEMBED_PROGRAM) > $@"
-
-mozilla.dat: wm.exe
-	cmd /c "start $(PROGRAM_PATH)\\$(MOZILLA_PROGRAM) $(BUSTER_URL) && .\\wm $(MOZILLA_PROGRAM) > $@"
-
-# Build ``wm.exe'', the memory spy
-wm.exe: wm.cpp
-	cl -Od -Zi wm.cpp advapi32.lib
-
-# Clean up the mess.
-clean:
-	rm -f wm.exe *-gdf.png *.dat *~
-
deleted file mode 100644
--- a/tools/footprint/win32.gnuplot.in
+++ /dev/null
@@ -1,17 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-set term png color
-set output 'win32-gdf.png'
-set title 'Win32 - Gross Dynamic Footprint'
-set xlabel 'URLs'
-set ylabel 'KB'
-set key top left
-set label '@WINEMBED-GROWTH-RATE@KB/URL' at 20, @WINEMBED-BASE-SIZE@
-set label '@MOZILLA-GROWTH-RATE@KB/URL' at 20, @MOZILLA-BASE-SIZE@
-plot 'winEmbed-ws.dat' title 'Mem Usage (winEmbed)' with point 1,\
-     @WINEMBED-WS-LINE@ notitle with line 1,\
-     'winEmbed-pws.dat' title 'Peak Mem Usage (winEmbed)' with line 3,\
-     'mozilla-ws.dat' title 'Mem Usage (Mozilla)' with point 5,\
-     @MOZILLA-WS-LINE@ notitle with line 5,\
-     'mozilla-pws.dat' title 'Peak Mem Usage (Mozilla)' with line 7
deleted file mode 100644
--- a/tools/footprint/wm.cpp
+++ /dev/null
@@ -1,613 +0,0 @@
-/* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
- * This program tracks a process's working memory usage using the
- * ``performance'' entries in the Win32 registry. It borrows from
- * the ``pviewer'' source code in the MS SDK.
- */
-
-#include <assert.h>
-#include <windows.h>
-#include <winperf.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define PN_PROCESS                          1
-#define PN_PROCESS_CPU                      2
-#define PN_PROCESS_PRIV                     3
-#define PN_PROCESS_USER                     4
-#define PN_PROCESS_WORKING_SET              5
-#define PN_PROCESS_PEAK_WS                  6
-#define PN_PROCESS_PRIO                     7
-#define PN_PROCESS_ELAPSE                   8
-#define PN_PROCESS_ID                       9
-#define PN_PROCESS_PRIVATE_PAGE            10
-#define PN_PROCESS_VIRTUAL_SIZE            11
-#define PN_PROCESS_PEAK_VS                 12
-#define PN_PROCESS_FAULT_COUNT             13
-#define PN_THREAD                          14
-#define PN_THREAD_CPU                      15
-#define PN_THREAD_PRIV                     16
-#define PN_THREAD_USER                     17
-#define PN_THREAD_START                    18
-#define PN_THREAD_SWITCHES                 19
-#define PN_THREAD_PRIO                     20
-#define PN_THREAD_BASE_PRIO                21
-#define PN_THREAD_ELAPSE                   22
-#define PN_THREAD_DETAILS                  23
-#define PN_THREAD_PC                       24
-#define PN_IMAGE                           25
-#define PN_IMAGE_NOACCESS                  26
-#define PN_IMAGE_READONLY                  27
-#define PN_IMAGE_READWRITE                 28
-#define PN_IMAGE_WRITECOPY                 29
-#define PN_IMAGE_EXECUTABLE                30
-#define PN_IMAGE_EXE_READONLY              31
-#define PN_IMAGE_EXE_READWRITE             32
-#define PN_IMAGE_EXE_WRITECOPY             33
-#define PN_PROCESS_ADDRESS_SPACE           34
-#define PN_PROCESS_PRIVATE_NOACCESS        35
-#define PN_PROCESS_PRIVATE_READONLY        36
-#define PN_PROCESS_PRIVATE_READWRITE       37
-#define PN_PROCESS_PRIVATE_WRITECOPY       38
-#define PN_PROCESS_PRIVATE_EXECUTABLE      39
-#define PN_PROCESS_PRIVATE_EXE_READONLY    40
-#define PN_PROCESS_PRIVATE_EXE_READWRITE   41
-#define PN_PROCESS_PRIVATE_EXE_WRITECOPY   42
-#define PN_PROCESS_MAPPED_NOACCESS         43
-#define PN_PROCESS_MAPPED_READONLY         44
-#define PN_PROCESS_MAPPED_READWRITE        45
-#define PN_PROCESS_MAPPED_WRITECOPY        46
-#define PN_PROCESS_MAPPED_EXECUTABLE       47
-#define PN_PROCESS_MAPPED_EXE_READONLY     48
-#define PN_PROCESS_MAPPED_EXE_READWRITE    49
-#define PN_PROCESS_MAPPED_EXE_WRITECOPY    50
-#define PN_PROCESS_IMAGE_NOACCESS          51
-#define PN_PROCESS_IMAGE_READONLY          52
-#define PN_PROCESS_IMAGE_READWRITE         53
-#define PN_PROCESS_IMAGE_WRITECOPY         54
-#define PN_PROCESS_IMAGE_EXECUTABLE        55
-#define PN_PROCESS_IMAGE_EXE_READONLY      56
-#define PN_PROCESS_IMAGE_EXE_READWRITE     57
-#define PN_PROCESS_IMAGE_EXE_WRITECOPY     58
-
-struct entry_t {
-    int   e_key;
-    int   e_index;
-    char* e_title;
-};
-
-entry_t entries[] = {
-{ PN_PROCESS,                          0, TEXT("Process") },
-{ PN_PROCESS_CPU,                      0, TEXT("% Processor Time") },
-{ PN_PROCESS_PRIV,                     0, TEXT("% Privileged Time") },
-{ PN_PROCESS_USER,                     0, TEXT("% User Time") },
-{ PN_PROCESS_WORKING_SET,              0, TEXT("Working Set") },
-{ PN_PROCESS_PEAK_WS,                  0, TEXT("Working Set Peak") },
-{ PN_PROCESS_PRIO,                     0, TEXT("Priority Base") },
-{ PN_PROCESS_ELAPSE,                   0, TEXT("Elapsed Time") },
-{ PN_PROCESS_ID,                       0, TEXT("ID Process") },
-{ PN_PROCESS_PRIVATE_PAGE,             0, TEXT("Private Bytes") },
-{ PN_PROCESS_VIRTUAL_SIZE,             0, TEXT("Virtual Bytes") },
-{ PN_PROCESS_PEAK_VS,                  0, TEXT("Virtual Bytes Peak") },
-{ PN_PROCESS_FAULT_COUNT,              0, TEXT("Page Faults/sec") },
-{ PN_THREAD,                           0, TEXT("Thread") },
-{ PN_THREAD_CPU,                       0, TEXT("% Processor Time") },
-{ PN_THREAD_PRIV,                      0, TEXT("% Privileged Time") },
-{ PN_THREAD_USER,                      0, TEXT("% User Time") },
-{ PN_THREAD_START,                     0, TEXT("Start Address") },
-{ PN_THREAD_SWITCHES,                  0, TEXT("Con0, TEXT Switches/sec") },
-{ PN_THREAD_PRIO,                      0, TEXT("Priority Current") },
-{ PN_THREAD_BASE_PRIO,                 0, TEXT("Priority Base") },
-{ PN_THREAD_ELAPSE,                    0, TEXT("Elapsed Time") },
-{ PN_THREAD_DETAILS,                   0, TEXT("Thread Details") },
-{ PN_THREAD_PC,                        0, TEXT("User PC") },
-{ PN_IMAGE,                            0, TEXT("Image") },
-{ PN_IMAGE_NOACCESS,                   0, TEXT("No Access") },
-{ PN_IMAGE_READONLY,                   0, TEXT("Read Only") },
-{ PN_IMAGE_READWRITE,                  0, TEXT("Read/Write") },
-{ PN_IMAGE_WRITECOPY,                  0, TEXT("Write Copy") },
-{ PN_IMAGE_EXECUTABLE,                 0, TEXT("Executable") },
-{ PN_IMAGE_EXE_READONLY,               0, TEXT("Exec Read Only") },
-{ PN_IMAGE_EXE_READWRITE,              0, TEXT("Exec Read/Write") },
-{ PN_IMAGE_EXE_WRITECOPY,              0, TEXT("Exec Write Copy") },
-{ PN_PROCESS_ADDRESS_SPACE,            0, TEXT("Process Address Space") },
-{ PN_PROCESS_PRIVATE_NOACCESS,         0, TEXT("Reserved Space No Access") },
-{ PN_PROCESS_PRIVATE_READONLY,         0, TEXT("Reserved Space Read Only") },
-{ PN_PROCESS_PRIVATE_READWRITE,        0, TEXT("Reserved Space Read/Write") },
-{ PN_PROCESS_PRIVATE_WRITECOPY,        0, TEXT("Reserved Space Write Copy") },
-{ PN_PROCESS_PRIVATE_EXECUTABLE,       0, TEXT("Reserved Space Executable") },
-{ PN_PROCESS_PRIVATE_EXE_READONLY,     0, TEXT("Reserved Space Exec Read Only") },
-{ PN_PROCESS_PRIVATE_EXE_READWRITE,    0, TEXT("Reserved Space Exec Read/Write") },
-{ PN_PROCESS_PRIVATE_EXE_WRITECOPY,    0, TEXT("Reserved Space Exec Write Copy") },
-{ PN_PROCESS_MAPPED_NOACCESS,          0, TEXT("Mapped Space No Access") },
-{ PN_PROCESS_MAPPED_READONLY,          0, TEXT("Mapped Space Read Only") },
-{ PN_PROCESS_MAPPED_READWRITE,         0, TEXT("Mapped Space Read/Write") },
-{ PN_PROCESS_MAPPED_WRITECOPY,         0, TEXT("Mapped Space Write Copy") },
-{ PN_PROCESS_MAPPED_EXECUTABLE,        0, TEXT("Mapped Space Executable") },
-{ PN_PROCESS_MAPPED_EXE_READONLY,      0, TEXT("Mapped Space Exec Read Only") },
-{ PN_PROCESS_MAPPED_EXE_READWRITE,     0, TEXT("Mapped Space Exec Read/Write") },
-{ PN_PROCESS_MAPPED_EXE_WRITECOPY,     0, TEXT("Mapped Space Exec Write Copy") },
-{ PN_PROCESS_IMAGE_NOACCESS,           0, TEXT("Image Space No Access") },
-{ PN_PROCESS_IMAGE_READONLY,           0, TEXT("Image Space Read Only") },
-{ PN_PROCESS_IMAGE_READWRITE,          0, TEXT("Image Space Read/Write") },
-{ PN_PROCESS_IMAGE_WRITECOPY,          0, TEXT("Image Space Write Copy") },
-{ PN_PROCESS_IMAGE_EXECUTABLE,         0, TEXT("Image Space Executable") },
-{ PN_PROCESS_IMAGE_EXE_READONLY,       0, TEXT("Image Space Exec Read Only") },
-{ PN_PROCESS_IMAGE_EXE_READWRITE,      0, TEXT("Image Space Exec Read/Write") },
-{ PN_PROCESS_IMAGE_EXE_WRITECOPY,      0, TEXT("Image Space Exec Write Copy") },
-{ 0,                                   0, 0 },
-};
-
-#define NENTRIES ((sizeof(entries) / sizeof(entry_t)) - 1)
-
-static int
-key_for_index(int key)
-{
-    entry_t* entry = entries + NENTRIES / 2;
-    unsigned int step = 64 / 4; // XXX
-
-    while (step) {
-        if (key < entry->e_key)
-            entry -= step;
-        else if (key > entry->e_key)
-            entry += step;
-
-        if (key == entry->e_key)
-            return entry->e_index;
-
-        step >>= 1;
-    }
-
-    assert(false);
-    return 0;
-}
-
-
-class auto_hkey {
-protected:
-    HKEY hkey;
-
-    HKEY* begin_assignment() {
-        if (hkey) {
-            ::RegCloseKey(hkey);
-            hkey = 0;
-        }
-        return &hkey;
-    }
-
-public:
-    auto_hkey() : hkey(0) {}
-    ~auto_hkey() { ::RegCloseKey(hkey); }
-    
-    HKEY get() const { return hkey; }
-    operator HKEY() const { return get(); }
-
-    friend HKEY*
-    getter_Acquires(auto_hkey& hkey);
-};
-
-static HKEY*
-getter_Acquires(auto_hkey& hkey)
-{
-    return hkey.begin_assignment();
-}
-
-
-static int
-get_perf_titles(char*& buffer, char**& titles, int& last_title_index)
-{
-    DWORD result;
-
-    // Open the perflib key to find out the last counter's index and
-    // system version.
-    auto_hkey perflib_hkey;
-    result = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                            TEXT("software\\microsoft\\windows nt\\currentversion\\perflib"),
-                            0,
-                            KEY_READ,
-                            getter_Acquires(perflib_hkey));
-
-    if (result != ERROR_SUCCESS)
-        return result;
-
-    // Get the last counter's index so we know how much memory to
-    // allocate for titles
-    DWORD data_size = sizeof(DWORD);
-    DWORD type;
-    result = ::RegQueryValueEx(perflib_hkey,
-                               TEXT("Last Counter"),
-                               0,
-                               &type,
-                               reinterpret_cast<BYTE*>(&last_title_index),
-                               &data_size);
-
-    if (result != ERROR_SUCCESS)
-        return result;
-
-    // Find system version, for system earlier than 1.0a, there's no
-    // version value.
-    int version;
-    result = ::RegQueryValueEx(perflib_hkey,
-                               TEXT("Version"),
-                               0,
-                               &type,
-                               reinterpret_cast<BYTE*>(&version),
-                               &data_size);
-
-    bool is_nt_10 = (result == ERROR_SUCCESS);
-
-    // Now, get ready for the counter names and indexes.
-    char* counter_value_name;
-    auto_hkey counter_autohkey;
-    HKEY counter_hkey;
-    if (is_nt_10) {
-        // NT 1.0, so make hKey2 point to ...\perflib\009 and get
-        //  the counters from value "Counters"
-        counter_value_name = TEXT("Counters");
-        result = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                                TEXT("software\\microsoft\\windows nt\\currentversion\\perflib\\009"),
-                                0,
-                                KEY_READ,
-                                getter_Acquires(counter_autohkey));
-
-        if (result != ERROR_SUCCESS)
-            return result;
-
-        counter_hkey = counter_autohkey;
-    }
-    else {
-        // NT 1.0a or later.  Get the counters in key HKEY_PERFORMANCE_KEY
-        //  and from value "Counter 009"
-        counter_value_name = TEXT("Counter 009");
-        counter_hkey = HKEY_PERFORMANCE_DATA;
-    }
-
-    // Find out the size of the data.
-    result = ::RegQueryValueEx(counter_hkey,
-                               counter_value_name,
-                               0,
-                               &type,
-                               0,
-                               &data_size);
-
-    if (result != ERROR_SUCCESS)
-        return result;
-
-    // Allocate memory
-    buffer = new char[data_size];
-    titles = new char*[last_title_index + 1];
-    for (int i = 0; i <= last_title_index; ++i)
-        titles[i] = 0;
-
-    // Query the data
-    result = ::RegQueryValueEx(counter_hkey,
-                               counter_value_name,
-                               0,
-                               &type,
-                               reinterpret_cast<BYTE*>(buffer),
-                               &data_size);
-    if (result != ERROR_SUCCESS)
-        return result;
-
-    // Setup the titles array of pointers to point to beginning of
-    // each title string.
-    char* title = buffer;
-    int len;
-
-    while (len = lstrlen(title)) {
-        int index = atoi(title);
-        title += len + 1;
-
-        if (index <= last_title_index)
-            titles[index] = title;
-
-#ifdef DEBUG
-        printf("%d=%s\n", index, title);
-#endif
-
-        title += lstrlen(title) + 1;
-    }
-
-    return ERROR_SUCCESS;
-}
-
-static void
-init_entries()
-{
-    char* buffer;
-    char** titles;
-    int last = 0;
-
-    DWORD result = get_perf_titles(buffer, titles, last);
-
-    assert(result == ERROR_SUCCESS);
-
-    for (entry_t* entry = entries; entry->e_key != 0; ++entry) {
-        for (int index = 0; index <= last; ++index) {
-            if (titles[index] && 0 == lstrcmpi(titles[index], entry->e_title)) {
-                entry->e_index = index;
-                break;
-            }
-        }
-
-        if (entry->e_index == 0) {
-            fprintf(stderr, "warning: unable to find index for ``%s''\n", entry->e_title);
-        }
-    }
-
-    delete[] buffer;
-    delete[] titles;
-}
-
-
-
-static DWORD
-get_perf_data(HKEY perf_hkey, char* object_index, PERF_DATA_BLOCK** data, DWORD* size)
-{
-    if (! *data)
-        *data = reinterpret_cast<PERF_DATA_BLOCK*>(new char[*size]);
-
-    DWORD result;
-
-    while (1) {
-        DWORD type;
-        DWORD real_size = *size;
-
-        result = ::RegQueryValueEx(perf_hkey,
-                                   object_index,
-                                   0,
-                                   &type,
-                                   reinterpret_cast<BYTE*>(*data),
-                                   &real_size);
-
-        if (result != ERROR_MORE_DATA)
-            break;
-
-        delete[] *data;
-        *size += 1024;
-        *data = reinterpret_cast<PERF_DATA_BLOCK*>(new char[*size]);
-
-        if (! *data)
-            return ERROR_NOT_ENOUGH_MEMORY;
-    }
-
-    return result;
-}
-
-
-static const PERF_OBJECT_TYPE*
-first_object(const PERF_DATA_BLOCK* data)
-{
-    return data
-        ? reinterpret_cast<const PERF_OBJECT_TYPE*>(reinterpret_cast<const char*>(data) + data->HeaderLength)
-        : 0;
-}
-
-static const PERF_OBJECT_TYPE*
-next_object(const PERF_OBJECT_TYPE* object)
-{
-    return object
-        ? reinterpret_cast<const PERF_OBJECT_TYPE*>(reinterpret_cast<const char*>(object) + object->TotalByteLength)
-        : 0;
-}
-
-const PERF_OBJECT_TYPE*
-find_object(const PERF_DATA_BLOCK* data, DWORD index)
-{
-    const PERF_OBJECT_TYPE* object = first_object(data);
-    if (! object)
-        return 0;
-
-    for (int i = 0; i < data->NumObjectTypes; ++i) {
-        if (object->ObjectNameTitleIndex == index)
-            return object;
-
-        object = next_object(object);
-    }
-
-    return 0;
-}
-
-
-static const PERF_COUNTER_DEFINITION*
-first_counter(const PERF_OBJECT_TYPE* object)
-{
-    return object
-        ? reinterpret_cast<const PERF_COUNTER_DEFINITION*>(reinterpret_cast<const char*>(object) + object->HeaderLength)
-        : 0;
-}
-
-static const PERF_COUNTER_DEFINITION*
-next_counter(const PERF_COUNTER_DEFINITION* counter)
-{
-    return counter ?
-        reinterpret_cast<const PERF_COUNTER_DEFINITION*>(reinterpret_cast<const char*>(counter) + counter->ByteLength)
-        : 0;
-}
-
-
-static const PERF_COUNTER_DEFINITION*
-find_counter(const PERF_OBJECT_TYPE* object, int index)
-{
-    const PERF_COUNTER_DEFINITION* counter =
-        first_counter(object);
-
-    if (! counter)
-        return 0;
-
-    for (int i; i < object->NumCounters; ++i) {
-        if (counter->CounterNameTitleIndex == index)
-            return counter;
-
-        counter = next_counter(counter);
-    }
-
-    return 0;
-}
-
-
-static const PERF_INSTANCE_DEFINITION*
-first_instance(const PERF_OBJECT_TYPE* object)
-{
-    return object
-        ? reinterpret_cast<const PERF_INSTANCE_DEFINITION*>(reinterpret_cast<const char*>(object) + object->DefinitionLength)
-        : 0;
-}
-
-
-static const PERF_INSTANCE_DEFINITION*
-next_instance(const PERF_INSTANCE_DEFINITION* instance)
-{
-    if (instance) {
-        const PERF_COUNTER_BLOCK* counter_block =
-            reinterpret_cast<const PERF_COUNTER_BLOCK*>(reinterpret_cast<const char*>(instance) + instance->ByteLength);
-
-        return reinterpret_cast<const PERF_INSTANCE_DEFINITION*>(reinterpret_cast<const char*>(counter_block) + counter_block->ByteLength);
-    }
-    else {
-        return 0;
-    }
-}
-
-
-static const wchar_t*
-instance_name(const PERF_INSTANCE_DEFINITION* instance)
-{
-    return instance
-        ? reinterpret_cast<const wchar_t*>(reinterpret_cast<const char*>(instance) + instance->NameOffset)
-        : 0;
-}
-
-
-static const void*
-counter_data(const PERF_INSTANCE_DEFINITION* instance,
-             const PERF_COUNTER_DEFINITION* counter)
-{
-    if (counter && instance) {
-        const PERF_COUNTER_BLOCK* counter_block; 
-        counter_block = reinterpret_cast<const PERF_COUNTER_BLOCK*>(reinterpret_cast<const char*>(instance) + instance->ByteLength);
-        return reinterpret_cast<const char*>(counter_block) + counter->CounterOffset;
-    }
-    else {
-        return 0;
-    }
-}
-
-
-static bool
-list_process(PERF_DATA_BLOCK* perf_data, wchar_t* process_name)
-{
-    const PERF_OBJECT_TYPE* process = find_object(perf_data, key_for_index(PN_PROCESS));
-    const PERF_COUNTER_DEFINITION* working_set      = find_counter(process, key_for_index(PN_PROCESS_WORKING_SET));
-    const PERF_COUNTER_DEFINITION* peak_working_set = find_counter(process, key_for_index(PN_PROCESS_PEAK_WS));
-    const PERF_COUNTER_DEFINITION* private_page     = find_counter(process, key_for_index(PN_PROCESS_PRIVATE_PAGE));
-    const PERF_COUNTER_DEFINITION* virtual_size     = find_counter(process, key_for_index(PN_PROCESS_VIRTUAL_SIZE));
-
-    const PERF_INSTANCE_DEFINITION* instance = first_instance(process);
-    int index = 0;
-
-    bool found = false;
-
-    while (instance && index < process->NumInstances) {
-        const wchar_t* name = instance_name(instance);
-        if (lstrcmpW(process_name, name) == 0) {
-            printf("%d %d %d %d\n",
-                   *(static_cast<const int*>(counter_data(instance, working_set))),
-                   *(static_cast<const int*>(counter_data(instance, peak_working_set))),
-                   *(static_cast<const int*>(counter_data(instance, private_page))),
-                   *(static_cast<const int*>(counter_data(instance, virtual_size))));
-
-            found = true;
-        }
-
-        instance = next_instance(instance);
-        ++index;
-    }
-
-    if (found) {
-#if 0
-        // Dig up address space data.
-        PERF_OBJECT_TYPE* address_space = FindObject(costly_data, PX_PROCESS_ADDRESS_SPACE);
-        PERF_COUNTER_DEFINITION* image_executable = FindCounter(process, PX_PROCESS_IMAGE_EXECUTABLE);
-        PERF_COUNTER_DEFINITION* image_exe_readonly = FindCounter(process, PX_PROCESS_IMAGE_EXE_READONLY);
-        PERF_COUNTER_DEFINITION* image_exe_readwrite = FindCounter(process, PX_PROCESS_IMAGE_EXE_READWRITE);
-        PERF_COUNTER_DEFINITION* image_exe_writecopy = FindCounter(process, PX_PROCESS_IMAGE_EXE_WRITECOPY);
-#endif
-    }
-
-    return found;
-}
-
-
-int
-main(int argc, char* argv[])
-{
-    wchar_t process_name[32];
-
-    int interval = 10000; // msec
-
-    int i = 0;
-    while (++i < argc) {
-        if (argv[i][0] != '-')
-            break;
-
-        switch (argv[i][1]) {
-        case 'i':
-            interval = atoi(argv[++i]) * 1000;
-            break;
-            
-        default:
-            fprintf(stderr, "unknown option `%c'\n", argv[i][1]);
-            exit(1);
-        }
-    }
-
-    if (argv[i]) {
-        char* p = argv[i];
-        wchar_t* q = process_name;
-        while (*q++ = wchar_t(*p++))
-            continue;
-    }
-    else {
-        fprintf(stderr, "no image name specified\n");
-        exit(1);
-    }
-
-    init_entries();
-
-    PERF_DATA_BLOCK* perf_data = 0;
-    PERF_DATA_BLOCK* costly_data = 0;
-    DWORD perf_data_size = 50 * 1024;
-    DWORD costly_data_size = 100 * 1024;
-
-    do {
-        char buf[64];
-        sprintf(buf, "%ld %ld",
-                key_for_index(PN_PROCESS),
-                key_for_index(PN_THREAD));
-
-        get_perf_data(HKEY_PERFORMANCE_DATA, buf, &perf_data, &perf_data_size);
-
-#if 0
-        sprintf(buf, "%ld %ld %ld",
-                key_for_index(PN_PROCESS_ADDRESS_SPACE),
-                key_for_index(PN_IMAGE),
-                key_for_index(PN_THREAD_DETAILS));
-
-        get_perf_data(HKEY_PERFORMANCE_DATA, buf, &costly_data, &costly_data_size);
-#endif
-
-        if (! list_process(perf_data, process_name))
-            break;
-
-        _sleep(interval);
-    } while (1);
-
-    return 0;
-}
-