Commit 6b663b13 authored by dp%netscape.com's avatar dp%netscape.com
Browse files

Function timers. r=sgehani, sr=sfraser

parent d2eb2bf0
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -149,6 +149,26 @@ PR_EXTERN(nsresult) NS_TimelineLeave(const char *text);
#define NS_TIMELINE_RESET_TIMER(timerName) NS_TimelineResetTimer(timerName)
#define NS_TIMELINE_MARK_TIMER1(timerName, str) NS_TimelineMarkTimer(timerName, str)

/*
 * Helper class to time functions. Use only static strings.
 */
class nsFunctionTimer {
public:
    const char *mTimer;
    PRBool mMark;
    nsFunctionTimer(const char *timer, PRBool mark = PR_TRUE) : mTimer(timer), mMark(mark)
    {
        NS_TIMELINE_START_TIMER(mTimer);
    }

    ~nsFunctionTimer()
    {
        NS_TIMELINE_STOP_TIMER(mTimer);
        if (mMark)
            NS_TIMELINE_MARK_TIMER(mTimer);
    }
};

/*
 * NS_TIMELINE_MARK_ macros for various data types.  Each of these
 * macros replaces "%s" in its "text" argument with a string
@@ -189,6 +209,8 @@ PR_EXTERN(nsresult) NS_TimelineLeave(const char *text);
        nsCOMPtr<nsIChannel> channel(do_QueryInterface(request)); \
        NS_TIMELINE_MARK_CHANNEL(text, channel); \
    }
#define NS_TIMELINE_MARK_FUNCTION(timer) nsFunctionTimer functionTimer(timer)
#define NS_TIMELINE_TIME_FUNCTION(timer) nsFunctionTimer functionTimer(timer, PR_FALSE) /* no mark, only time */

#else /* !defined(MOZ_TIMELINE) */
#define NS_TIMELINE_MARK(text)
@@ -203,6 +225,8 @@ PR_EXTERN(nsresult) NS_TimelineLeave(const char *text);
#define NS_TIMELINE_ENTER(text)
#define NS_TIMELINE_LEAVE(text)
#define NS_TIMELINE_MARK_URI(text, uri)
#define NS_TIMELINE_MARK_FUNCTION(timer)
#define NS_TIMELINE_TIME_FUNCTION(timer)
#define NS_TIMELINE_MARK_CHANNEL(text, channel)
#define NS_TIMELINE_MARK_LOADER(text, loader);
#endif /* defined(MOZ_TIMELINE) */