Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 8b2aba5 in mainline


Ignore:
Timestamp:
2010-04-02T20:22:14Z (12 years ago)
Author:
Stanislav Kozina <stanislav.kozina@…>
Branches:
lfn, master
Children:
ee35ba0b
Parents:
8f56d93
Message:

top echoes also basic cpu info

Location:
uspace/app
Files:
7 edited

Legend:

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

    r8f56d93 r8b2aba5  
    150150        size_t i;
    151151        for (i = 0; i < cpu_count; ++i) {
    152                 printf("%2u (%4u Mhz): Busy ticks: %8llu, Idle ticks: %8llu\n", cpus[i].id,
     152                printf("%2u (%4u Mhz): Busy ticks: %6llu, Idle ticks: %6llu\n", cpus[i].id,
    153153                                (size_t)cpus[i].frequency_mhz, cpus[i].busy_ticks, cpus[i].idle_ticks);
    154154        }
  • uspace/app/top/ps.c

    r8f56d93 r8b2aba5  
    4141#include <malloc.h>
    4242#include <ps.h>
     43#include <sysinfo.h>
    4344#include "ps.h"
    4445
     
    9495}
    9596
     97unsigned int get_cpu_infos(uspace_cpu_info_t **out_infos)
     98{
     99        unsigned int cpu_count = sysinfo_value("cpu.count");
     100        uspace_cpu_info_t *cpus = malloc(cpu_count * sizeof(uspace_cpu_info_t));
     101        get_cpu_info(cpus);
     102
     103        *out_infos = cpus;
     104        return cpu_count;
     105}
     106
    96107/** @}
    97108 */
  • uspace/app/top/ps.h

    r8f56d93 r8b2aba5  
    3636#include <task.h>
    3737#include <kernel/ps/taskinfo.h>
     38#include <kernel/ps/cpuinfo.h>
    3839
    3940extern const char *thread_states[];
    4041extern unsigned int get_tasks(task_id_t **out_tasks);
    4142extern thread_info_t *get_threads(task_id_t taskid);
     43extern unsigned int get_cpu_infos(uspace_cpu_info_t **out_infos);
    4244
    4345#endif
  • uspace/app/top/screen.c

    r8f56d93 r8b2aba5  
    4646int rows;
    4747int colls;
     48int up_rows;
    4849
    4950#define WHITE 0xf0f0f0
     
    5960{
    6061        console_get_size(fphone(stdout), &colls, &rows);
     62        up_rows = 0;
    6163        console_cursor_visibility(fphone(stdout), 0);
    6264        resume_normal();
     
    6870        console_clear(fphone(stdout));
    6971        moveto(0, 0);
     72        up_rows = 0;
     73        fflush(stdout);
    7074}
    7175
     
    103107}
    104108
     109static inline void print_cpuinfo(data_t *data)
     110{
     111        unsigned int i;
     112        uspace_cpu_info_t *cpus = data->cpus;
     113        for (i = 0; i < data->cpu_count; ++i) {
     114                printf("Cpu%u (%4u Mhz): Busy ticks: %6llu, Idle Ticks: %6llu\n",
     115                        i, (unsigned int)cpus[i].frequency_mhz, cpus[i].busy_ticks,
     116                        cpus[i].idle_ticks);
     117                ++up_rows;
     118        }
     119}
     120
    105121static inline void print_tasks(data_t *data, int row)
    106122{
     
    116132        }
    117133}
    118 
    119134
    120135static inline void print_head(void)
     
    139154        print_load(data);
    140155        puts("\n");
     156        ++up_rows;
    141157        print_taskstat(data);
    142         puts("\n\n");
     158        puts("\n");
     159        ++up_rows;
     160        print_cpuinfo(data);
     161        puts("\n");
     162        ++up_rows;
    143163        print_head();
    144164        puts("\n");
  • uspace/app/top/screen.h

    r8f56d93 r8b2aba5  
    4444extern void print_data(data_t *data);
    4545
     46extern int up_rows;
     47#define PRINT_WARNING(message, ...) \
     48do { \
     49        moveto(up_rows - 1, 0); \
     50        printf(message, ##__VA_ARGS__); \
     51        fflush(stdout); \
     52} while (0)
     53
    4654#endif
    4755
  • uspace/app/top/top.c

    r8f56d93 r8b2aba5  
    3838#include <stdlib.h>
    3939#include <unistd.h>
    40 #include <io/console.h>
    4140#include <uptime.h>
    4241#include <task.h>
     
    5554#define MINUTE 60
    5655
    57 static void read_vars(data_t *target)
     56static void read_data(data_t *target)
    5857{
    5958        /* Read current time */
     
    8079        /* Read task ids */
    8180        target->task_count = get_tasks(&target->tasks);
     81
     82        /* Read cpu infos */
     83        target->cpu_count = get_cpu_infos(&target->cpus);
    8284}
     85
     86static void free_data(data_t *target)
     87{
     88        free(target->tasks);
     89}
     90
     91static inline void swap(data_t *first, data_t *second)
     92{
     93        data_t *temp;
     94        temp = first;
     95        first = second;
     96        second = temp;
     97}
     98
     99static data_t data[2];
    83100
    84101int main(int argc, char *argv[])
    85102{
    86         data_t old_data;
    87         data_t new_data;
     103        data_t *data1 = &data[0];
     104        data_t *data2 = &data[1];
    88105
    89106        /* Read initial stats */
    90107        printf("Reading initial data...\n");
    91         read_vars(&old_data);
     108        read_data(data1);
    92109        sleep(UPDATE_INTERVAL);
    93         read_vars(&new_data);
    94         print_data(&new_data);
    95         fflush(stdout);
     110        read_data(data2);
    96111
    97112        screen_init();
     113        print_data(data2);
    98114
    99115        /* And paint screen until death... */
     
    101117                char c = tgetchar(UPDATE_INTERVAL);
    102118                if (c < 0) {
    103                         read_vars(&new_data);
    104                         print_data(&new_data);
     119                        free_data(data1);
     120                        swap(data1, data2);
     121                        read_data(data2);
     122                        print_data(data2);
    105123                        continue;
    106124                }
    107125                switch (c) {
    108126                        case 'q':
     127                                clear_screen();
    109128                                return 0;
    110129                        default:
    111                                 moveto(10,10);
    112                                 printf("Unknown command: %c", c);
    113                                 fflush(stdout);
     130                                PRINT_WARNING("Unknown command: %c", c);
    114131                                break;
    115132                }
     
    117134        }
    118135
    119         free(new_data.tasks);
    120         puts("\n\n");
    121         fflush(stdout);
     136        free_data(data1);
     137        free_data(data2);
    122138        return 0;
    123139}
  • uspace/app/top/top.h

    r8f56d93 r8b2aba5  
    3535
    3636#include <task.h>
     37#include <kernel/ps/cpuinfo.h>
    3738
    3839typedef struct {
     
    5051        task_id_t *tasks;
    5152        unsigned int task_count;
     53
     54        uspace_cpu_info_t *cpus;
     55        unsigned int cpu_count;
    5256} data_t;
    5357
Note: See TracChangeset for help on using the changeset viewer.