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 225488 332966bc7aa2b5da5442935968a22cfa17209f37
parent 225487 19a3b5083aaa874c76dfd575cdd4fd8dbe2a580b
child 225489 43f4a2c51d8aafb71fef6f90dc40532319219e17
push id7107
push userraliiev@mozilla.com
push dateMon, 13 Oct 2014 17:43:31 +0000
treeherdermozilla-aurora@b4b34e0acc75 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdbaron
bugs1080291
milestone35.0a1
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;
-}
-