um_body.append(' entry->pData = NULL;')
um_body.append(' } else')
um_body.append(' {')
- um_body.append(' glv_LogError("Failed to copy app memory into trace packet (idx = %u) on xglUnmapMemory\n", pHeader->global_packet_index);')
+ um_body.append(' glv_LogError("Failed to copy app memory into trace packet (idx = %u) on xglUnmapMemory\\n", pHeader->global_packet_index);')
um_body.append(' }')
um_body.append(' result = real_xglUnmapMemory(mem);')
um_body.append(' pPacket->mem = mem;')
hf_body.append('static void init_mem_info()')
hf_body.append('{')
hf_body.append(' g_memInfo.numEntrys = 0;')
- hf_body.append(' g_memInfo.capacity = 1024;')
+ hf_body.append(' g_memInfo.capacity = 4096;')
hf_body.append(' g_memInfo.pLastMapped = NULL;')
hf_body.append('')
hf_body.append(' g_memInfo.pEntrys = GLV_NEW_ARRAY(XGLAllocInfo, g_memInfo.capacity);')
hf_body.append(' XGLAllocInfo *entry;')
hf_body.append(' if (g_memInfo.numEntrys > g_memInfo.capacity)')
hf_body.append(' {')
- hf_body.append(' glv_LogError("get_mem_info_entry() bad internal state numEntrys\\n");')
+ hf_body.append(' glv_LogError("get_mem_info_entry() bad internal state numEntrys %u\\n", g_memInfo.numEntrys);')
hf_body.append(' return NULL;')
hf_body.append(' }')
hf_body.append('')
+ hf_body.append(' entry = g_memInfo.pEntrys;')
+ hf_body.append(' for (i = 0; i < g_memInfo.numEntrys; i++)')
+ hf_body.append(' {')
+ hf_body.append(' if ((entry + i)->valid == FALSE)')
+ hf_body.append(' return entry + i;')
+ hf_body.append(' }')
hf_body.append(' if (g_memInfo.numEntrys == g_memInfo.capacity)')
hf_body.append(' { // grow the array 2x')
hf_body.append(' g_memInfo.capacity *= 2;')
hf_body.append(' g_memInfo.pEntrys = (XGLAllocInfo *) GLV_REALLOC(g_memInfo.pEntrys, g_memInfo.capacity * sizeof(XGLAllocInfo));')
+ hf_body.append(' if (g_memInfo.pEntrys == NULL)')
+ hf_body.append(' glv_LogError("get_mem_info_entry() realloc failed\\n");')
+ hf_body.append(' //glv_LogInfo("realloc memInfo from %u to %u\\n", g_memInfo.capacity /2, g_memInfo.capacity);')
hf_body.append(' //init the newly added entrys')
hf_body.append(' init_mem_info_entrys(g_memInfo.pEntrys + g_memInfo.capacity / 2, g_memInfo.capacity / 2);')
hf_body.append(' }')
hf_body.append('')
hf_body.append(' assert(g_memInfo.numEntrys < g_memInfo.capacity);')
- hf_body.append(' entry = g_memInfo.pEntrys;')
- hf_body.append(' for (i = 0; i < g_memInfo.capacity; i++)')
- hf_body.append(' {')
- hf_body.append(' if ((entry + i)->valid == FALSE)')
- hf_body.append(' return entry + i;')
- hf_body.append(' }')
- hf_body.append('')
- hf_body.append(' glv_LogError("get_mem_info_entry() did not find an entry\\n");')
- hf_body.append(' return NULL;')
+ hf_body.append(' entry = g_memInfo.pEntrys + g_memInfo.numEntrys;')
+ hf_body.append(' g_memInfo.numEntrys++;')
+ hf_body.append(' assert(entry->valid == FALSE);')
+ hf_body.append(' return entry;')
hf_body.append('}')
hf_body.append('')
hf_body.append('// caller must hold the g_memInfoLock')
hf_body.append(' entry->handle = handle;')
hf_body.append(' entry->size = size;')
hf_body.append(' entry->pData = pData; // NOTE: xglFreeMemory will free this mem, so no malloc()')
- hf_body.append(' g_memInfo.numEntrys++;')
hf_body.append(' }')
hf_body.append(' glv_leave_critical_section(&g_memInfoLock);')
hf_body.append('}')
hf_body.append(' entry->size = 0;')
hf_body.append(' entry->handle = NULL;')
hf_body.append('')
- hf_body.append(' g_memInfo.numEntrys--;')
+ hf_body.append(' //TODO go thru array and set numEntrys based on last valid entry g_memInfo.numEntrys--;')
hf_body.append(' if (entry == g_memInfo.pLastMapped)')
hf_body.append(' g_memInfo.pLastMapped = NULL;')
hf_body.append(' if (g_memInfo.numEntrys == 0)')