Changeset 452268a in mainline for uspace/app/top/top.c


Ignore:
Timestamp:
2010-04-03T16:52:07Z (14 years ago)
Author:
Stanislav Kozina <stanislav.kozina@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
acc3f745
Parents:
ee35ba0b
Message:

top echoes also percentage differencies of task cycles

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/top/top.c

    ree35ba0b r452268a  
    8080
    8181        /* Read task ids */
    82         target->task_count = get_tasks(&target->tasks);
     82        target->task_count = get_tasks(&target->taskinfos);
    8383
    8484        /* Read cpu infos */
     
    102102                uint64_t busy = new_data->cpus[i].busy_ticks - old_data->cpus[i].busy_ticks;
    103103                uint64_t sum = idle + busy;
    104                 new_data->cpu_perc[i].idle = ((float)(idle * 100) / sum);
    105                 new_data->cpu_perc[i].busy = ((float)(busy * 100) / sum);
    106         }
     104                new_data->cpu_perc[i].idle = (float)(idle * 100) / sum;
     105                new_data->cpu_perc[i].busy = (float)(busy * 100) / sum;
     106        }
     107
     108        /* For all tasks compute sum and differencies of all cycles */
     109        uint64_t pages_total = 0;
     110        uint64_t ucycles_total = 0;
     111        uint64_t kcycles_total = 0;
     112        uint64_t *ucycles_diff = malloc(new_data->task_count * sizeof(uint64_t));
     113        uint64_t *kcycles_diff = malloc(new_data->task_count * sizeof(uint64_t));
     114        unsigned int j = 0;
     115        for (i = 0; i < new_data->task_count; ++i) {
     116                /* Jump over all death tasks */
     117                while (old_data->taskinfos[j].taskid < new_data->taskinfos[i].taskid)
     118                        ++j;
     119                if (old_data->taskinfos[j].taskid > new_data->taskinfos[i].taskid) {
     120                        /* This is newly borned task, ignore it */
     121                        ucycles_diff[i] = 0;
     122                        kcycles_diff[i] = 0;
     123                        continue;
     124                }
     125                /* Now we now we have task with same id */
     126                ucycles_diff[i] = new_data->taskinfos[i].ucycles - old_data->taskinfos[j].ucycles;
     127                kcycles_diff[i] = new_data->taskinfos[i].kcycles - old_data->taskinfos[j].kcycles;
     128
     129                pages_total += new_data->taskinfos[i].pages;
     130                ucycles_total += ucycles_diff[i];
     131                kcycles_total += kcycles_diff[i];
     132        }
     133
     134        /* And now compute percental change */
     135        new_data->task_perc = malloc(new_data->task_count * sizeof(task_perc_t));
     136        for (i = 0; i < new_data->task_count; ++i) {
     137                new_data->task_perc[i].pages = (float)(new_data->taskinfos[i].pages * 100) / pages_total;
     138                new_data->task_perc[i].ucycles = (float)(ucycles_diff[i] * 100) / ucycles_total;
     139                new_data->task_perc[i].kcycles = (float)(kcycles_diff[i] * 100) / kcycles_total;
     140        }
     141
     142        /* And free temporary structures */
     143        free(ucycles_diff);
     144        free(kcycles_diff);
    107145}
    108146
    109147static void free_data(data_t *target)
    110148{
    111         free(target->tasks);
     149        free(target->taskinfos);
    112150        free(target->cpus);
    113151        free(target->cpu_perc);
     152        free(target->task_perc);
    114153}
    115154
Note: See TracChangeset for help on using the changeset viewer.