Changeset 23191 for titan/titan/debug.h


Ignore:
Timestamp:
Sep 1, 2013, 11:25:32 AM (6 years ago)
Author:
nit
Message:

[titan] optimize stacktrace

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/debug.h

    r23187 r23191  
    1717void __cyg_profile_func_enter(void *this_fn, void* call_size)
    1818{
    19         int i = 0, freeid = -1;
     19        int i = 0, treffer = 0;
    2020        pthread_t threadid = pthread_self();
    2121
    2222        for(i = 0; i < MAXSTACKTRACE; i++)
    2323        {
    24                 if(stacktrace[i].thread == NULL && freeid == -1) freeid = i;
    2524                if(stacktrace[i].thread == threadid)
    2625                {
    2726                        stacktrace[i].func[stacktrace[i].pos] = this_fn;
    2827                        stacktrace[i].pos++;
    29                         if(stacktrace[i].pos >= MAXSTACKTRACE - 1) stacktrace[i].pos = MAXSTACKTRACE - 1;
    30                         freeid = -2;
     28                        if(stacktrace[i].pos == MAXSTACKTRACE) stacktrace[i].pos = MAXSTACKTRACE - 1;
     29                        treffer = 1;
     30                        break;
    3131                }
    3232        }
    3333
    34         if(freeid >= -1)
     34        if(treffer == 0)
    3535        {
    36                 stacktrace[freeid].thread = threadid;
    37                 stacktrace[freeid].func[stacktrace[freeid].pos] = this_fn;
    38                 stacktrace[freeid].pos++;
    39                 if(stacktrace[i].pos >= MAXSTACKTRACE) stacktrace[i].pos = MAXSTACKTRACE - 1;
     36                for(i = 0; i < MAXSTACKTRACE; i++)
     37                {
     38                        if(stacktrace[i].pos == 0)
     39                        {
     40                                stacktrace[i].thread = threadid;
     41                                stacktrace[i].func[stacktrace[i].pos] = this_fn;
     42                                stacktrace[i].pos++;
     43                                if(stacktrace[i].pos == MAXSTACKTRACE) stacktrace[i].pos = MAXSTACKTRACE - 1;
     44                                break;
     45                        }
     46                }
    4047        }
    4148}
     
    5158                if(stacktrace[i].thread == threadid)
    5259                {
    53                         stacktrace[i].pos--;
    54                         if(stacktrace[i].pos < 0) stacktrace[i].pos = 0;
    55                         stacktrace[i].func[stacktrace[i].pos] = NULL;
    56                         if(stacktrace[i].pos == 0) stacktrace[i].thread = NULL;
     60                        if(stacktrace[i].pos > 0) stacktrace[i].pos--;
     61                        break;
    5762                }
    5863        }
Note: See TracChangeset for help on using the changeset viewer.