# Categorization rules for spacetrace
#
# This file defines the stack frame rules that will categorize
# allocations that spacetrace processes. The format of this file is
#
#       <categoryname>
#       initial string match for stack frame n
#       initial string match for stack frame n+1
#       initial string match for stack frame n+2
#
# The key in the matching rule is that for every rule, we provide a
# snippet of the stack frame - contiguous substring matches.
# categorynames and rules substring matches are case sensitive
#
# Predefined Categories
# "All"           - All allocations [default]
# "uncategorized" - All allocations that don't match any category
#
#
# Suresh Duddi <dp@netscape.com>
###########################################################################
# NOTE: This is still under definition
###########################################################################
# General principle of categorization:
#
# - Each category, in general, denotes a module or feature.
#
# - We assign each allocation to the module/feature that directly
#   caused the allocation irrespective of which higher level module
#   caused the allocation. There are very few exceptions usually when
#   an allocation belongs both to a feature-category and to a
#   module-category.
#
# bookmarks
#       Bookmarks. Mainly initialization. Does not include menu cost.
# css
#       Cascading style sheets
# dom
#       Memory held by DOM.
# font
#       All font stuff
# global-history
# html
#       html parsing and layout
# layout
#       reflow, frames, line, view
# images
#       All images.
# jar
#       jar, zip
# js
#       javascript
# necko
#       All protocol and uri stuff. All urls created accounted here
# preferences
#       Preferences stuff. All js cost for preferences is included here.
## rdf
#       Most of the rdf allocations. rdf cost from xul, chromeregistry,
#       is assigned to xul. 
#
# wallet
#       Form cache.
#
# xbl
#       xbl stuff. Includes js in xbl.
# xpcom
#       xpcom, xpt. Allocations for creations of objects are assigned
#       onto the respective modules 
# xul
#       XUL parsing and layout. Includes rdf overhead from xul like
#       nsChromeRegistry
# 


#

# ===========================================================================
# Leaf rules. We categorize them out first.
# All allocations matching these rules DO belong to the category.
# ===========================================================================

<js>
nsXULPrototypeScript::Deserialize

<X>
XSupportsLocale

<X>
/usr/X11R6/lib/libX11.so

<js>
JS_Init

<atoms>
NS_NewPermanentAtom

<images>
gif_write

<images>
imgRequest::OnDataAvailable

<images>
imgLoader::

<images>
jinit_master_decompress

<images>
jinit_marker_reader

<images>
jinit_marker_decompress

<images>
nsJPEGDecoder::

<images>
nsGIFDecoder2::

<jar>
nsZipArchive::BuildFileList

<jar>
nsZipArchive::ReadInit

<jar>
nsJARChannel::Open

<xpcom>
NS_InitXPCOM2

# xpt file loads
<xpcom>
xptiInterfaceInfoManager::LoadFile

<xpcom>
nsGenericModule::Initialize

<intl>
nsStringBundle

<intl>
nsLocale::

<intl>
nsCharsetConverterManager::

<necko>
nsDiskCacheDevice::Init

<necko>
nsCacheEntryDescriptor::nsTransportWrapper::OpenOutputStream

<necko>
nsSocketTransport::

<necko>
nsCacheService::

<necko>
nsDiskCacheStreamIO::

<necko>
nsHttpResponseHead::

<wallet>
WLLT

<xul>
nsXULElement::Create

<xul>
nsXULAttribute::Create

<xul>
nsXULDocument::AddElementToMap

<xul>
XULContentSinkImpl::AddAttributes

<xul>
XULContentSinkImpl::CreateElement

<xul>
nsXULElement::SetAttr

<xul>
nsXULDocument::InsertElement

<xul>
NS_NewXULContentBuilder

<xul>
nsXULElement::AppendChildTo

<xbl>
nsXBLPrototypeHandler::AppendHandlerText(

<html>
FrameArena::AllocateFrame

<global-history>
nsGlobalHistory::OpenDB

<font>
nsFontCache::

<font>
nsFont::nsFont

<gtk>
gtk_init

<rdf>
RDFServiceImpl::GetResource

<rdf>
RDFContentSinkImpl::AddProperties

<rdf>
RDFContainerImpl::AppendElement

<rdf>
RDFXMLDataSourceImpl::Assert

<rdf>
NS_NewRDFInMemoryDataSource

<css>
CSSLoaderImpl::ParseSheet

<css>
CSSParserImpl::Parse(

<css>
NS_NewCSS

<css>
RuleHash::AppendRule

<css>
nsRuleNode::GetStyleData

<CSS>
SelectorList::

<css>
CSSRuleProcessor::RulesMatching

<css>
CSSStyleSheetImpl::Clone

<necko>
nsHttpHeaderArray::

<html>
nsScanner::Append

<html>
nsHTMLTokenizer::

<html>
NS_NewHTMLTokenizer

<html>
nsSlidingString::

<html>
nsParser::

<html>
nsIParserService::

<html>
nsCParserNode::

<html>
CNavDTD::CNavDTD

<html>
nsHTMLDocument::

<layout>
IncrementalReflow::AddCommand

<layout>
nsBlockFrame::

<layout>
nsBoxFrame::

<layout>
nsImageFrame::

<layout>
nsInlineFrame::

<layout>
nsLeafFrame::

<layout>
nsLineLayout::

<layout>
nsReflowPath::EnsureSubtreeFor

<layout>
nsSliderFrame::

<layout>
nsScrollBoxFrame::

<layout>
nsTextFrame::

<layout>
nsTableRowFrame::

<layout>
nsTableRowGroupFrame::

<layout>
nsViewManager::

<layout>
PresShell::ProcessReflowCommands


# ======================================================================
# Rules that match higher up on the stack
# These go later.
# ======================================================================

<preferences>
PREF_

<bookmarks>
nsBookmarksService::

<xbl>
nsXBLService::LoadBindings

<xbl>
nsXBLBinding::ExecuteAttachedHandler

<js>
nsXULDocument::LoadScript

<js>
nsXULDocument::ExecuteScript

<xul>
XULContentSinkImpl::Open

<rdf>
RDFContentSinkImpl::HandleEndElement

<html>
HTMLContentSink::AddAttributes

<html>
HTMLContentSink::OpenContainer

<html>
HTMLContentSink::CloseContainer

# XXX whom to account LoadImage to? I am going with images.
<images>
imgLoader::LoadImage

<html>
StackArena::

# ======================================================================
# Even more genralized rules. There could be lots of activity that
# happens below them in the stack. But we are sure we have categorized
# a lot of them by using the rules above and know the category of the
# most of the rest.
# ======================================================================

<rdf>
RDFContentSinkImpl::

<dom>
nsGenericDOMDataNode::

<dom>
nsDOMClassInfo::

<dom>
nsDOMSOFactory::

<xul>
nsXULTemplateBuilder::

<xul>
XULContentSinkImpl::HandleEndElement

<xul>
nsChromeRegistry::

<js>
nsJSContext::EvaluateString

# Almost all of what is left with XULContentSink belongs to xul
# Also, this was roughly 0.3% of startup memory
<xul>
XULContentSinkImpl::

# XXX this is a wild guess -> html What remains here is about
# XXX 1.5% of startup footprint
<html>
HTMLContentSink::

<xbl>
nsXBLContentSink::

<xbl>
nsXBLStreamListener::OnDataAvailable

<necko>
nsIOService::NewURI

<necko>
nsIOService::NewChannelFromURI

<necko>
nsSegmentedBuffer::AppendNewSegment

<necko>
nsHttpChannel::

# Catchalls to help categorize
# ----------------------------------------------------------------------
<js-catchall>
js_

# Everything else
# ----------------------------------------------------------------------
# <uncategorized>
# This is a predefined category. Don't create it yourself.
