#ifndef __profile_h
#define __profile_h
#include "oslib/os.h"

#define PROFILING

#ifdef PROFILING


/* indexes into pf_time[] */
enum
{
  PF_POLL = 0,
  PF_XML_TO_BOX,
  PF_SEARCH,
  PF_BOX_TEXT,
  PF_BOX_ELEMENT,
  PF_BOX_CREATE,
  PF_BOX_GET_STYLE,
  PF_BOX_GET_ATTR,
  PF_BOX_A,
  PF_BOX_BODY,
  PF_BOX_BR,
  PF_BOX_IMAGE,
  PF_BOX_FORM,
  PF_BOX_TEXTAREA,
  PF_BOX_SELECT,
  PF_BOX_INPUT,
  PF_BOX_INPUT_TEXT,
  PF_BOX_BUTTON,
  PF_BOX_FRAMESET,
  PF_BOX_OBJECT,
  PF_BOX_EMBED,
  PF_REG_EXEC,
  PF_COUNT
};


typedef struct prof_time prof_time;


struct prof_time
{
  prof_time *prev;

  osbool     active;
  unsigned   start_time;
  long long  total_time;
  osbool     start_active;
};

extern prof_time pf_time[PF_COUNT];

os_error *profile_init(void);
void profile_report(void);

unsigned profile_gettime(void);

void     profile_start_timing(prof_time *);
unsigned profile_stop_timing(prof_time *);

#else

#define profile_init() (NULL)
#define profile_gettime() (0)
#define profile_start_timing(x)
#define profile_stop_timing(x)

#endif

#endif
