1/* 2 * Copyright (c) 2008 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * The contents of this file constitute Original Code as defined in and 7 * are subject to the Apple Public Source License Version 1.1 (the 8 * "License"). You may not use this file except in compliance with the 9 * License. Please obtain a copy of the License at 10 * http://www.apple.com/publicsource and read it before using this file. 11 * 12 * This Original Code and all software distributed under the License are 13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17 * License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * @APPLE_LICENSE_HEADER_END@ 21 */ 22 23#include <string.h> 24#include <stdlib.h> 25#include <assert.h> 26#include "top.h" 27#include "libtop.h" 28#include "user.h" 29#include "generic.h" 30#include "preferences.h" 31#include "uinteger.h" 32 33static bool faults_insert_cell(struct statistic *s, const void *sample) { 34 const libtop_psamp_t *psamp = sample; 35 char buf[GENERIC_INT_SIZE]; 36 37 if(top_uinteger_format_result(buf, sizeof(buf), 38 psamp->faults.now, 39 psamp->faults.previous, 40 psamp->faults.began)) { 41 return true; 42 } 43 44 return generic_insert_cell(s, buf); 45} 46 47static struct statistic_callbacks callbacks = { 48 .draw = generic_draw, 49 .resize_cells = generic_resize_cells, 50 .move_cells = generic_move_cells, 51 .get_request_size = generic_get_request_size, 52 .get_minimum_size = generic_get_minimum_size, 53 .insert_cell = faults_insert_cell, 54 .reset_insertion = generic_reset_insertion 55}; 56 57struct statistic *top_faults_create(WINDOW *parent, const char *name) { 58 return create_statistic(STATISTIC_FAULTS, parent, NULL, &callbacks, 59 name); 60} 61 62 63/* Copy-on-write Faults */ 64static bool cow_faults_insert_cell(struct statistic *s, const void *sample) { 65 const libtop_psamp_t *psamp = sample; 66 char buf[GENERIC_INT_SIZE]; 67 68 if(top_uinteger_format_result(buf, sizeof(buf), 69 psamp->cow_faults.now, 70 psamp->cow_faults.previous, 71 psamp->cow_faults.began)) { 72 return true; 73 } 74 75 return generic_insert_cell(s, buf); 76} 77 78static struct statistic_callbacks cow_callbacks = { 79 .draw = generic_draw, 80 .resize_cells = generic_resize_cells, 81 .move_cells = generic_move_cells, 82 .get_request_size = generic_get_request_size, 83 .get_minimum_size = generic_get_minimum_size, 84 .insert_cell = cow_faults_insert_cell, 85 .reset_insertion = generic_reset_insertion 86}; 87 88struct statistic *top_cow_faults_create(WINDOW *parent, const char *name) { 89 return create_statistic(STATISTIC_COW_FAULTS, parent, NULL, &cow_callbacks, 90 name); 91} 92