| /* Copyright (C) 2021 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 _HEAPDATA_H | |
| #define _HEAPDATA_H | |
| #include "gp-defs.h" | |
| #include "gp-time.h" | |
| #include "vec.h" | |
| #include "data_pckts.h" | |
| #include "Histable.h" | |
| #define TOTAL_HEAPNAME NTXT("<Total>") | |
| #define TOTAL_STACK_ID 0 | |
| #define _1KB 1024 | |
| #define _8KB 8192 | |
| #define _32KB 32768 | |
| #define _128KB 131072 | |
| #define _256KB 262144 | |
| #define _512KB 524288 | |
| #define _1000KB 1048576 | |
| #define _10MB 10485760 | |
| #define _100MB 104857600 | |
| #define _1GB 1073741824 | |
| #define _10GB 10737418240 | |
| #define _100GB 107374182400 | |
| #define _1TB 1099511627776 | |
| #define _10TB 10995116277760 | |
| class HeapData : public Histable | |
| { | |
| friend class HeapActivity; | |
| public: | |
| HeapData (char *sName); | |
| HeapData (HeapData *hData); | |
| ~HeapData (); | |
| char *get_raw_name (Histable::NameFormat nfmt); | |
| void init (); | |
| void setStackName (char* sName); | |
| void setPeakMemUsage (int64_t pmu, uint64_t sId, hrtime_t ts, int procId, int uei); | |
| virtual char *get_name (Histable::NameFormat nfmt); | |
| virtual void set_name (char * _name); | |
| virtual Histable *convertto (Histable_type, Histable* = NULL); | |
| virtual Histable_type | |
| get_type () | |
| { | |
| return histType; | |
| } | |
| virtual uint64_t | |
| get_addr () | |
| { | |
| return stackId; | |
| } | |
| uint64_t | |
| get_index () | |
| { | |
| return stackId; | |
| } | |
| char * | |
| getStackName () | |
| { | |
| return stackName; | |
| } | |
| void | |
| addAllocEvent (uint64_t nb) | |
| { | |
| allocBytes += nb; | |
| allocCnt++; | |
| } | |
| uint64_t | |
| getAllocBytes () | |
| { | |
| return allocBytes; | |
| } | |
| int32_t | |
| getAllocCnt () | |
| { | |
| return allocCnt; | |
| } | |
| void | |
| addLeakEvent (uint64_t nb) | |
| { | |
| leakBytes += nb; | |
| leakCnt++; | |
| } | |
| uint64_t | |
| getLeakBytes () | |
| { | |
| return leakBytes; | |
| } | |
| int32_t | |
| getLeakCnt () | |
| { | |
| return leakCnt; | |
| } | |
| void | |
| setStackId (uint64_t sId) | |
| { | |
| stackId = sId; | |
| } | |
| uint64_t | |
| getStackId () | |
| { | |
| return stackId; | |
| } | |
| void | |
| setTimestamp (hrtime_t ts) | |
| { | |
| timestamp = ts; | |
| } | |
| hrtime_t | |
| getTimestamp () | |
| { | |
| return timestamp; | |
| } | |
| void | |
| setHistType (Histable::Type hType) | |
| { | |
| histType = hType; | |
| } | |
| Histable::Type | |
| getHistType () | |
| { | |
| return histType; | |
| } | |
| int64_t | |
| getPeakMemUsage () | |
| { | |
| return peakMemUsage; | |
| } | |
| Vector<uint64_t> * | |
| getPeakStackIds () | |
| { | |
| return peakStackIds; | |
| } | |
| Vector<hrtime_t> * | |
| getPeakTimestamps () | |
| { | |
| return peakTimestamps; | |
| } | |
| void | |
| setPid (int procId) | |
| { | |
| pid = procId; | |
| } | |
| int | |
| getPid () | |
| { | |
| return pid; | |
| } | |
| void | |
| setUserExpId (int uei) | |
| { | |
| userExpId = uei; | |
| } | |
| int | |
| getUserExpId () | |
| { | |
| return userExpId; | |
| } | |
| void setAllocStat (int64_t nb); | |
| int64_t | |
| getASmallestBytes () | |
| { | |
| return aSmallestBytes; | |
| } | |
| int64_t | |
| getALargestBytes () | |
| { | |
| return aLargestBytes; | |
| } | |
| int32_t | |
| getA0KB1KBCnt () | |
| { | |
| return a0KB1KBCnt; | |
| } | |
| int32_t | |
| getA1KB8KBCnt () | |
| { | |
| return a1KB8KBCnt; | |
| } | |
| int32_t | |
| getA8KB32KBCnt () | |
| { | |
| return a8KB32KBCnt; | |
| } | |
| int32_t | |
| getA32KB128KBCnt () | |
| { | |
| return a32KB128KBCnt; | |
| } | |
| int32_t | |
| getA128KB256KBCnt () | |
| { | |
| return a128KB256KBCnt; | |
| } | |
| int32_t | |
| getA256KB512KBCnt () | |
| { | |
| return a256KB512KBCnt; | |
| } | |
| int32_t | |
| getA512KB1000KBCnt () | |
| { | |
| return a512KB1000KBCnt; | |
| } | |
| int32_t | |
| getA1000KB10MBCnt () | |
| { | |
| return a1000KB10MBCnt; | |
| } | |
| int32_t | |
| getA10MB100MBCnt () | |
| { | |
| return a10MB100MBCnt; | |
| } | |
| int32_t | |
| getA100MB1GBCnt () | |
| { | |
| return a100MB1GBCnt; | |
| } | |
| int32_t | |
| getA1GB10GBCnt () | |
| { | |
| return a1GB10GBCnt; | |
| } | |
| int32_t | |
| getA10GB100GBCnt () | |
| { | |
| return a10GB100GBCnt; | |
| } | |
| int32_t | |
| getA100GB1TBCnt () | |
| { | |
| return a100GB1TBCnt; | |
| } | |
| int32_t | |
| getA1TB10TBCnt () | |
| { | |
| return a1TB10TBCnt; | |
| } | |
| void setLeakStat (int64_t nb); | |
| int64_t | |
| getLSmallestBytes () | |
| { | |
| return lSmallestBytes; | |
| } | |
| int64_t | |
| getLLargestBytes () | |
| { | |
| return lLargestBytes; | |
| } | |
| int32_t | |
| getL0KB1KBCnt () | |
| { | |
| return l0KB1KBCnt; | |
| } | |
| int32_t | |
| getL1KB8KBCnt () | |
| { | |
| return l1KB8KBCnt; | |
| } | |
| int32_t | |
| getL8KB32KBCnt () | |
| { | |
| return l8KB32KBCnt; | |
| } | |
| int32_t | |
| getL32KB128KBCnt () | |
| { | |
| return l32KB128KBCnt; | |
| } | |
| int32_t | |
| getL128KB256KBCnt () | |
| { | |
| return l128KB256KBCnt; | |
| } | |
| int32_t | |
| getL256KB512KBCnt () | |
| { | |
| return l256KB512KBCnt; | |
| } | |
| int32_t | |
| getL512KB1000KBCnt () | |
| { | |
| return l512KB1000KBCnt; | |
| } | |
| int32_t | |
| getL1000KB10MBCnt () | |
| { | |
| return l1000KB10MBCnt; | |
| } | |
| int32_t | |
| getL10MB100MBCnt () | |
| { | |
| return l10MB100MBCnt; | |
| } | |
| int32_t | |
| getL100MB1GBCnt () | |
| { | |
| return l100MB1GBCnt; | |
| } | |
| int32_t | |
| getL1GB10GBCnt () | |
| { | |
| return l1GB10GBCnt; | |
| } | |
| int32_t | |
| getL10GB100GBCnt () | |
| { | |
| return l10GB100GBCnt; | |
| } | |
| int32_t | |
| getL100GB1TBCnt () | |
| { | |
| return l100GB1TBCnt; | |
| } | |
| int32_t | |
| getL1TB10TBCnt () | |
| { | |
| return l1TB10TBCnt; | |
| } | |
| private: | |
| char *stackName; // stack name | |
| uint64_t allocBytes; // The total bytes allocated | |
| uint64_t leakBytes; // The total bytes leaked | |
| int32_t allocCnt; // The alloc count | |
| int32_t leakCnt; // The leak count | |
| Histable::Type histType; // The Histable type: HEAPCALLSTACK | |
| int64_t peakMemUsage; // Keep track of peak memory usage | |
| uint64_t stackId; | |
| Vector<uint64_t> *peakStackIds; // The peak memory usage stack ids | |
| hrtime_t timestamp; | |
| Vector<hrtime_t> *peakTimestamps; // The peak data | |
| int pid; // The process id | |
| int userExpId; // The experiment id | |
| int64_t aSmallestBytes; | |
| int64_t aLargestBytes; | |
| int32_t a0KB1KBCnt; | |
| int32_t a1KB8KBCnt; | |
| int32_t a8KB32KBCnt; | |
| int32_t a32KB128KBCnt; | |
| int32_t a128KB256KBCnt; | |
| int32_t a256KB512KBCnt; | |
| int32_t a512KB1000KBCnt; | |
| int32_t a1000KB10MBCnt; | |
| int32_t a10MB100MBCnt; | |
| int32_t a100MB1GBCnt; | |
| int32_t a1GB10GBCnt; | |
| int32_t a10GB100GBCnt; | |
| int32_t a100GB1TBCnt; | |
| int32_t a1TB10TBCnt; | |
| int64_t lSmallestBytes; | |
| int64_t lLargestBytes; | |
| int32_t l0KB1KBCnt; | |
| int32_t l1KB8KBCnt; | |
| int32_t l8KB32KBCnt; | |
| int32_t l32KB128KBCnt; | |
| int32_t l128KB256KBCnt; | |
| int32_t l256KB512KBCnt; | |
| int32_t l512KB1000KBCnt; | |
| int32_t l1000KB10MBCnt; | |
| int32_t l10MB100MBCnt; | |
| int32_t l100MB1GBCnt; | |
| int32_t l1GB10GBCnt; | |
| int32_t l10GB100GBCnt; | |
| int32_t l100GB1TBCnt; | |
| int32_t l1TB10TBCnt; | |
| }; | |
| #endif |