trunk/src/osd/windows/winmain.c
| r245688 | r245689 | |
| 1354 | 1354 | m_stack_depth(stack_depth), |
| 1355 | 1355 | m_entry_stride(stack_depth + 2), |
| 1356 | 1356 | m_buffer(max_seconds * 1000 * m_entry_stride), |
| 1357 | | m_buffer_ptr(m_buffer), |
| 1358 | | m_buffer_end(m_buffer + max_seconds * 1000 * m_entry_stride) |
| 1357 | m_buffer_ptr(&m_buffer[0]), |
| 1358 | m_buffer_end(&m_buffer[0] + max_seconds * 1000 * m_entry_stride) |
| 1359 | 1359 | { |
| 1360 | 1360 | } |
| 1361 | 1361 | |
| r245688 | r245689 | |
| 1455 | 1455 | symbols.cache_symbols(); |
| 1456 | 1456 | |
| 1457 | 1457 | // step 1: find the base of each entry |
| 1458 | | for (FPTR *current = m_buffer; current < m_buffer_ptr; current += m_entry_stride) |
| 1458 | for (FPTR *current = &m_buffer[0]; current < m_buffer_ptr; current += m_entry_stride) |
| 1459 | 1459 | { |
| 1460 | 1460 | assert(current[0] >= 1 && current[0] < m_entry_stride); |
| 1461 | 1461 | |
| r245688 | r245689 | |
| 1465 | 1465 | } |
| 1466 | 1466 | |
| 1467 | 1467 | // step 2: sort the results |
| 1468 | | qsort(m_buffer, (m_buffer_ptr - m_buffer) / m_entry_stride, m_entry_stride * sizeof(FPTR), compare_address); |
| 1468 | qsort(&m_buffer[0], (m_buffer_ptr - &m_buffer[0]) / m_entry_stride, m_entry_stride * sizeof(FPTR), compare_address); |
| 1469 | 1469 | |
| 1470 | 1470 | // step 3: count and collapse unique entries |
| 1471 | 1471 | UINT32 total_count = 0; |
| 1472 | | for (FPTR *current = m_buffer; current < m_buffer_ptr; ) |
| 1472 | for (FPTR *current = &m_buffer[0]; current < m_buffer_ptr; ) |
| 1473 | 1473 | { |
| 1474 | 1474 | int count = 1; |
| 1475 | 1475 | FPTR *scan; |
| r245688 | r245689 | |
| 1486 | 1486 | } |
| 1487 | 1487 | |
| 1488 | 1488 | // step 4: sort the results again, this time by frequency |
| 1489 | | qsort(m_buffer, (m_buffer_ptr - m_buffer) / m_entry_stride, m_entry_stride * sizeof(FPTR), compare_frequency); |
| 1489 | qsort(&m_buffer[0], (m_buffer_ptr - &m_buffer[0]) / m_entry_stride, m_entry_stride * sizeof(FPTR), compare_frequency); |
| 1490 | 1490 | |
| 1491 | 1491 | // step 5: print the results |
| 1492 | 1492 | UINT32 num_printed = 0; |
| 1493 | | for (FPTR *current = m_buffer; current < m_buffer_ptr && num_printed < 30; current += m_entry_stride) |
| 1493 | for (FPTR *current = &m_buffer[0]; current < m_buffer_ptr && num_printed < 30; current += m_entry_stride) |
| 1494 | 1494 | { |
| 1495 | 1495 | // once we hit 0 frequency, we're done |
| 1496 | 1496 | if (current[0] == 0) |