bug 113738 Cost of malloc into trace-malloc log. r=blythe, sr=brendan

This commit is contained in:
dp%netscape.com 2001-12-15 00:27:15 +00:00
Родитель a6d576842a
Коммит 8fd8cb15ca
3 изменённых файлов: 54 добавлений и 2 удалений

Просмотреть файл

@ -245,6 +245,26 @@ int showHelp(void)
return retval;
}
/*
** ticks2msec
**
** Convert platform specific ticks to msec time
** Returns 0 on success.
*/
PRUint32 ticks2msec(tmreader* aReader, PRUint32 aTicks)
{
PRUint32 retval = 0;
PRUint64 bigone = LL_INIT(0, 1000);
PRUint64 tmp64;
LL_UI2L(tmp64, aTicks);
LL_MUL(bigone, bigone, tmp64);
LL_UI2L(tmp64, aReader->ticksPerSec);
LL_DIV(bigone, bigone, tmp64);
LL_L2UI(retval, bigone);
return retval;
}
/*
** initOptions
**
@ -2222,7 +2242,7 @@ void tmEventHandler(tmreader* aReader, tmevent* aEvent)
{
eventType = TM_EVENT_FREE;
}
trackEvent(aEvent->u.alloc.interval, eventType, callsite, aEvent->u.alloc.ptr, aEvent->u.alloc.size, oldcallsite, oldptr, oldsize);
trackEvent(ticks2msec(aReader, aEvent->u.alloc.interval), eventType, callsite, aEvent->u.alloc.ptr, aEvent->u.alloc.size, oldcallsite, oldptr, oldsize);
}
}
else

Просмотреть файл

@ -43,6 +43,7 @@
#endif
#include "prlog.h"
#include "plhash.h"
#include "prnetdb.h"
#include "nsTraceMalloc.h"
#include "tmreader.h"
@ -169,6 +170,8 @@ static int get_tmevent(FILE *fp, tmevent *event)
case TM_EVENT_FREE:
if (!get_uint32(fp, &event->u.alloc.interval))
return 0;
if (!get_uint32(fp, &event->u.alloc.cost))
return 0;
if (!get_uint32(fp, &event->u.alloc.ptr))
return 0;
if (!get_uint32(fp, &event->u.alloc.size))
@ -176,11 +179,24 @@ static int get_tmevent(FILE *fp, tmevent *event)
event->u.alloc.oldserial = 0;
event->u.alloc.oldptr = 0;
event->u.alloc.oldsize = 0;
#if defined(DEBUG_dp)
if (c == TM_EVENT_MALLOC)
printf("%d malloc %d 0x%p\n", event->u.alloc.cost,
event->u.alloc.size, event->u.alloc.ptr);
else if (c == TM_EVENT_CALLOC)
printf("%d calloc %d 0x%p\n", event->u.alloc.cost,
event->u.alloc.size, event->u.alloc.ptr);
else
printf("%d free %d 0x%p\n", event->u.alloc.cost,
event->u.alloc.size, event->u.alloc.ptr);
#endif
break;
case TM_EVENT_REALLOC:
if (!get_uint32(fp, &event->u.alloc.interval))
return 0;
if (!get_uint32(fp, &event->u.alloc.cost))
return 0;
if (!get_uint32(fp, &event->u.alloc.ptr))
return 0;
if (!get_uint32(fp, &event->u.alloc.size))
@ -191,6 +207,10 @@ static int get_tmevent(FILE *fp, tmevent *event)
return 0;
if (!get_uint32(fp, &event->u.alloc.oldsize))
return 0;
#if defined(DEBUG_dp)
printf("%d realloc %d 0x%p %d\n", event->u.alloc.cost,
event->u.alloc.size, event->u.alloc.ptr, event->u.alloc.oldsize);
#endif
break;
case TM_EVENT_STATS:
@ -391,6 +411,16 @@ int tmreader_eventloop(tmreader *tmr, const char *filename,
return 0;
}
/* Read in ticks per second. Used to convert platform specific intervals to time values */
if (read(fileno(fp), &tmr->ticksPerSec, sizeof tmr->ticksPerSec) != sizeof tmr->ticksPerSec) {
fprintf(stderr, "%s: Cannot read ticksPerSec. Log file read error.\n",
tmr->program);
return 0;
}
tmr->ticksPerSec = PR_ntohl(tmr->ticksPerSec);
#ifdef DEBUG_dp
printf("DEBUG: ticks per sec = %d\n", tmr->ticksPerSec);
#endif
while (get_tmevent(fp, &event)) {
switch (event.type) {
case TM_EVENT_LIBRARY: {

Просмотреть файл

@ -65,12 +65,13 @@ struct tmevent {
uint32 offset;
} site;
struct {
uint32 interval;
uint32 interval; /* in ticks */
uint32 ptr;
uint32 size;
uint32 oldserial;
uint32 oldptr;
uint32 oldsize;
uint32 cost; /* in ticks */
} alloc;
struct {
nsTMStats tmstats;
@ -155,6 +156,7 @@ struct tmreader {
PLHashTable *methods;
PLHashTable *callsites;
tmcallsite calltree_root;
uint32 ticksPerSec;
};
typedef void (*tmeventhandler)(tmreader *tmr, tmevent *event);