Annotation of sbbs/javascript/include/mozilla/nspr/prtrace.h, revision 1.1.1.1

1.1       root        1: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
                      2: /* 
                      3:  * The contents of this file are subject to the Mozilla Public
                      4:  * License Version 1.1 (the "License"); you may not use this file
                      5:  * except in compliance with the License. You may obtain a copy of
                      6:  * the License at http://www.mozilla.org/MPL/
                      7:  * 
                      8:  * Software distributed under the License is distributed on an "AS
                      9:  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
                     10:  * implied. See the License for the specific language governing
                     11:  * rights and limitations under the License.
                     12:  * 
                     13:  * The Original Code is the Netscape Portable Runtime (NSPR).
                     14:  * 
                     15:  * The Initial Developer of the Original Code is Netscape
                     16:  * Communications Corporation.  Portions created by Netscape are 
                     17:  * Copyright (C) 1998-2000 Netscape Communications Corporation.  All
                     18:  * Rights Reserved.
                     19:  * 
                     20:  * Contributor(s):
                     21:  * 
                     22:  * Alternatively, the contents of this file may be used under the
                     23:  * terms of the GNU General Public License Version 2 or later (the
                     24:  * "GPL"), in which case the provisions of the GPL are applicable 
                     25:  * instead of those above.  If you wish to allow use of your 
                     26:  * version of this file only under the terms of the GPL and not to
                     27:  * allow others to use your version of this file under the MPL,
                     28:  * indicate your decision by deleting the provisions above and
                     29:  * replace them with the notice and other provisions required by
                     30:  * the GPL.  If you do not delete the provisions above, a recipient
                     31:  * may use your version of this file under either the MPL or the
                     32:  * GPL.
                     33:  */
                     34: 
                     35: #ifndef prtrace_h___
                     36: #define prtrace_h___
                     37: /*
                     38: ** prtrace.h -- NSPR's Trace Facility.                    
                     39: **                                                                                
                     40: ** The Trace Facility provides a means to trace application                           
                     41: ** program events within a process. When implementing an                          
                     42: ** application program an engineer may insert a "Trace" function                  
                     43: ** call, passing arguments to be traced. The "Trace" function                     
                     44: ** combines the user trace data with identifying data and                         
                     45: ** writes this data in time ordered sequence into a circular                      
                     46: ** in-memory buffer; when the buffer fills, it wraps.
                     47: **                                                                                
                     48: ** Functions are provided to set and/or re-configure the size of                  
                     49: ** the trace buffer, control what events are recorded in the                      
                     50: ** buffer, enable and disable tracing based on specific user                      
                     51: ** supplied data and other control functions. Methods are provided                
                     52: ** to record the trace entries in the in-memory trace buffer to
                     53: ** a file.
                     54: **                                                                                
                     55: ** Tracing may cause a performance degredation to the application                 
                     56: ** depending on the number and placement of calls to the tracing                  
                     57: ** facility. When tracing is compiled in and all tracing is                           
                     58: ** disabled via the runtime controls, the overhead should be                      
                     59: ** minimal. ... Famous last words, eh?                                            
                     60: **                                                                                    
                     61: ** When DEBUG is defined at compile time, the Trace Facility is                    
                     62: ** compiled as part of NSPR and any application using NSPR's                       
                     63: ** header files will have tracing compiled in. When DEBUG is not                   
                     64: ** defined, the Trace Facility is not compiled into NSPR nor                       
                     65: ** exported in its header files.  If the Trace Facility is                         
                     66: ** desired in a non-debug build, then FORCE_NSPR_TRACE may be                      
                     67: ** defined at compile time for both the optimized build of NSPR                    
                     68: ** and the application. NSPR and any application using  NSPR's                     
                     69: ** Trace Facility must be compiled with the same level of trace                    
                     70: ** conditioning or unresolved references may be realized at link                   
                     71: ** time.                                                                           
                     72: **                                                                                 
                     73: ** For any of the Trace Facility methods that requires a trace                     
                     74: ** handle as an input argument, the caller must ensure that the                    
                     75: ** trace handle argument is valid. An invalid trace handle                         
                     76: ** argument may cause unpredictable results.                                       
                     77: **                                                                                 
                     78: ** Trace Facility methods are thread-safe and SMP safe.                            
                     79: **                                                                                 
                     80: ** Users of the Trace Facility should use the defined macros to                     
                     81: ** invoke trace methods, not the function calls directly. e.g.                      
                     82: ** PR_TRACE( h1,0,1,2, ...); not PR_Trace(h1,0,1,2, ...);
                     83: **                                                                                  
                     84: ** Application designers should be aware of the effects of
                     85: ** debug and optimized build differences when using result of the
                     86: ** Trace Facility macros in expressions.
                     87: ** 
                     88: ** See Also: prcountr.h                                                                                 
                     89: **                                                                                  
                     90: ** /lth. 08-Jun-1998.                                                                                  
                     91: */
                     92: 
                     93: #include "prtypes.h"
                     94: #include "prthread.h"
                     95: #include "prtime.h"
                     96: 
                     97: PR_BEGIN_EXTERN_C
                     98: 
                     99: /*
                    100: ** Opaque type for the trace handle 
                    101: ** ... Don't even think about looking in here.
                    102: **
                    103: */
                    104: typedef void *  PRTraceHandle;
                    105: 
                    106: /*
                    107: ** PRTraceEntry -- A trace entry in the in-memory trace buffer
                    108: ** looks like this.
                    109: **
                    110: */
                    111: typedef struct PRTraceEntry
                    112: {
                    113:     PRThread        *thread;        /* The thread creating the trace entry */
                    114:     PRTraceHandle   handle;         /* PRTraceHandle creating the trace entry */
                    115:     PRTime          time;           /* Value of PR_Now() at time of trace entry */
                    116:     PRUint32        userData[8];    /* user supplied trace data */
                    117: } PRTraceEntry;
                    118: 
                    119: /*
                    120: ** PRTraceOption -- command operands to
                    121: ** PR_[Set|Get]TraceOption(). See descriptive meanings there.
                    122: **
                    123: */
                    124: typedef enum PRTraceOption
                    125: {
                    126:     PRTraceBufSize,
                    127:     PRTraceEnable,              
                    128:     PRTraceDisable,
                    129:     PRTraceSuspend,
                    130:     PRTraceResume,
                    131:     PRTraceSuspendRecording,
                    132:     PRTraceResumeRecording,
                    133:     PRTraceLockHandles,
                    134:     PRTraceUnLockHandles,
                    135:     PRTraceStopRecording
                    136: } PRTraceOption;
                    137: 
                    138: /* -----------------------------------------------------------------------
                    139: ** FUNCTION: PR_DEFINE_TRACE() -- Define a PRTraceHandle
                    140: ** 
                    141: ** DESCRIPTION: PR_DEFINE_TRACE() is used to define a trace
                    142: ** handle.
                    143: ** 
                    144: */
                    145: #define PR_DEFINE_TRACE(name) PRTraceHandle name
                    146: 
                    147: /* -----------------------------------------------------------------------
                    148: ** FUNCTION: PR_INIT_TRACE_HANDLE() -- Set the value of a PRTraceHandle
                    149: ** 
                    150: ** DESCRIPTION: 
                    151: ** PR_INIT_TRACE_HANDLE() sets the value of a PRTraceHandle
                    152: ** to value. e.g. PR_INIT_TRACE_HANDLE( myHandle, NULL );
                    153: ** 
                    154: */
                    155: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    156: #define PR_INIT_TRACE_HANDLE(handle,value)\
                    157:     (handle) = (PRCounterHandle)(value)
                    158: #else
                    159: #define PR_INIT_TRACE_HANDLE(handle,value)
                    160: #endif
                    161: 
                    162: 
                    163: /* -----------------------------------------------------------------------
                    164: ** FUNCTION: PR_CreateTrace() -- Create a trace handle
                    165: ** 
                    166: ** DESCRIPTION:
                    167: **  PR_CreateTrace() creates a new trace handle. Tracing is
                    168: **  enabled for this handle when it is created. The trace handle
                    169: **  is intended for use in other Trace Facility calls.
                    170: **  
                    171: **  PR_CreateTrace() registers the QName, RName and description
                    172: **  data so that this data can be retrieved later.
                    173: ** 
                    174: ** INPUTS: 
                    175: **  qName: pointer to string. QName for this trace handle. 
                    176: ** 
                    177: **  rName: pointer to string. RName for this trace handle. 
                    178: ** 
                    179: **  description: pointer to string. Descriptive data about this
                    180: **  trace handle.
                    181: **
                    182: ** OUTPUTS:
                    183: **  Creates the trace handle. 
                    184: **  Registers the QName and RName with the trace facility.
                    185: ** 
                    186: ** RETURNS: 
                    187: **  PRTraceHandle
                    188: ** 
                    189: ** RESTRICTIONS:
                    190: **  qName is limited to 31 characters.
                    191: **  rName is limited to 31 characters.
                    192: **  description is limited to 255 characters.
                    193: ** 
                    194: */
                    195: #define PRTRACE_NAME_MAX 31
                    196: #define PRTRACE_DESC_MAX 255
                    197: 
                    198: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    199: #define PR_CREATE_TRACE(handle,qName,rName,description)\
                    200:     (handle) = PR_CreateTrace((qName),(rName),(description))
                    201: #else
                    202: #define PR_CREATE_TRACE(handle,qName,rName,description)
                    203: #endif
                    204: 
                    205: NSPR_API(PRTraceHandle)
                    206:    PR_CreateTrace( 
                    207:        const char *qName,          /* QName for this trace handle */
                    208:        const char *rName,          /* RName for this trace handle */
                    209:        const char *description     /* description for this trace handle */
                    210: );
                    211: 
                    212: 
                    213: /* -----------------------------------------------------------------------
                    214: ** FUNCTION: PR_DestroyTrace() -- Destroy a trace handle
                    215: ** 
                    216: ** DESCRIPTION: 
                    217: **  PR_DestroyTrace() removes the referenced trace handle and
                    218: ** associated QName, RName and description data from the Trace
                    219: ** Facility.
                    220: ** 
                    221: ** INPUTS: handle. A PRTraceHandle
                    222: ** 
                    223: ** OUTPUTS: 
                    224: **  The trace handle is unregistered.
                    225: **  The QName, RName and description are removed.
                    226: ** 
                    227: ** RETURNS: void
                    228: ** 
                    229: ** RESTRICTIONS:
                    230: ** 
                    231: */
                    232: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    233: #define PR_DESTROY_TRACE(handle)\
                    234:     PR_DestroyTrace((handle))
                    235: #else
                    236: #define PR_DESTROY_TRACE(handle)
                    237: #endif
                    238: 
                    239: NSPR_API(void) 
                    240:    PR_DestroyTrace( 
                    241:        PRTraceHandle handle    /* Handle to be destroyed */
                    242: );
                    243: 
                    244: 
                    245: /* -----------------------------------------------------------------------
                    246: ** FUNCTION: PR_Trace() -- Make a trace entry in the in-memory trace
                    247: ** 
                    248: ** DESCRIPTION:
                    249: ** PR_Trace() makes an entry in the in-memory trace buffer for
                    250: ** the referenced trace handle. The next logically available
                    251: ** PRTraceEntry is used; when the next trace entry would overflow
                    252: ** the trace table, the table wraps.
                    253: **
                    254: ** PR_Trace() for a specific trace handle may be disabled by
                    255: ** calling PR_SetTraceOption() specifying PRTraceDisable for the
                    256: ** trace handle to be disabled.
                    257: ** 
                    258: ** INPUTS:
                    259: ** handle: PRTraceHandle. The trace handle for this trace.
                    260: ** 
                    261: ** userData[0..7]: unsigned 32bit integers. user supplied data
                    262: ** that is copied into the PRTraceEntry
                    263: ** 
                    264: ** OUTPUTS:
                    265: **  A PRTraceEntry is (conditionally) formatted in the in-memory
                    266: ** trace buffer.
                    267: ** 
                    268: ** RETURNS: void.
                    269: ** 
                    270: ** RESTRICTIONS:
                    271: ** 
                    272: */
                    273: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    274: #define PR_TRACE(handle,ud0,ud1,ud2,ud3,ud4,ud5,ud6,ud7)\
                    275:     PR_Trace((handle),(ud0),(ud1),(ud2),(ud3),(ud4),(ud5),(ud6),(ud7))
                    276: #else
                    277: #define PR_TRACE(handle,ud0,ud1,ud2,ud3,ud4,ud5,ud6,ud7)
                    278: #endif
                    279: 
                    280: NSPR_API(void) 
                    281:    PR_Trace( 
                    282:        PRTraceHandle handle,       /* use this trace handle */
                    283:        PRUint32    userData0,      /* User supplied data word 0 */
                    284:        PRUint32    userData1,      /* User supplied data word 1 */
                    285:        PRUint32    userData2,      /* User supplied data word 2 */
                    286:        PRUint32    userData3,      /* User supplied data word 3 */
                    287:        PRUint32    userData4,      /* User supplied data word 4 */
                    288:        PRUint32    userData5,      /* User supplied data word 5 */
                    289:        PRUint32    userData6,      /* User supplied data word 6 */
                    290:        PRUint32    userData7       /* User supplied data word 7 */
                    291: );
                    292: 
                    293: /* -----------------------------------------------------------------------
                    294: ** FUNCTION: PR_SetTraceOption() -- Control the Trace Facility
                    295: ** 
                    296: ** DESCRIPTION:
                    297: ** PR_SetTraceOption() controls the Trace Facility. Depending on
                    298: ** command and value, attributes of the Trace Facility may be
                    299: ** changed.
                    300: ** 
                    301: ** INPUTS:
                    302: **  command: An enumerated value in the set of PRTraceOption.
                    303: **  value: pointer to the data to be set. Type of the data is
                    304: **  dependent on command; for each value of command, the type
                    305: **  and meaning of dereferenced value is shown.
                    306: **
                    307: **  PRTraceBufSize: unsigned long: the size of the trace buffer,
                    308: ** in bytes.
                    309: ** 
                    310: **  PRTraceEnable: PRTraceHandle. The trace handle to be
                    311: ** enabled.
                    312: ** 
                    313: **  PRTraceDisable: PRTraceHandle. The trace handle to be
                    314: ** disabled.
                    315: ** 
                    316: **  PRTraceSuspend: void. value must be NULL. All tracing is
                    317: ** suspended.
                    318: ** 
                    319: **  PRTraceResume: void. value must be NULL. Tracing for all
                    320: ** previously enabled, prior to a PRTraceSuspend, is resumed.
                    321: ** 
                    322: **  PRTraceStopRecording: void. value must be NULL. If recording
                    323: ** (see: ** PR_RecordTraceEntries()) is being done, 
                    324: ** PRTraceStopRecording causes PR_RecordTraceEntries() to return
                    325: ** to its caller. If recording is not being done, this function
                    326: ** has no effect.
                    327: ** 
                    328: **  PRTraceSuspendRecording: void. Must be NULL. If recording is
                    329: ** being done, PRTraceSuspendRecording causes further writes to
                    330: ** the trace file to be suspended. Data in the in-memory
                    331: ** trace buffer that would ordinarily be written to the
                    332: ** trace file will not be written. Trace entries will continue
                    333: ** to be entered in the in-memory buffer. If the Trace Facility
                    334: ** recording is already in a suspended state, the call has no
                    335: ** effect.
                    336: ** 
                    337: **  PRTraceResumeRecording: void. value must be NULL. If
                    338: ** recording for the Trace Facility has been previously been
                    339: ** suspended, this causes recording to resume. Recording resumes
                    340: ** with the next in-memory buffer segment that would be written
                    341: ** if trace recording had not been suspended. If recording is
                    342: ** not currently suspended, the call has no effect.
                    343: ** 
                    344: **  PRTraceLockHandles: void. value must be NULL. Locks the
                    345: ** trace handle lock. While the trace handle lock is held,
                    346: ** calls to PR_CreateTrace() will block until the lock is
                    347: ** released.
                    348: ** 
                    349: **  PRTraceUnlockHandles: void. value must be NULL. Unlocks the
                    350: ** trace handle lock.
                    351: ** 
                    352: ** OUTPUTS:
                    353: **  The operation of the Trace Facility may be changed.
                    354: ** 
                    355: ** RETURNS: void
                    356: ** 
                    357: ** RESTRICTIONS:
                    358: ** 
                    359: */
                    360: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    361: #define PR_SET_TRACE_OPTION(command,value)\
                    362:     PR_SetTraceOption((command),(value))
                    363: #else
                    364: #define PR_SET_TRACE_OPTION(command,value)
                    365: #endif
                    366: 
                    367: NSPR_API(void) 
                    368:    PR_SetTraceOption( 
                    369:        PRTraceOption command,  /* One of the enumerated values */
                    370:        void *value             /* command value or NULL */
                    371: );
                    372: 
                    373: 
                    374: /* -----------------------------------------------------------------------
                    375: ** FUNCTION: PR_GetTraceOption() -- Retrieve settings from the Trace Facility
                    376: ** 
                    377: ** DESCRIPTION:
                    378: ** PR_GetTraceOption() retrieves the current setting of the
                    379: ** Trace Facility control depending on command.
                    380: ** 
                    381: ** 
                    382: **  PRTraceBufSize: unsigned long: the size of the trace buffer,
                    383: ** in bytes.
                    384: ** 
                    385: ** 
                    386: ** INPUTS:
                    387: **  command: one of the enumerated values in PRTraceOptions
                    388: ** valid for PR_GetTraceOption().
                    389: ** 
                    390: ** OUTPUTS:
                    391: **  dependent on command.
                    392: ** 
                    393: ** RETURNS: void
                    394: ** 
                    395: ** RESTRICTIONS:
                    396: ** 
                    397: */
                    398: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    399: #define PR_GET_TRACE_OPTION(command,value)\
                    400:     PR_GetTraceOption((command),(value))
                    401: #else
                    402: #define PR_GET_TRACE_OPTION(command,value)
                    403: #endif
                    404: 
                    405: NSPR_API(void) 
                    406:    PR_GetTraceOption( 
                    407:        PRTraceOption command,  /* One of the enumerated values */
                    408:        void *value             /* command value or NULL */
                    409: );
                    410: 
                    411: /* -----------------------------------------------------------------------
                    412: ** FUNCTION: PR_GetTraceHandleFromName() -- Retrieve an existing
                    413: ** handle by name.
                    414: ** 
                    415: ** DESCRIPTION:
                    416: ** PR_GetTraceHandleFromName() retreives an existing tracehandle
                    417: ** using the name specified by qName and rName.
                    418: ** 
                    419: ** INPUTS:
                    420: **  qName: pointer to string. QName for this trace handle. 
                    421: ** 
                    422: **  rName: pointer to string. RName for this trace handle. 
                    423: ** 
                    424: ** 
                    425: ** OUTPUTS: returned.
                    426: ** 
                    427: ** RETURNS: 
                    428: **  PRTraceHandle associated with qName and rName or NULL when
                    429: ** there is no match.
                    430: ** 
                    431: ** RESTRICTIONS:
                    432: ** 
                    433: */
                    434: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    435: #define PR_GET_TRACE_HANDLE_FROM_NAME(handle,qName,rName)\
                    436:     (handle) = PR_GetTraceHandleFromName((qName),(rName))
                    437: #else
                    438: #define PR_GET_TRACE_HANDLE_FROM_NAME(handle,qName,rName)
                    439: #endif
                    440: 
                    441: NSPR_API(PRTraceHandle) 
                    442:    PR_GetTraceHandleFromName( 
                    443:        const char *qName,      /* QName search argument */
                    444:         const char *rName       /* RName search argument */
                    445: );
                    446: 
                    447: /* -----------------------------------------------------------------------
                    448: ** FUNCTION: PR_GetTraceNameFromHandle() -- Retreive trace name
                    449: ** by bandle.
                    450: ** 
                    451: ** DESCRIPTION:
                    452: ** PR_GetTraceNameFromHandle() retreives the existing qName,
                    453: ** rName, and description for the referenced trace handle.
                    454: ** 
                    455: ** INPUTS: handle: PRTraceHandle.
                    456: ** 
                    457: ** OUTPUTS: pointers to the Trace Facility's copy of qName,
                    458: ** rName and description. ... Don't mess with these values.
                    459: ** They're mine.
                    460: ** 
                    461: ** RETURNS: void
                    462: ** 
                    463: ** RESTRICTIONS:
                    464: ** 
                    465: */
                    466: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    467: #define PR_GET_TRACE_NAME_FROM_HANDLE(handle,qName,rName,description)\
                    468:     PR_GetTraceNameFromHandle((handle),(qName),(rName),(description))
                    469: #else
                    470: #define PR_GET_TRACE_NAME_FROM_HANDLE(handle,qName,rName,description)
                    471: #endif
                    472: 
                    473: NSPR_API(void) 
                    474:    PR_GetTraceNameFromHandle( 
                    475:        PRTraceHandle handle,       /* handle as search argument */
                    476:        const char **qName,         /* pointer to associated QName */
                    477:        const char **rName,         /* pointer to associated RName */
                    478:        const char **description    /* pointer to associated description */
                    479: );
                    480: 
                    481: /* -----------------------------------------------------------------------
                    482: ** FUNCTION: PR_FindNextTraceQname() -- Retrieive a QName handle
                    483: ** iterator.
                    484: ** 
                    485: ** DESCRIPTION:
                    486: ** PR_FindNextTraceQname() retreives the first or next trace
                    487: ** QName handle, depending on the value of handle, from the trace
                    488: ** database. The PRTraceHandle returned can be used as an
                    489: ** iterator to traverse the QName handles in the Trace database.
                    490: ** 
                    491: ** INPUTS:
                    492: **  handle: When NULL, PR_FindNextQname() returns the first QName
                    493: ** handle. When a handle is a valid PRTraceHandle previously
                    494: ** retreived using PR_FindNextQname() the next QName handle is
                    495: ** retreived.
                    496: ** 
                    497: ** OUTPUTS: returned.
                    498: ** 
                    499: ** RETURNS: 
                    500: **  PRTraceHandle or NULL when there are no trace handles.
                    501: ** 
                    502: ** RESTRICTIONS:
                    503: **  Iterating thru the trace handles via FindFirst/FindNext
                    504: ** should be done under protection of the trace handle lock.
                    505: ** See: PR_SetTraceOption( PRLockTraceHandles ).
                    506: ** 
                    507: */
                    508: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    509: #define PR_FIND_NEXT_TRACE_QNAME(next,handle)\
                    510:     (next) = PR_FindNextTraceQname((handle))
                    511: #else
                    512: #define PR_FIND_NEXT_TRACE_QNAME(next,handle)
                    513: #endif
                    514: 
                    515: NSPR_API(PRTraceHandle) 
                    516:    PR_FindNextTraceQname( 
                    517:         PRTraceHandle handle
                    518: );
                    519: 
                    520: 
                    521: /* -----------------------------------------------------------------------
                    522: ** FUNCTION: PR_FindNextTraceRname() -- Retrieive an RName handle
                    523: ** iterator.
                    524: ** 
                    525: ** DESCRIPTION:
                    526: ** PR_FindNextTraceRname() retreives the first or next trace
                    527: ** RName handle, depending on the value of handle, from the trace
                    528: ** database. The PRTraceHandle returned can be used as an
                    529: ** iterator to traverse the RName handles in the Trace database.
                    530: ** 
                    531: ** INPUTS:
                    532: **  rhandle: When NULL, PR_FindNextRname() returns the first
                    533: ** RName handle. When a handle is a valid PRTraceHandle
                    534: ** previously retreived using PR_FindNextRname() the next RName
                    535: ** handle is retreived.
                    536: **  qhandle: A valid PRTraceHandle retruned from a previous call
                    537: ** to PR_FIND_NEXT_TRACE_QNAME().
                    538: ** 
                    539: ** OUTPUTS: returned.
                    540: ** 
                    541: ** RETURNS: 
                    542: **  PRTraceHandle or NULL when there are no trace handles.
                    543: ** 
                    544: ** RESTRICTIONS:
                    545: **  Iterating thru the trace handles via FindNext should be done
                    546: ** under protection of the trace handle lock. See: (
                    547: ** PR_SetTraceOption( PRLockTraceHandles ).
                    548: ** 
                    549: */
                    550: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    551: #define PR_FIND_NEXT_TRACE_RNAME(next,rhandle,qhandle)\
                    552:     (next) = PR_FindNextTraceRname((rhandle),(qhandle))
                    553: #else
                    554: #define PR_FIND_NEXT_TRACE_RNAME(next,rhandle,qhandle)
                    555: #endif
                    556: 
                    557: NSPR_API(PRTraceHandle) 
                    558:    PR_FindNextTraceRname( 
                    559:         PRTraceHandle rhandle,
                    560:         PRTraceHandle qhandle
                    561: );
                    562: 
                    563: /* -----------------------------------------------------------------------
                    564: ** FUNCTION: PR_RecordTraceEntries() -- Write trace entries to external media
                    565: ** 
                    566: ** DESCRIPTION:
                    567: ** PR_RecordTraceEntries() causes entries in the in-memory trace
                    568: ** buffer to be written to external media.
                    569: **
                    570: ** When PR_RecordTraceEntries() is called from an application
                    571: ** thread, the function appears to block until another thread
                    572: ** calls PR_SetTraceOption() with the PRTraceStopRecording
                    573: ** option. This suggests that PR_RecordTraceEntries() should be
                    574: ** called from a user supplied thread whose only job is to
                    575: ** record trace entries. 
                    576: ** 
                    577: ** The environment variable NSPR_TRACE_LOG controls the operation
                    578: ** of this function. When NSPR_TRACE_LOG is not defined in the
                    579: ** environment, no recording of trace entries occurs. When
                    580: ** NSPR_TRACE_LOG is defined, the value of its definition must be
                    581: ** the filename of the file to receive the trace entry buffer.
                    582: **
                    583: ** PR_RecordTraceEntries() attempts to record the in-memory
                    584: ** buffer to a file, subject to the setting of the environment
                    585: ** variable NSPR_TRACE_LOG. It is possible because of system
                    586: ** load, the thread priority of the recording thread, number of
                    587: ** active trace records being written over time, and other
                    588: ** variables that some trace records can be lost. ... In other
                    589: ** words: don't bet the farm on getting everything.
                    590: ** 
                    591: ** INPUTS: none
                    592: ** 
                    593: ** OUTPUTS: none
                    594: ** 
                    595: ** RETURNS: PR_STATUS
                    596: **    PR_SUCCESS no errors were found.
                    597: **    PR_FAILURE errors were found.
                    598: ** 
                    599: ** RESTRICTIONS:
                    600: ** Only one thread can call PR_RecordTraceEntries() within a
                    601: ** process.
                    602: ** 
                    603: ** On error, PR_RecordTraceEntries() may return prematurely.
                    604: ** 
                    605: */
                    606: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    607: #define PR_RECORD_TRACE_ENTRIES()\
                    608:    PR_RecordTraceEntries()
                    609: #else
                    610: #define PR_RECORD_TRACE_ENTRIES()
                    611: #endif
                    612:     
                    613: NSPR_API(void)
                    614:    PR_RecordTraceEntries(
                    615:         void 
                    616: );
                    617: 
                    618: /* -----------------------------------------------------------------------
                    619: ** FUNCTION: PR_GetTraceEntries() -- Retreive trace entries from
                    620: ** the Trace Facility
                    621: ** 
                    622: ** DESCRIPTION:
                    623: ** PR_GetTraceEntries() retreives trace entries from the Trace
                    624: ** Facility. Up to count trace entries are copied from the Trace
                    625: ** Facility into buffer. Only those trace entries that have not
                    626: ** been copied via a previous call to PR_GetTraceEntries() are
                    627: ** copied. The actual number copied is placed in the PRInt32
                    628: ** variable pointed to by found.
                    629: **
                    630: ** If more than count trace entries have entered the Trace
                    631: ** Facility since the last call to PR_GetTraceEntries() 
                    632: ** a lost data condition is returned. In this case, the most
                    633: ** recent count trace entries are copied into buffer and found is
                    634: ** set to count.
                    635: ** 
                    636: ** INPUTS:
                    637: **  count. The number of trace entries to be copied into buffer.
                    638: ** 
                    639: ** 
                    640: ** OUTPUTS:
                    641: **  buffer. An array of PRTraceEntries. The buffer is supplied
                    642: ** by the caller.
                    643: ** 
                    644: ** found: 32bit signed integer. The number of PRTraceEntries
                    645: ** actually copied. found is always less than or equal to count.
                    646: ** 
                    647: ** RETURNS: 
                    648: **  zero when there is no lost data.
                    649: **  non-zero when some PRTraceEntries have been lost.
                    650: ** 
                    651: ** RESTRICTIONS:
                    652: ** This is a real performance pig. The copy out operation is bad
                    653: ** enough, but depending on then frequency of calls to the
                    654: ** function, serious performance impact to the operating
                    655: ** application may be realized. ... YMMV.
                    656: ** 
                    657: */
                    658: #if defined (DEBUG) || defined (FORCE_NSPR_TRACE)
                    659: #define PR_GET_TRACE_ENTRIES(buffer,count,found)\
                    660:         PR_GetTraceEntries((buffer),(count),(found))
                    661: #else
                    662: #define PR_GET_TRACE_ENTRIES(buffer,count,found)
                    663: #endif
                    664: 
                    665: NSPR_API(PRIntn)
                    666:     PR_GetTraceEntries(
                    667:         PRTraceEntry    *buffer,    /* where to write output */
                    668:         PRInt32         count,      /* number to get */
                    669:         PRInt32         *found      /* number you got */
                    670: );
                    671: 
                    672: PR_END_EXTERN_C
                    673: 
                    674: #endif /* prtrace_h___ */
                    675: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.