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(char *str) 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(str) + 32); 43 sprintf(oname, "%s_%s.dat", aqd_name, str); 44 if ((ap->fp = my_fopen(oname, "w")) == NULL) { 45 perror(oname); 46 return NULL; 47 } 48 add_file(ap->fp, oname); 49 50 return ap; 51 52 } 53 54 void aqd_free(void *info) 55 { 56 free(info); 57 } 58 59 void aqd_issue(void *info, double ts) 60 { 61 if (info) { 62 struct aqd_info *ap = info; 63 64 fprintf(ap->fp, "%lf %d\n%lf %d\n", ts, ap->na, ts, ap->na + 1); 65 ap->na += 1; 66 } 67 } 68 69 void aqd_complete(void *info, double ts) 70 { 71 if (info) { 72 struct aqd_info *ap = info; 73 74 if (ap->na > 0) { 75 fprintf(ap->fp, "%lf %d\n%lf %d\n", 76 ts, ap->na, ts, ap->na - 1); 77 ap->na -= 1; 78 } 79 } 80 } 81