/* Sun-$Revision: 23.3 $ */
/* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University.
See the LICENSE file for license information. */
# pragma interface
// a simple hierarchical profiler for Self
// primitives
oop PrintProfile_prim(oop rcvr, float cutoff, float skip, smi maxDepth);
oop ResetProfile_prim(oop rcvr);
oop Profile_prim(oop p, bool on);
struct pnode;
class HProfiler: public CHeapObj {
# if defined(FAST_COMPILER) || defined(SIC_COMPILER)
pnode* top;
Process* p;
int32 ticks;
int32 gcTicks;
int32 compilerTicks;
int32 lookupTicks;
int32 primTicks;
public:
void reset();
void start(Process* p);
void stop();
void tick();
bool inactive() { return !this || !top || !p; }
void sort();
void print_hp(float cutoff, float skip, smi depth);
friend class pnode;
# endif // defined(FAST_COMPILER) || defined(SIC_COMPILER)
public:
HProfiler();
// memory functions
void oops_do(oopsDoFn f);
void scavenge_contents();
void gc_mark_contents();
void gc_unmark_contents();
void switch_pointers(oop from, oop to);
void verify();
};
extern HProfiler* hprofiler;
void initHProfiler();