gecko/tools/trace-malloc/stoptions.h

337 lines
14 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is stoptions.h code, released
* May 7, 2002.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2002
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Garrett Arch Blythe, 07-May-2002
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/*
** stoptions.h
**
** Abstract the spacetrace options into a reusable format, such that
** many different pieces of the code can utilize the common list.
*/
/*
** There are three types of options.
** The destinction is quite important.
**
** CMD options are accessible from only the comamnd line.
** Such options should be considered global/static for the entire
** run of the application.
** Once set, no one can change these options during the run.
**
** WEB options are accessible from the web server options page.
** Such options can and will be changed on a per user basis during
** the run of the application.
** You should NEVER make an option a WEB only option, as this will
** break batch mode processing, and will likely not correctly
** define the options structure itself.
** These options will control the data caching used in the application
** to match a client to a cache of data.
**
** ALL options are both CMD and WEB options, with the properties of WEB
** options (the user will change these on a per client basis).
** Most likely this is the type of option you will desire to create.
*/
/*
** All types of options have some combination of the following elements:
**
** option_name The name of the option.
** option_genre Area the option effects; STOptionGenre.
** default_value The default value for the option.
** array_size Used to size a string array.
** multiplier Some numbers prefer conversion.
** option_help Help text to explain the option.
**
** NOTE! that the multiplier should be applied to the default value if you
** are going to assign the default_value into anything.
**
** Be very aware that adding things to a particular genre, or adding a genre,
** may completely screw up the caching algorithms of SpaceTrace.
** See contextLookup() or ask someone that knows if you are in doubt.
**
** The actual definition of the WEB and CMD macros however is left to the
** end user.
** We cover those that you do not define herein.
*/
#if !defined(ST_CMD_OPTION_BOOL)
#define ST_CMD_OPTION_BOOL(option_name, option_genre, option_help)
#endif
#if !defined(ST_WEB_OPTION_BOOL)
#define ST_WEB_OPTION_BOOL(option_name, option_genre, option_help)
#endif
#if !defined(ST_CMD_OPTION_STRING)
#define ST_CMD_OPTION_STRING(option_name, option_genre, default_value, option_help)
#endif
#if !defined(ST_WEB_OPTION_STRING)
#define ST_WEB_OPTION_STRING(option_name, option_genre, default_value, option_help)
#endif
#if !defined(ST_CMD_OPTION_STRING_ARRAY)
#define ST_CMD_OPTION_STRING_ARRAY(option_name, option_genre, array_size, option_help)
#endif
#if !defined(ST_WEB_OPTION_STRING_ARRAY)
#define ST_WEB_OPTION_STRING_ARRAY(option_name, option_genre, array_size, option_help)
#endif
#if !defined(ST_CMD_OPTION_STRING_PTR_ARRAY)
#define ST_CMD_OPTION_STRING_PTR_ARRAY(option_name, option_genre, option_help)
#endif
#if !defined(ST_WEB_OPTION_STRING_PTR_ARRAY)
#define ST_WEB_OPTION_STRING_PTR_ARRAY(option_name, option_genre, option_help)
#endif
#if !defined(ST_CMD_OPTION_UINT32)
#define ST_CMD_OPTION_UINT32(option_name, option_genre, default_value, multiplier, option_help)
#endif
#if !defined(ST_WEB_OPTION_UINT32)
#define ST_WEB_OPTION_UINT32(option_name, option_genre, default_value, multiplier, option_help)
#endif
#if !defined(ST_CMD_OPTION_UINT64)
#define ST_CMD_OPTION_UINT64(option_name, option_genre, default_value, multiplier, option_help)
#endif
#if !defined(ST_WEB_OPTION_UINT64)
#define ST_WEB_OPTION_UINT64(option_name, option_genre, default_value, multiplier, option_help)
#endif
/*
** ALL macros expand to both CMD and WEB macros.
** This basically means such options are accessible from both the command
** line and from the web options.
*/
#define ST_ALL_OPTION_BOOL(option_name, option_genre, option_help) \
ST_CMD_OPTION_BOOL(option_name, option_genre, option_help) \
ST_WEB_OPTION_BOOL(option_name, option_genre, option_help)
#define ST_ALL_OPTION_STRING(option_name, option_genre, default_value, option_help) \
ST_CMD_OPTION_STRING(option_name, option_genre, default_value, option_help) \
ST_WEB_OPTION_STRING(option_name, option_genre, default_value, option_help)
#define ST_ALL_OPTION_STRING_ARRAY(option_name, option_genre, array_size, option_help) \
ST_CMD_OPTION_STRING_ARRAY(option_name, option_genre, array_size, option_help) \
ST_WEB_OPTION_STRING_ARRAY(option_name, option_genre, array_size, option_help)
#define ST_ALL_OPTION_STRING_PTR_ARRAY(option_name, option_genre, option_help) \
ST_CMD_OPTION_STRING_PTR_ARRAY(option_name, option_genre, option_help) \
ST_WEB_OPTION_STRING_PTR_ARRAY(option_name, option_genre, option_help)
#define ST_ALL_OPTION_UINT32(option_name, option_genre, default_value, multiplier, option_help) \
ST_CMD_OPTION_UINT32(option_name, option_genre, default_value, multiplier, option_help) \
ST_WEB_OPTION_UINT32(option_name, option_genre, default_value, multiplier, option_help)
#define ST_ALL_OPTION_UINT64(option_name, option_genre, default_value, multiplier, option_help) \
ST_CMD_OPTION_UINT64(option_name, option_genre, default_value, multiplier, option_help) \
ST_WEB_OPTION_UINT64(option_name, option_genre, default_value, multiplier, option_help)
/****************************************************************************
** BEGIN, THE OPTIONS
**
** Order is somewhat relevant in that it will control 3 different things:
** 1) The order the members will be in the options structure.
** 2) The order the options are presented on the command line.
** 3) The order the options are presented on the web options page.
*/
ST_ALL_OPTION_STRING(CategoryName,
CategoryGenre,
ST_ROOT_CATEGORY_NAME,
"Specify a category for reports to focus upon.\n"
"See http://lxr.mozilla.org/mozilla/source/tools/trace-malloc/rules.txt\n")
ST_ALL_OPTION_UINT32(OrderBy,
DataSortGenre,
ST_SIZE, /* for dp :-D */
1,
"Determine the sort order.\n"
"0 by weight (size * lifespan).\n"
"1 by size.\n"
"2 by lifespan.\n"
"3 by allocation count.\n"
"4 by performance cost.\n")
ST_ALL_OPTION_STRING_ARRAY(RestrictText,
DataSetGenre,
ST_SUBSTRING_MATCH_MAX,
"Exclude allocations which do not have this text in their backtrace.\n"
"Multiple restrictions are treated as a logical AND operation.\n")
ST_ALL_OPTION_UINT32(SizeMin,
DataSetGenre,
0,
1,
"Exclude allocations that are below this byte size.\n")
ST_ALL_OPTION_UINT32(SizeMax,
DataSetGenre,
0xFFFFFFFF,
1,
"Exclude allocations that are above this byte size.\n")
ST_ALL_OPTION_UINT32(LifetimeMin,
DataSetGenre,
ST_DEFAULT_LIFETIME_MIN,
ST_TIMEVAL_RESOLUTION,
"Allocations must live this number of seconds or be ignored.\n")
ST_ALL_OPTION_UINT32(LifetimeMax,
DataSetGenre,
ST_TIMEVAL_MAX / ST_TIMEVAL_RESOLUTION,
ST_TIMEVAL_RESOLUTION,
"Allocations living longer than this number of seconds will be ignored.\n")
ST_ALL_OPTION_UINT32(TimevalMin,
DataSetGenre,
0,
ST_TIMEVAL_RESOLUTION,
"Allocations existing solely before this second will be ignored.\n"
"Live allocations at this second and after can be considered.\n")
ST_ALL_OPTION_UINT32(TimevalMax,
DataSetGenre,
ST_TIMEVAL_MAX / ST_TIMEVAL_RESOLUTION,
ST_TIMEVAL_RESOLUTION,
"Allocations existing solely after this second will be ignored.\n"
"Live allocations at this second and before can be considered.\n")
ST_ALL_OPTION_UINT32(AllocationTimevalMin,
DataSetGenre,
0,
ST_TIMEVAL_RESOLUTION,
"Live and dead allocations created before this second will be ignored.\n")
ST_ALL_OPTION_UINT32(AllocationTimevalMax,
DataSetGenre,
ST_TIMEVAL_MAX / ST_TIMEVAL_RESOLUTION,
ST_TIMEVAL_RESOLUTION,
"Live and dead allocations created after this second will be ignored.\n")
ST_ALL_OPTION_UINT32(AlignBy,
DataSizeGenre,
ST_DEFAULT_ALIGNMENT_SIZE,
1,
"All allocation sizes are made to be a multiple of this number.\n"
"Closer to actual heap conditions; set to 1 for true sizes.\n")
ST_ALL_OPTION_UINT32(Overhead,
DataSizeGenre,
ST_DEFAULT_OVERHEAD_SIZE,
1,
"After alignment, all allocations are made to increase by this number.\n"
"Closer to actual heap conditions; set to 0 for true sizes.\n")
ST_ALL_OPTION_UINT32(ListItemMax,
UIGenre,
500,
1,
"Specifies the maximum number of list items to present in each list.\n")
ST_ALL_OPTION_UINT64(WeightMin,
DataSetGenre,
LL_INIT(0, 0),
LL_INIT(0, 1),
"Exclude allocations that are below this weight (lifespan * size).\n")
ST_ALL_OPTION_UINT64(WeightMax,
DataSetGenre,
LL_INIT(0xFFFFFFFF, 0xFFFFFFFF),
LL_INIT(0, 1),
"Exclude allocations that are above this weight (lifespan * size).\n")
ST_CMD_OPTION_STRING(FileName,
DataSetGenre,
"-",
"Specifies trace-malloc input file.\n"
"\"-\" indicates stdin will be used as input.\n")
ST_CMD_OPTION_STRING(CategoryFile,
CategoryGenre,
"rules.txt",
"Specifies the category rules file.\n"
"This file contains rules about how to categorize allocations.\n")
ST_CMD_OPTION_UINT32(HttpdPort,
ServerGenre,
1969,
1,
"Specifies the default port the web server will listen on.\n")
ST_CMD_OPTION_STRING(OutputDir,
BatchModeGenre,
".",
"Specifies a directory to output batch mode requests.\n"
"The directory must exist and must not use a trailing slash.\n")
ST_CMD_OPTION_STRING_PTR_ARRAY(BatchRequest,
BatchModeGenre,
"This implicitly turns on batch mode.\n"
"Save each requested file into the output dir, then exit.\n")
ST_CMD_OPTION_UINT32(Contexts,
ServerGenre,
1,
1,
"How many configurations to cache at the cost of a lot of memory.\n"
"Dedicated servers can cache more client configurations for performance.\n")
ST_CMD_OPTION_BOOL(Help,
UIGenre,
"Show command line help.\n"
"See http://www.mozilla.org/projects/footprint/spaceTrace.html\n")
/*
** END, THE OPTIONS
****************************************************************************/
/*
** Everything is undefined after the header is included.
** This sets it up for multiple inclusion if so desired.
*/
#undef ST_ALL_OPTION_BOOL
#undef ST_CMD_OPTION_BOOL
#undef ST_WEB_OPTION_BOOL
#undef ST_ALL_OPTION_STRING
#undef ST_CMD_OPTION_STRING
#undef ST_WEB_OPTION_STRING
#undef ST_ALL_OPTION_STRING_ARRAY
#undef ST_CMD_OPTION_STRING_ARRAY
#undef ST_WEB_OPTION_STRING_ARRAY
#undef ST_ALL_OPTION_STRING_PTR_ARRAY
#undef ST_CMD_OPTION_STRING_PTR_ARRAY
#undef ST_WEB_OPTION_STRING_PTR_ARRAY
#undef ST_ALL_OPTION_UINT32
#undef ST_CMD_OPTION_UINT32
#undef ST_WEB_OPTION_UINT32
#undef ST_ALL_OPTION_UINT64
#undef ST_CMD_OPTION_UINT64
#undef ST_WEB_OPTION_UINT64