79 : _name(NULL), _u(u), _v(v), _valuep(NULL), |
79 : _name(NULL), _u(u), _v(v), _valuep(NULL), |
80 _on_c_heap(false) { |
80 _on_c_heap(false) { |
81 |
81 |
82 const char* prefix = PerfDataManager::ns_to_string(ns); |
82 const char* prefix = PerfDataManager::ns_to_string(ns); |
83 |
83 |
84 _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2); |
84 _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2, mtInternal); |
85 assert(_name != NULL && strlen(name) != 0, "invalid name"); |
85 assert(_name != NULL && strlen(name) != 0, "invalid name"); |
86 |
86 |
87 if (ns == NULL_NS) { |
87 if (ns == NULL_NS) { |
88 // No prefix is added to counters with the NULL_NS namespace. |
88 // No prefix is added to counters with the NULL_NS namespace. |
89 strcpy(_name, name); |
89 strcpy(_name, name); |
109 } |
109 } |
110 } |
110 } |
111 |
111 |
112 PerfData::~PerfData() { |
112 PerfData::~PerfData() { |
113 if (_name != NULL) { |
113 if (_name != NULL) { |
114 FREE_C_HEAP_ARRAY(char, _name); |
114 FREE_C_HEAP_ARRAY(char, _name, mtInternal); |
115 } |
115 } |
116 if (is_on_c_heap()) { |
116 if (is_on_c_heap()) { |
117 FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep); |
117 FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep, mtInternal); |
118 } |
118 } |
119 } |
119 } |
120 |
120 |
121 void PerfData::create_entry(BasicType dtype, size_t dsize, size_t vlen) { |
121 void PerfData::create_entry(BasicType dtype, size_t dsize, size_t vlen) { |
122 |
122 |
135 char* psmp = PerfMemory::alloc(size); |
135 char* psmp = PerfMemory::alloc(size); |
136 |
136 |
137 if (psmp == NULL) { |
137 if (psmp == NULL) { |
138 // out of PerfMemory memory resources. allocate on the C heap |
138 // out of PerfMemory memory resources. allocate on the C heap |
139 // to avoid vm termination. |
139 // to avoid vm termination. |
140 psmp = NEW_C_HEAP_ARRAY(char, size); |
140 psmp = NEW_C_HEAP_ARRAY(char, size, mtInternal); |
141 _on_c_heap = true; |
141 _on_c_heap = true; |
142 } |
142 } |
143 |
143 |
144 // compute the addresses for the name and data |
144 // compute the addresses for the name and data |
145 char* cname = psmp + sizeof(PerfDataEntry); |
145 char* cname = psmp + sizeof(PerfDataEntry); |
557 return p; |
557 return p; |
558 } |
558 } |
559 |
559 |
560 PerfDataList::PerfDataList(int length) { |
560 PerfDataList::PerfDataList(int length) { |
561 |
561 |
562 _set = new(ResourceObj::C_HEAP) PerfDataArray(length, true); |
562 _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(length, true); |
563 } |
563 } |
564 |
564 |
565 PerfDataList::PerfDataList(PerfDataList* p) { |
565 PerfDataList::PerfDataList(PerfDataList* p) { |
566 |
566 |
567 _set = new(ResourceObj::C_HEAP) PerfDataArray(p->length(), true); |
567 _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(p->length(), true); |
568 |
568 |
569 _set->appendAll(p->get_impl()); |
569 _set->appendAll(p->get_impl()); |
570 } |
570 } |
571 |
571 |
572 PerfDataList::~PerfDataList() { |
572 PerfDataList::~PerfDataList() { |