home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
-
- #ifndef __XPTRACKER__
- #define __XPTRACKER__
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #define kStackDepth 23
- #define kBlockTagStringLength 750
-
-
- // Block State
- enum {
- kBlockFree = 0,
- kBlockAllocated = 1
- };
-
- /*
- * Binary Log tags
- */
-
- #define kSET_BLOCK_LIST 'setb'
- #define kALLOCATION_SITE_LIST 'allc'
- #define kSIZE_HISTOGRAM 'shst'
-
- /* a log header */
- typedef struct LogHeader {
- unsigned long logTag;
- unsigned long logSize;
- } LogHeader;
-
- /* a single entry in an allocation site binary log */
- typedef struct AllocationSiteLogEntry {
- unsigned long currentBlocks;
- unsigned long currentMemUsed;
- unsigned long maxMemUsed;
- unsigned long maxBlocks;
- unsigned long totalBlocks;
- unsigned long totalMemUsed;
- unsigned long tag;
- char stackNames[ kBlockTagStringLength ];
- } AllocationSiteLogEntry;
-
- typedef struct AllocationSiteLog {
- LogHeader header;
- unsigned long numEntries;
- AllocationSiteLogEntry log[];
- } AllocationSiteLog;
-
- /* single entry in a allocation set log */
- typedef struct AllocationSetLogEntry {
- unsigned long address;
- unsigned long blockNumber;
- unsigned long size;
- unsigned long siteIndex;
- unsigned char blockState;
- unsigned char overhead;
- unsigned char pad[ 2 ];
- } AllocationSetLogEntry;
-
- typedef struct AllocationSetLog {
- LogHeader header;
- unsigned long numEntries;
- unsigned long totalAllocation;
- unsigned long currentAllocation;
- unsigned long maxAllocation;
- char name[ 256 ];
- AllocationSetLogEntry log[];
- } AllocationSetLog;
-
- /* histogram log */
- #define kMaxRecordedSize 256
- #define kNumHistogramEntries ((kMaxRecordedSize / 4) + 2)
- #define CONVERT_SIZE_TO_INDEX(s) ((s) > kMaxRecordedSize ? (kNumHistogramEntries - 1) : ((s) + 3) >> 2)
-
- typedef struct HistogramLogEntry {
- UInt32 total;
- UInt32 max;
- UInt32 current;
- } HistogramLogEntry;
-
- typedef struct HistogramLog {
- LogHeader header;
- HistogramLogEntry count[ kNumHistogramEntries ];
- } HistogramLog;
-
- /*
- * Routines to initialize the memory tracker
- */
- void InitializeMemoryTracker ( void );
- void ExitMemoryTracker ( void );
- void DumpMemoryTrackerState ( void );
- void DumpAllocationSites ( void );
-
- void DisableMemoryTracker ( void );
- void EnableMemoryTracker ( void );
-
- /*
- * Decoder Function. This function is called with the data attached to
- * an active block when the log is being written out. resultString points
- * at a string of length kBlockTagStringLength.
- */
- typedef void (*DecoderProc) ( void ** data, char * resultString );
-
- /*
- * Call this function to set the decoder proc for a given data tag.
- * The most common thing here will be a stack crawl decoder that will
- * convert an array of address to a list of function names and offsets
- */
- void SetTrackerDataDecoder ( UInt32 tag, DecoderProc proc );
-
-
- /*
- * Call these functions to add a new item to be tracked and then release it later
- */
- void TrackItem ( void * address, size_t blockSize, size_t overhead, UInt32 tag,
- void * decoderData );
- void ReleaseItem ( void * address );
-
-
- /*
- * Allocation Sets.
- */
- typedef struct AllocationSet AllocationSet;
-
- /* Options */
- enum {
- kTrackAllBlocks = 0x00000001,
- kKeepFreeBlocks = 0x00000002
- };
-
- AllocationSet * NewAllocationSet ( unsigned long trackingOptions, char * name );
- void DisposeAllocationSet ( AllocationSet * set );
- void LogAllocationSetState ( AllocationSet * set );
- void EnableAllocationSet ( AllocationSet * set );
- void DisableAllocationSet ( AllocationSet * set );
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __XPTRACKER__ */
-