/* Copyright (C) 2021-2026 Free Software Foundation, Inc. Contributed by Oracle. This file is part of GNU Binutils. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _TABLE_H#define _TABLE_H #include "vec.h"#include "Map2D.h" #include "dbe_structs.h" class FilterExp;struct PropDescr;struct FieldDescr;class PacketDescriptor;class DataDescriptor;class DataView; // Note: order must match VTYPE_TYPE_NAMES, below enum VType_type{ TYPE_NONE, TYPE_INT32, TYPE_UINT32, TYPE_INT64, TYPE_UINT64, TYPE_STRING, TYPE_DOUBLE, TYPE_OBJ, TYPE_DATE, // Used in FieldDescr only, mapped to TYPE_UINT64 in PropDescr TYPE_BOOL, // Used only to describe filter props TYPE_ENUM, // Used only to describe filter props TYPE_LAST}; #define VTYPE_TYPE_NAMES \{ \ NTXT("NONE"), \ NTXT("INT32"), \ NTXT("UINT32"), \ NTXT("INT64"), \ NTXT("UINT64"), \ NTXT("STRING"), \ NTXT("DOUBLE"), \ NTXT("OBJECT"), \ NTXT("DATE"), \ NTXT("BOOL"), \ NTXT("ENUM") \} // Note: order must match PROFDATA_TYPE_NAMES and PROFDATA_TYPE_UNAMES, below enum ProfData_type{ // a.k.a "data_id" (not the same as Pckt_type "kind") DATA_NONE = -1, DATA_SAMPLE = 0, // Traditional collect "Samples" DATA_GCEVENT, // Java Garbage Collection events DATA_HEAPSZ, // heap size tracking based on heap tracing data DATA_CLOCK, // clock profiling data DATA_HWC, // hardware counter profiling data DATA_SYNCH, // synchronization tracing data DATA_HEAP, // heap tracing data DATA_MPI, // MPI tracing data DATA_RACE, // data race detection data DATA_DLCK, // deadlock detection data DATA_OMP, // OpenMP profiling data (fork events) DATA_OMP2, // OpenMP profiling data (enter thread events) DATA_OMP3, // OpenMP profiling data (enter task events) DATA_OMP4, // OpenMP profiling data (parreg descriptions) DATA_OMP5, // OpenMP profiling data (task descriptions) DATA_IOTRACE, // IO tracing data DATA_LAST}; extern char *get_prof_data_type_name (int t);extern char *get_prof_data_type_uname (int t); enum Prop_type{ PROP_NONE, // commonly used properties (libcollector modules, er_print) PROP_ATSTAMP, // hrtime_t, Filter: system HRT timestamp; // "Absolute TSTAMP" PROP_ETSTAMP, // hrtime_t, Filter: nanoseconds from subexperiment start; // "subExperiment TSTAMP" PROP_TSTAMP, // hrtime_t, Packet: system HRT timestamp // Filter: nanoseconds from founder start PROP_THRID, // mapped to uint32_t by readPacket PROP_LWPID, // mapped to uint32_t by readPacket PROP_CPUID, // mapped to uint32_t by readPacket PROP_FRINFO, // uint64_t frinfo PROP_EVT_TIME, // hrtime_t Filter: Time delta // If TSTAMP taken at end of event, EVT_TIME will be positive // If TSTAMP taken at start of event, EVT_TIME will be negative // Note: clock and hwc profile events set EVT_TIME=0 // except Solaris Microstate events where NTICK>1: // These will use EVT_TIME=(NTICK-1)*<tick duration> // DATA_SAMPLE PROP_SAMPLE, // uint64_t sample number PROP_SMPLOBJ, // Sample* // DATA_GCEVENT PROP_GCEVENT, // uint64_t event id PROP_GCEVENTOBJ, // GCEvent* // DATA_CLOCK PROP_MSTATE, // unsigned ProfilePacket::mstate PROP_NTICK, // unsigned ProfilePacket::value PROP_OMPSTATE, // int ProfilePacket::ompstate PROP_MPISTATE, // int ProfilePacket::mpistate // DATA_SAMPLE // see PrUsage class, see PROP_MSTATE - TBR? PROP_UCPU, PROP_SCPU, PROP_TRAP, PROP_TFLT, PROP_DFLT, PROP_KFLT, PROP_ULCK, PROP_TSLP, PROP_WCPU, PROP_TSTP, // DATA_SYNCH PROP_SRQST, // hrtime_t SyncPacket::requested PROP_SOBJ, // Vaddr SyncPacket::objp // DATA_HWC PROP_HWCTAG, // uint32_t HWCntrPacket::tag; PROP_HWCINT, // uint64_t HWCntrPacket::interval PROP_VADDR, // Vaddr HWCntrPacket::dbeVA->eaddr PROP_PADDR, // Vaddr HWCntrPacket::dbePA->eaddr PROP_HWCDOBJ, // DataObject* HWCntrPacket::dobj PROP_VIRTPC, // Vaddr HWCntrPacket::eventVPC PROP_PHYSPC, // Vaddr HWCntrPacket::eventPPC PROP_EA_PAGESIZE, // uint32_t HWCntrPacket::ea_pagesize PROP_PC_PAGESIZE, // uint32_t HWCntrPacket::pc_pagesize PROP_EA_LGRP, // uint32_t HWCntrPacket::ea_lgrp PROP_PC_LGRP, // uint32_t HWCntrPacket::pc_lgrp PROP_LWP_LGRP_HOME, // uint32_t HWCntrPacket::lwp_lgrp_home PROP_PS_LGRP_HOME, // uint32_t HWCntrPacket::ps_lgrp_home PROP_MEM_LAT, // uint64_t HWCntrPacket::latency PROP_MEM_SRC, // uint64_t HWCntrPacket::data_source // DATA_HEAP PROP_HTYPE, // Heap_type HeapPacket::mtype PROP_HSIZE, // Size HeapPacket::size (bytes alloc'd by this event) PROP_HVADDR, // Vaddr HeapPacket::vaddr PROP_HOVADDR, // Vaddr HeapPacket::ovaddr PROP_HLEAKED, // Size HeapPacket::leaked (net bytes leaked) PROP_HMEM_USAGE, // Size heap memory usage PROP_HFREED, // Size (bytes freed by this event) PROP_HCUR_ALLOCS, // int64_t (net allocations running total. Recomputed after each filter) PROP_HCUR_NET_ALLOC, // int64_t (net allocation for this packet. Recomputed after each filter) PROP_HCUR_LEAKS, // Size (net leaks running total. Recomputed after each filter) // DATA_IOTRACE PROP_IOTYPE, // IOTrace_type IOTracePacket::iotype PROP_IOFD, // int32_t IOTracePacket::fd PROP_IONBYTE, // Size_type IOTracePacket::nbyte PROP_IORQST, // hrtime_t IOTracePacket::requested PROP_IOOFD, // int32_t IOTracePacket::ofd PROP_IOFSTYPE, // FileSystem_type IOTracePacket::fstype PROP_IOFNAME, // char IOTracePacket::fname PROP_IOVFD, // int32_t virtual file descriptor // DATA_MPI PROP_MPITYPE, // MPI_type MPIPacket::mpitype PROP_MPISCOUNT, // Size MPIPacket::scount PROP_MPISBYTES, // Size MPIPacket::sbytes PROP_MPIRCOUNT, // Size MPIPacket::rcount PROP_MPIRBYTES, // Size MPIPacket::rbytes // DATA_OMP* PROP_CPRID, // uint64_t (Note: not same as "PROP_CPRID" below) PROP_PPRID, // uint64_t OMPPacket::omp_pprid PROP_TSKID, // uint64_t (Note: not same as "PROP_CPRID" below) PROP_PTSKID, // uint64_t OMPPacket::omp_ptskid PROP_PRPC, // uint64_t OMPPacket::omp_prpc // DATA_RACE PROP_RTYPE, // Race_type RacePacket::rtype PROP_RID, // uint32_t RacePacket::id PROP_RVADDR, // Vaddr RacePacket::vaddr PROP_RCNT, // uint32_t RacePacket::count PROP_LEAFPC, // Vaddr CommonPacket::leafpc // DATA_DLCK PROP_DID, // uint32_t DeadlockPacket::id PROP_DTYPE, // Deadlock_Lock_type DeadlockPacket::lock_type PROP_DLTYPE, // Deadlock_type DeadlockPacket::dl_type PROP_DVADDR, // Vaddr DeadlockPacket::lock_addr // Synthetic properties (queries only) PROP_STACKID, PROP_STACK, // void* Generic; mapped to M, U, or XSTACK PROP_MSTACK, // void* machine stack PROP_USTACK, // void* user_stack PROP_XSTACK, // void* expert_stack PROP_HSTACK, // void* hide_stack //PROP_CPRID, // void* (Note: not same as "PROP_CPRID" above) //PROP_TSKID, // void* (Note: not same as "PROP_TSKID" above) PROP_JTHREAD, // JThread* CommonPacket::jthread PROP_LEAF, // uint64_t stack leaf function PROP_DOBJ, // "DOBJ" DataObject* PROP_SAMPLE_MAP, // Map events to SAMPLE using sample's time range PROP_GCEVENT_MAP, // Map events to GCEVENT using gcevent's time range PROP_PID, // int unix getpid() PROP_EXPID, // int Experiment->getUserExpId(), AKA process number, >=1. PROP_EXPID_CMP, // int "Comparable PROP_EXPID". In compare mode, if this // process has been matched to another groups' process, // returns PROP_EXPID of the matching process with the // lowest PROP_EXPGRID value. Otherwise returns PROP_EXPID. PROP_EXPGRID, // int Comparison group number. >=0, 0 is Baseline. PROP_PARREG, // "PARREG" uint64_t (see 6436500) TBR? PROP_TSTAMP_LO, // hrtime_t Filter: Event's low TSTAMP PROP_TSTAMP_HI, // hrtime_t Filter: Event's high TSTAMP PROP_TSTAMP2, // hrtime_t Filter: End TSTAMP (TSTAMP<=TSTAMP2) PROP_FREQ_MHZ, // int frequency in MHZ (for converting HWC profiling cycles to time) PROP_NTICK_USEC, // hrtime_t Clock profiling interval, microseconds (PROP_NTICK * Experiment->ptimer_usec) PROP_IOHEAPBYTES, // Size PROP_HSIZE or PROP_IONBYTE PROP_STACKL, // void* Generic; mapped to M, U, or XSTACK for DbeLine PROP_MSTACKL, // void* machine stack PROP_USTACKL, // void* user_stack PROP_XSTACKL, // void* expert_stack PROP_STACKI, // void* Generic; mapped to M, U, or XSTACK for DbeInstr PROP_MSTACKI, // void* machine stack PROP_USTACKI, // void* user_stack PROP_XSTACKI, // void* expert_stack PROP_DDSCR_LNK, // long long index into DataDescriptor table for a related event PROP_VOIDP_OBJ, // void* pointer to object containing metadata PROP_LAST}; enum Prop_flag{ PRFLAG_NOSHOW = 0x40}; struct PropDescr{ PropDescr (int propID, const char *name); virtual ~PropDescr (); void addState (int value, const char *stname, const char *stuname); char *getStateName (int value); char *getStateUName (int value); int getMaxState () { return stateNames ? stateNames->size () : 0; } int propID; char *name; char *uname; VType_type vtype; int flags; private: Vector<char*>*stateNames; Vector<char*>*stateUNames;}; struct FieldDescr{ FieldDescr (int propID, const char *name); virtual ~FieldDescr (); int propID; char *name; int offset; VType_type vtype; char *format;}; class PacketDescriptor{public: PacketDescriptor (DataDescriptor*); virtual ~PacketDescriptor (); DataDescriptor * getDataDescriptor () { return ddscr; } Vector<FieldDescr*> * getFields () { return fields; } void addField (FieldDescr*); private: DataDescriptor *ddscr; Vector<FieldDescr*> *fields;}; struct Datum{ void setUINT32 (uint32_t vv) { type = TYPE_UINT32; i = vv; } void setUINT64 (uint64_t vv) { type = TYPE_UINT64; ll = vv; } void setSTRING (char* vv) { type = TYPE_STRING; l = vv; } void setDOUBLE (double vv) { type = TYPE_DOUBLE; d = vv; } void setOBJ (void* vv) { type = TYPE_OBJ; p = vv; } VType_type type; union { int i; double d; char *l; void *p; unsigned long long ll; };}; class Data{public: static Data *newData (VType_type); virtual ~Data () { } virtual VType_type type () { return TYPE_NONE; } virtual void reset () = 0; virtual long getSize () = 0; virtual int fetchInt (long i) = 0; virtual unsigned long long fetchULong (long i) = 0; virtual long long fetchLong (long i) = 0; virtual char *fetchString (long i) = 0; virtual double fetchDouble (long i) = 0; virtual void *fetchObject (long i) = 0; virtual void setDatumValue (long, const Datum*) = 0; virtual void setValue (long, uint64_t) = 0; virtual void setObjValue (long, void*) = 0; virtual int cmpValues (long idx1, long idx2) = 0; virtual int cmpDatumValue (long idx, const Datum *val) = 0;}; enum Data_flag{ DDFLAG_NOSHOW = 0x01}; class DataDescriptor{ /* * An instance of this class stores the data packets for a specific * type of profiling, for example, clock profiling. * * Each packet consists of values for various properties. * For example, a timestamp is a property which is accessed with PROP_TSTAMP. * * Ideally, DataDescriptor contents are considered immutable after the * data is read in. setValue() should only be used during creation. * - The packets are in fixed order. This allows DataDescriptor <pkt_id> * to be treated as a stable handle. * - Sorting/filtering is handled by the DataView class * - In the future, if we need to add the ability to append new packets, * we might add a flag to show when the class is immutable and/or appendible */public: DataDescriptor (int id, const char* name, const char* uname, int flags = 0); // master DataDescriptor (int id, const char* name, const char* uname, DataDescriptor*); // reference copy ~DataDescriptor (); // packets' descriptions int getId () { return id; } char * getName () { return name; } char * getUName () { return uname; } Vector<PropDescr*> * getProps () { return props; // packet properties } PropDescr *getProp (int prop_id); // packet property long getSize () { return *ref_size; // number of packets } long getFlags () { return flags; } // class to provide sorting and filtering DataView *createView (); DataView *createImmutableView (); DataView *createExtManagedView (); // packet property values (<pkt_id> is stable packet handle) int getIntValue (int prop_id, long pkt_id); unsigned long long getULongValue (int prop_id, long pkt_id); long long getLongValue (int prop_id, long pkt_id); void *getObjValue (int prop_id, long pkt_id); Vector<long long> *getSet (int prop_id); // list of sorted, unique values // table creation/reset void addProperty (PropDescr*); // add property to all packets long addRecord (); // add packet Data *getData (int prop_id); // get all packets void setDatumValue (int prop_id, long pkt_id, const Datum *val); void setValue (int prop_id, long pkt_id, uint64_t val); void setObjValue (int prop_id, long pkt_id, void *val); void reset (); // remove all packets (ym: TBR?) void setResolveFrInfoDone () { *ref_resolveFrameInfoDone = true; } bool isResolveFrInfoDone () { return *ref_resolveFrameInfoDone; } Lines 1–500 of 619. Load more
/* Copyright (C) 2021-2026 Free Software Foundation, Inc. Contributed by Oracle. This file is part of GNU Binutils. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _TABLE_H #define _TABLE_H #include "vec.h" #include "Map2D.h" #include "dbe_structs.h" class FilterExp; struct PropDescr; struct FieldDescr; class PacketDescriptor; class DataDescriptor; class DataView; // Note: order must match VTYPE_TYPE_NAMES, below enum VType_type { TYPE_NONE, TYPE_INT32, TYPE_UINT32, TYPE_INT64, TYPE_UINT64, TYPE_STRING, TYPE_DOUBLE, TYPE_OBJ, TYPE_DATE, // Used in FieldDescr only, mapped to TYPE_UINT64 in PropDescr TYPE_BOOL, // Used only to describe filter props TYPE_ENUM, // Used only to describe filter props TYPE_LAST }; #define VTYPE_TYPE_NAMES \ { \ NTXT("NONE"), \ NTXT("INT32"), \ NTXT("UINT32"), \ NTXT("INT64"), \ NTXT("UINT64"), \ NTXT("STRING"), \ NTXT("DOUBLE"), \ NTXT("OBJECT"), \ NTXT("DATE"), \ NTXT("BOOL"), \ NTXT("ENUM") \ } // Note: order must match PROFDATA_TYPE_NAMES and PROFDATA_TYPE_UNAMES, below enum ProfData_type { // a.k.a "data_id" (not the same as Pckt_type "kind") DATA_NONE = -1, DATA_SAMPLE = 0, // Traditional collect "Samples" DATA_GCEVENT, // Java Garbage Collection events DATA_HEAPSZ, // heap size tracking based on heap tracing data DATA_CLOCK, // clock profiling data DATA_HWC, // hardware counter profiling data DATA_SYNCH, // synchronization tracing data DATA_HEAP, // heap tracing data DATA_MPI, // MPI tracing data DATA_RACE, // data race detection data DATA_DLCK, // deadlock detection data DATA_OMP, // OpenMP profiling data (fork events) DATA_OMP2, // OpenMP profiling data (enter thread events) DATA_OMP3, // OpenMP profiling data (enter task events) DATA_OMP4, // OpenMP profiling data (parreg descriptions) DATA_OMP5, // OpenMP profiling data (task descriptions) DATA_IOTRACE, // IO tracing data DATA_LAST }; extern char *get_prof_data_type_name (int t); extern char * get_prof_data_type_uname (int t); enum Prop_type { PROP_NONE, // commonly used properties (libcollector modules, er_print) PROP_ATSTAMP, // hrtime_t, Filter: system HRT timestamp; // "Absolute TSTAMP" PROP_ETSTAMP, // hrtime_t, Filter: nanoseconds from subexperiment start; // "subExperiment TSTAMP" PROP_TSTAMP, // hrtime_t, Packet: system HRT timestamp // Filter: nanoseconds from founder start PROP_THRID, // mapped to uint32_t by readPacket PROP_LWPID, // mapped to uint32_t by readPacket PROP_CPUID, // mapped to uint32_t by readPacket PROP_FRINFO, // uint64_t frinfo PROP_EVT_TIME, // hrtime_t Filter: Time delta // If TSTAMP taken at end of event, EVT_TIME will be positive // If TSTAMP taken at start of event, EVT_TIME will be negative // Note: clock and hwc profile events set EVT_TIME=0 // except Solaris Microstate events where NTICK>1: // These will use EVT_TIME=(NTICK-1)*<tick duration> // DATA_SAMPLE PROP_SAMPLE, // uint64_t sample number PROP_SMPLOBJ, // Sample* // DATA_GCEVENT PROP_GCEVENT, // uint64_t event id PROP_GCEVENTOBJ, // GCEvent* // DATA_CLOCK PROP_MSTATE, // unsigned ProfilePacket::mstate PROP_NTICK, // unsigned ProfilePacket::value PROP_OMPSTATE, // int ProfilePacket::ompstate PROP_MPISTATE, // int ProfilePacket::mpistate // DATA_SAMPLE // see PrUsage class, see PROP_MSTATE - TBR? PROP_UCPU, PROP_SCPU, PROP_TRAP, PROP_TFLT, PROP_DFLT, PROP_KFLT, PROP_ULCK, PROP_TSLP, PROP_WCPU, PROP_TSTP, // DATA_SYNCH PROP_SRQST, // hrtime_t SyncPacket::requested PROP_SOBJ, // Vaddr SyncPacket::objp // DATA_HWC PROP_HWCTAG, // uint32_t HWCntrPacket::tag; PROP_HWCINT, // uint64_t HWCntrPacket::interval PROP_VADDR, // Vaddr HWCntrPacket::dbeVA->eaddr PROP_PADDR, // Vaddr HWCntrPacket::dbePA->eaddr PROP_HWCDOBJ, // DataObject* HWCntrPacket::dobj PROP_VIRTPC, // Vaddr HWCntrPacket::eventVPC PROP_PHYSPC, // Vaddr HWCntrPacket::eventPPC PROP_EA_PAGESIZE, // uint32_t HWCntrPacket::ea_pagesize PROP_PC_PAGESIZE, // uint32_t HWCntrPacket::pc_pagesize PROP_EA_LGRP, // uint32_t HWCntrPacket::ea_lgrp PROP_PC_LGRP, // uint32_t HWCntrPacket::pc_lgrp PROP_LWP_LGRP_HOME, // uint32_t HWCntrPacket::lwp_lgrp_home PROP_PS_LGRP_HOME, // uint32_t HWCntrPacket::ps_lgrp_home PROP_MEM_LAT, // uint64_t HWCntrPacket::latency PROP_MEM_SRC, // uint64_t HWCntrPacket::data_source // DATA_HEAP PROP_HTYPE, // Heap_type HeapPacket::mtype PROP_HSIZE, // Size HeapPacket::size (bytes alloc'd by this event) PROP_HVADDR, // Vaddr HeapPacket::vaddr PROP_HOVADDR, // Vaddr HeapPacket::ovaddr PROP_HLEAKED, // Size HeapPacket::leaked (net bytes leaked) PROP_HMEM_USAGE, // Size heap memory usage PROP_HFREED, // Size (bytes freed by this event) PROP_HCUR_ALLOCS, // int64_t (net allocations running total. Recomputed after each filter) PROP_HCUR_NET_ALLOC, // int64_t (net allocation for this packet. Recomputed after each filter) PROP_HCUR_LEAKS, // Size (net leaks running total. Recomputed after each filter) // DATA_IOTRACE PROP_IOTYPE, // IOTrace_type IOTracePacket::iotype PROP_IOFD, // int32_t IOTracePacket::fd PROP_IONBYTE, // Size_type IOTracePacket::nbyte PROP_IORQST, // hrtime_t IOTracePacket::requested PROP_IOOFD, // int32_t IOTracePacket::ofd PROP_IOFSTYPE, // FileSystem_type IOTracePacket::fstype PROP_IOFNAME, // char IOTracePacket::fname PROP_IOVFD, // int32_t virtual file descriptor // DATA_MPI PROP_MPITYPE, // MPI_type MPIPacket::mpitype PROP_MPISCOUNT, // Size MPIPacket::scount PROP_MPISBYTES, // Size MPIPacket::sbytes PROP_MPIRCOUNT, // Size MPIPacket::rcount PROP_MPIRBYTES, // Size MPIPacket::rbytes // DATA_OMP* PROP_CPRID, // uint64_t (Note: not same as "PROP_CPRID" below) PROP_PPRID, // uint64_t OMPPacket::omp_pprid PROP_TSKID, // uint64_t (Note: not same as "PROP_CPRID" below) PROP_PTSKID, // uint64_t OMPPacket::omp_ptskid PROP_PRPC, // uint64_t OMPPacket::omp_prpc // DATA_RACE PROP_RTYPE, // Race_type RacePacket::rtype PROP_RID, // uint32_t RacePacket::id PROP_RVADDR, // Vaddr RacePacket::vaddr PROP_RCNT, // uint32_t RacePacket::count PROP_LEAFPC, // Vaddr CommonPacket::leafpc // DATA_DLCK PROP_DID, // uint32_t DeadlockPacket::id PROP_DTYPE, // Deadlock_Lock_type DeadlockPacket::lock_type PROP_DLTYPE, // Deadlock_type DeadlockPacket::dl_type PROP_DVADDR, // Vaddr DeadlockPacket::lock_addr // Synthetic properties (queries only) PROP_STACKID, PROP_STACK, // void* Generic; mapped to M, U, or XSTACK PROP_MSTACK, // void* machine stack PROP_USTACK, // void* user_stack PROP_XSTACK, // void* expert_stack PROP_HSTACK, // void* hide_stack //PROP_CPRID, // void* (Note: not same as "PROP_CPRID" above) //PROP_TSKID, // void* (Note: not same as "PROP_TSKID" above) PROP_JTHREAD, // JThread* CommonPacket::jthread PROP_LEAF, // uint64_t stack leaf function PROP_DOBJ, // "DOBJ" DataObject* PROP_SAMPLE_MAP, // Map events to SAMPLE using sample's time range PROP_GCEVENT_MAP, // Map events to GCEVENT using gcevent's time range PROP_PID, // int unix getpid() PROP_EXPID, // int Experiment->getUserExpId(), AKA process number, >=1. PROP_EXPID_CMP, // int "Comparable PROP_EXPID". In compare mode, if this // process has been matched to another groups' process, // returns PROP_EXPID of the matching process with the // lowest PROP_EXPGRID value. Otherwise returns PROP_EXPID. PROP_EXPGRID, // int Comparison group number. >=0, 0 is Baseline. PROP_PARREG, // "PARREG" uint64_t (see 6436500) TBR? PROP_TSTAMP_LO, // hrtime_t Filter: Event's low TSTAMP PROP_TSTAMP_HI, // hrtime_t Filter: Event's high TSTAMP PROP_TSTAMP2, // hrtime_t Filter: End TSTAMP (TSTAMP<=TSTAMP2) PROP_FREQ_MHZ, // int frequency in MHZ (for converting HWC profiling cycles to time) PROP_NTICK_USEC, // hrtime_t Clock profiling interval, microseconds (PROP_NTICK * Experiment->ptimer_usec) PROP_IOHEAPBYTES, // Size PROP_HSIZE or PROP_IONBYTE PROP_STACKL, // void* Generic; mapped to M, U, or XSTACK for DbeLine PROP_MSTACKL, // void* machine stack PROP_USTACKL, // void* user_stack PROP_XSTACKL, // void* expert_stack PROP_STACKI, // void* Generic; mapped to M, U, or XSTACK for DbeInstr PROP_MSTACKI, // void* machine stack PROP_USTACKI, // void* user_stack PROP_XSTACKI, // void* expert_stack PROP_DDSCR_LNK, // long long index into DataDescriptor table for a related event PROP_VOIDP_OBJ, // void* pointer to object containing metadata PROP_LAST }; enum Prop_flag { PRFLAG_NOSHOW = 0x40 }; struct PropDescr { PropDescr (int propID, const char *name); virtual ~PropDescr (); void addState (int value, const char *stname, const char *stuname); char *getStateName (int value); char *getStateUName (int value); int getMaxState () { return stateNames ? stateNames->size () : 0; } int propID; char *name; char *uname; VType_type vtype; int flags; private: Vector<char*>*stateNames; Vector<char*>*stateUNames; }; struct FieldDescr { FieldDescr (int propID, const char *name); virtual ~FieldDescr (); int propID; char *name; int offset; VType_type vtype; char *format; }; class PacketDescriptor { public: PacketDescriptor (DataDescriptor*); virtual ~PacketDescriptor (); DataDescriptor * getDataDescriptor () { return ddscr; } Vector<FieldDescr*> * getFields () { return fields; } void addField (FieldDescr*); private: DataDescriptor *ddscr; Vector<FieldDescr*> *fields; }; struct Datum { void setUINT32 (uint32_t vv) { type = TYPE_UINT32; i = vv; } void setUINT64 (uint64_t vv) { type = TYPE_UINT64; ll = vv; } void setSTRING (char* vv) { type = TYPE_STRING; l = vv; } void setDOUBLE (double vv) { type = TYPE_DOUBLE; d = vv; } void setOBJ (void* vv) { type = TYPE_OBJ; p = vv; } VType_type type; union { int i; double d; char *l; void *p; unsigned long long ll; }; }; class Data { public: static Data *newData (VType_type); virtual ~Data () { } virtual VType_type type () { return TYPE_NONE; } virtual void reset () = 0; virtual long getSize () = 0; virtual int fetchInt (long i) = 0; virtual unsigned long long fetchULong (long i) = 0; virtual long long fetchLong (long i) = 0; virtual char *fetchString (long i) = 0; virtual double fetchDouble (long i) = 0; virtual void *fetchObject (long i) = 0; virtual void setDatumValue (long, const Datum*) = 0; virtual void setValue (long, uint64_t) = 0; virtual void setObjValue (long, void*) = 0; virtual int cmpValues (long idx1, long idx2) = 0; virtual int cmpDatumValue (long idx, const Datum *val) = 0; }; enum Data_flag { DDFLAG_NOSHOW = 0x01 }; class DataDescriptor { /* * An instance of this class stores the data packets for a specific * type of profiling, for example, clock profiling. * * Each packet consists of values for various properties. * For example, a timestamp is a property which is accessed with PROP_TSTAMP. * * Ideally, DataDescriptor contents are considered immutable after the * data is read in. setValue() should only be used during creation. * - The packets are in fixed order. This allows DataDescriptor <pkt_id> * to be treated as a stable handle. * - Sorting/filtering is handled by the DataView class * - In the future, if we need to add the ability to append new packets, * we might add a flag to show when the class is immutable and/or appendible */ public: DataDescriptor (int id, const char* name, const char* uname, int flags = 0); // master DataDescriptor (int id, const char* name, const char* uname, DataDescriptor*); // reference copy ~DataDescriptor (); // packets' descriptions int getId () { return id; } char * getName () { return name; } char * getUName () { return uname; } Vector<PropDescr*> * getProps () { return props; // packet properties } PropDescr *getProp (int prop_id); // packet property long getSize () { return *ref_size; // number of packets } long getFlags () { return flags; } // class to provide sorting and filtering DataView *createView (); DataView *createImmutableView (); DataView *createExtManagedView (); // packet property values (<pkt_id> is stable packet handle) int getIntValue (int prop_id, long pkt_id); unsigned long long getULongValue (int prop_id, long pkt_id); long long getLongValue (int prop_id, long pkt_id); void *getObjValue (int prop_id, long pkt_id); Vector<long long> *getSet (int prop_id); // list of sorted, unique values // table creation/reset void addProperty (PropDescr*); // add property to all packets long addRecord (); // add packet Data *getData (int prop_id); // get all packets void setDatumValue (int prop_id, long pkt_id, const Datum *val); void setValue (int prop_id, long pkt_id, uint64_t val); void setObjValue (int prop_id, long pkt_id, void *val); void reset (); // remove all packets (ym: TBR?) void setResolveFrInfoDone () { *ref_resolveFrameInfoDone = true; } bool isResolveFrInfoDone () { return *ref_resolveFrameInfoDone; }