/* Sun-$Revision: 23.4 $ $ */
/* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University.
See the LICENSE file for license information. */
# pragma interface
// A profilerOop is an object collect profiling information from
// a single Self process.
class profilerOopClass : public slotsOopClass {
protected:
Profiler* _profiler;
oop _process; // process to which I'm attached
profilerOop addr() { return (profilerOop)slotsOopClass::addr(); }
void set_process(oop p) { Memory->store((oop*)&addr()->_process, p); }
processOop get_process() { return (processOop)addr()->_process; }
void set_profiler(Profiler* prof) { addr()->_profiler = prof; }
Profiler* get_profiler() { return addr()->_profiler; }
processOop illegal_process() { return (processOop) smiOop_zero; }
public:
// Primitives
oop ProfilerProcess_prim(void *FH);
// fails with:
// NOPROCESSERROR if profiler is passive.
// returns the processOop beeing observed..
oop ProfilerEngage_prim(oop process, void *FH);
// fails with:
// BADTYPEERROR if argument is not a processOop.
// NOPROCESSERROR if argument has no real process.
// returns the processOop.
oop ProfilerDisengage_prim(void *FH);
// fails with:
// NOPROCESSERROR if profiler is not engaged.
// returns the engaged processOop.
oop ProfilerReset_prim();
oop ProfilerTicks_prim(oop tick_pt, void *FH);
oop ProfilerTimes_prim(oop time_pt, void *FH);
oop ProfilerCopyGraph_prim(oop method_pt, oop block_pt, oop access_pt,
oop prim_pt, oop leaf_pt, oop fold_pt,
oop unknown_oop, void *FH);
// returns the call graph with annotated nodes.
oop ProfilerPrint_prim(float cutoff);
// Print a VM low level dump of the call graph;
bool is_active() { return get_process() != illegal_process(); }
void initialize(); // Initialize all instance variables
};