mirror of
https://github.com/darlinghq/darling-top.git
synced 2024-11-26 21:40:24 +00:00
175 lines
5.6 KiB
C
175 lines
5.6 KiB
C
/*
|
|
* Copyright (c) 2008 Apple Computer, Inc. All rights reserved.
|
|
*
|
|
* @APPLE_LICENSE_HEADER_START@
|
|
*
|
|
* The contents of this file constitute Original Code as defined in and
|
|
* are subject to the Apple Public Source License Version 1.1 (the
|
|
* "License"). You may not use this file except in compliance with the
|
|
* License. Please obtain a copy of the License at
|
|
* http://www.apple.com/publicsource and read it before using this file.
|
|
*
|
|
* This Original Code and all software distributed under the License are
|
|
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
|
|
* License for the specific language governing rights and limitations
|
|
* under the License.
|
|
*
|
|
* @APPLE_LICENSE_HEADER_END@
|
|
*/
|
|
|
|
#ifndef STATISTIC_H
|
|
#define STATISTIC_H
|
|
|
|
#include <stdio.h>
|
|
#include <inttypes.h>
|
|
#include <curses.h>
|
|
#include <panel.h>
|
|
#include <stdbool.h>
|
|
|
|
/*
|
|
* Extend this if we add another type.
|
|
*
|
|
* These types are used for sorting, and priority of display. Make sure to add
|
|
* a matching entry to statistic_name_map in statistic.c.
|
|
*/
|
|
enum {
|
|
STATISTIC_PID, STATISTIC_COMMAND, STATISTIC_CPU, STATISTIC_CPU_ME,
|
|
STATISTIC_CPU_OTHERS, STATISTIC_BOOSTS, STATISTIC_TIME,
|
|
STATISTIC_THREADS, STATISTIC_PORTS, STATISTIC_MREGION,
|
|
#ifdef TOP_ANONYMOUS_MEMORY
|
|
STATISTIC_PMEM, STATISTIC_RPRVT, STATISTIC_PURG, STATISTIC_COMPRESSED,
|
|
#else /* defined(TOP_ANONYMOUS_MEMORY) */
|
|
STATISTIC_RPRVT, STATISTIC_RSHRD, STATISTIC_RSIZE,
|
|
#endif /* !defined(TOP_ANONYMOUS_MEMORY) */
|
|
STATISTIC_VSIZE,
|
|
/* end of entries in same order as old top */
|
|
STATISTIC_VPRVT,
|
|
STATISTIC_INSTRS, STATISTIC_CYCLES,
|
|
STATISTIC_PGRP, STATISTIC_PPID, STATISTIC_PSTATE,
|
|
STATISTIC_UID, STATISTIC_WORKQUEUE, STATISTIC_FAULTS, STATISTIC_COW_FAULTS,
|
|
STATISTIC_MESSAGES_SENT, STATISTIC_MESSAGES_RECEIVED, STATISTIC_SYSBSD,
|
|
STATISTIC_SYSMACH, STATISTIC_CSW, STATISTIC_PAGEINS, STATISTIC_KPRVT, STATISTIC_KSHRD,
|
|
STATISTIC_IDLEWAKE,
|
|
STATISTIC_POWERSCORE,
|
|
STATISTIC_USER,
|
|
NUM_STATISTICS,
|
|
};
|
|
|
|
struct statistic;
|
|
struct statistics_controller;
|
|
|
|
struct statistic_name_map {
|
|
int e;
|
|
struct statistic *(*creator)(WINDOW *parent, const char *name);
|
|
const char *name;
|
|
};
|
|
|
|
extern struct statistic_name_map statistic_name_map[];
|
|
|
|
struct statistic_state {
|
|
int type;
|
|
char name[50];
|
|
struct statistic *(*create_statistic)(WINDOW *parent, const char *name);
|
|
struct statistic *instance;
|
|
};
|
|
|
|
struct statistics_controller {
|
|
void *globalstats;
|
|
WINDOW *parent;
|
|
struct statistic_state state[NUM_STATISTICS];
|
|
int total_possible_statistics;
|
|
int total_active_statistics;
|
|
|
|
void (*reset_insertion)(struct statistics_controller *c);
|
|
void (*insert_sample)(struct statistics_controller *c, const void *sample);
|
|
void (*remove_tail)(struct statistics_controller *c);
|
|
void (*insert_tail)(struct statistics_controller *c);
|
|
int (*get_total_possible)(struct statistics_controller *c);
|
|
int (*get_total_active)(struct statistics_controller *c);
|
|
void (*iterate)(struct statistics_controller *c,
|
|
bool (*func)(struct statistic *, void *),
|
|
void *ptr);
|
|
};
|
|
|
|
struct statistic_size {
|
|
int width, height;
|
|
};
|
|
|
|
struct statistic_destructor {
|
|
/* This provides a destructor that may be called to cleanup a statistic. */
|
|
void (*destructor) (struct statistic *s, void *ptr);
|
|
/* This is passed to the callback stored above. */
|
|
void *ptr;
|
|
struct statistic_destructor *next;
|
|
};
|
|
|
|
struct statistic_callbacks {
|
|
void (*draw) (struct statistic *s, int x);
|
|
bool (*resize_cells) (struct statistic *s, struct statistic_size *size);
|
|
bool (*move_cells) (struct statistic *s, int x, int y);
|
|
void (*get_request_size) (struct statistic *s);
|
|
void (*get_minimum_size) (struct statistic *s);
|
|
bool (*insert_cell) (struct statistic *s, const void *sample);
|
|
void (*reset_insertion) (struct statistic *s);
|
|
};
|
|
|
|
struct statistic {
|
|
WINDOW *parent;
|
|
WINDOW *window;
|
|
PANEL *panel;
|
|
int type; /* The STATISTIC enum type from above. */
|
|
void *cells; /* This usually stores a struct generic_cell. */
|
|
void *ptr; /* This is for private data created at the time of
|
|
* create_statistic.
|
|
*/
|
|
char *header;
|
|
|
|
bool visible;
|
|
|
|
struct statistics_controller *controller;
|
|
|
|
/* Used for profiling: */
|
|
uint64_t time_consumed;
|
|
uint64_t runs;
|
|
|
|
struct statistic_callbacks callbacks;
|
|
struct statistic_destructor *destructors;
|
|
struct statistic_size request_size; /* Used with get_request_size */
|
|
struct statistic_size actual_size;
|
|
struct statistic_size minimum_size;
|
|
struct statistic *previous, *next;
|
|
};
|
|
|
|
|
|
/* This should be called before any of the functions below: */
|
|
struct statistics_controller *create_statistics_controller(WINDOW *parent);
|
|
|
|
/*
|
|
* This takes a STATISTIC_ enum type from above, a WINDOW parent for a derwin,
|
|
* and a pointer of some sort (if desired for extra data).
|
|
*
|
|
* This returns NULL when an error occurs.
|
|
*/
|
|
struct statistic *create_statistic(int type, WINDOW *parent, void *ptr,
|
|
struct statistic_callbacks *callbacks,
|
|
const char *name);
|
|
|
|
/*
|
|
* This destroys the statistic and calls any destructors necessary.
|
|
*/
|
|
void destroy_statistic(struct statistic *s);
|
|
|
|
/*
|
|
* This creates a callback that is invoked when destroy_statistic is called.
|
|
*
|
|
* This returns true when an error occurs.
|
|
*/
|
|
bool create_statistic_destructor(struct statistic *s,
|
|
void (*destructor) (struct statistic *, void *),
|
|
void *ptr);
|
|
|
|
#endif /*STATISTIC_H*/
|