1 /* 2 * blktrace output analysis: generate a timeline & gather statistics 3 * 4 * Copyright (C) 2006 Alan D. Brunelle <Alan.Brunelle (at) hp.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 * 20 */ 21 #include <stdio.h> 22 #include <stdlib.h> 23 #include <string.h> 24 25 #include "globals.h" 26 27 struct aqd_info { 28 FILE *fp; 29 int na; /* # active */ 30 }; 31 32 void *aqd_alloc(struct d_info *dip) 33 { 34 char *oname; 35 struct aqd_info *ap; 36 37 if (aqd_name == NULL) return NULL; 38 39 ap = malloc(sizeof(*ap)); 40 ap->na = 0; 41 42 oname = malloc(strlen(aqd_name) + strlen(dip->dip_name) + 32); 43 sprintf(oname, "%s_%s_aqd.dat", aqd_name, dip->dip_name); 44 if ((ap->fp = my_fopen(oname, "w")) == NULL) { 45 perror(oname); 46 free(oname); 47 free(ap); 48 return NULL; 49 } 50 add_file(ap->fp, oname); 51 52 return ap; 53 54 } 55 56 void aqd_free(void *info) 57 { 58 free(info); 59 } 60 61 void aqd_issue(void *info, double ts) 62 { 63 if (info) { 64 struct aqd_info *ap = info; 65 66 fprintf(ap->fp, "%lf %d\n%lf %d\n", ts, ap->na, ts, ap->na + 1); 67 ap->na += 1; 68 } 69 } 70 71 void aqd_complete(void *info, double ts) 72 { 73 if (info) { 74 struct aqd_info *ap = info; 75 76 if (ap->na > 0) { 77 fprintf(ap->fp, "%lf %d\n%lf %d\n", 78 ts, ap->na, ts, ap->na - 1); 79 ap->na -= 1; 80 } 81 } 82 } 83