| 518 | } |
| 519 | |
| 520 | void hx::Telemetry::HXTRealloc(void* old_obj, void* new_obj, int new_size) |
| 521 | { |
| 522 | if (!allocations_enabled) return; |
| 523 | int old_obj_id = __hxt_ptr_id(old_obj); |
| 524 | int new_obj_id = __hxt_ptr_id(new_obj); |
| 525 | |
| 526 | alloc_mutex.lock(); |
| 527 | |
| 528 | // Only track reallocations of objects currently known to be allocated |
| 529 | std::map<void*, hx::Telemetry*>::iterator exist = alloc_map.find(old_obj); |
| 530 | if (exist != alloc_map.end()) { |
| 531 | Telemetry* t = exist->second; |
| 532 | t->allocation_data->push_back(2); // realloc flag (necessary?) |
| 533 | t->allocation_data->push_back(old_obj_id); |
| 534 | t->allocation_data->push_back(new_obj_id); |
| 535 | t->allocation_data->push_back(new_size); |
| 536 | |
| 537 | //printf("Object at %016lx moving to %016lx, new_size = %d bytes\n", old_obj, new_obj, new_size); |
| 538 | |
| 539 | // HXT debug: Check for id collision |
| 540 | #ifdef HXCPP_TELEMETRY_DEBUG |
| 541 | std::map<void*, hx::Telemetry*>::iterator exist_new = alloc_map.find(new_obj); |
| 542 | if (exist_new != alloc_map.end()) { |
| 543 | printf("HXT ERR: Object id collision (reloc)! at on %016lx, id=%016lx\n", (unsigned long)new_obj, (unsigned long)new_obj_id); |
| 544 | throw "uh oh"; |
| 545 | } |
| 546 | #endif |
| 547 | |
| 548 | //__hxcpp_set_hxt_finalizer(old_obj, (void*)0); // remove old finalizer -- should GCInternal.InternalRealloc do this? |
| 549 | HXTReclaimInternal(old_obj); // count old as reclaimed |
| 550 | } else { |
| 551 | //printf("Not tracking re-alloc of untracked %016lx, id=%016lx\n", old_obj, old_obj_id); |
| 552 | alloc_mutex.unlock(); |
| 553 | return; |
| 554 | } |
| 555 | |
| 556 | alloc_map[new_obj] = this; |
| 557 | //__hxcpp_set_hxt_finalizer(new_obj, (void*)HXTReclaim); |
| 558 | |
| 559 | //printf("Tracking re-alloc from %016lx, id=%016lx to %016lx, id=%016lx at %f\n", old_obj, old_obj_id, new_obj, new_obj_id, __hxcpp_time_stamp()); |
| 560 | |
| 561 | alloc_mutex.unlock(); |
| 562 | } |
| 563 | |
| 564 | } // end namespace hx |
| 565 |
no test coverage detected