source: tools/tracertstats/output_png.c @ 65cdb7f

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 65cdb7f was 65cdb7f, checked in by Perry Lorier <perry@…>, 16 years ago

Add a "realtime" statistics module. This can display stats every "n" seconds,
or every "n" packets.

Has "csv", "html" and "png" output formats currently. (png output module
really should be autoconf'd out if the required modules don't exist).

I'd like to add odoc formats, and I probably should add a "plain text" one
too.

  • Property mode set to 100644
File size: 1.8 KB
Line 
1#define HAVE_LIBFREETYPE
2#include "output.h"
3#include <stdio.h>
4#include <stdlib.h>
5#include "gdc.h"
6#include "gdchart.h"
7#include "gdcpie.h"
8
9struct private_png_t {
10        int rows;
11        float *data;
12};
13
14static void output_png_init(struct output_data_t *out)
15{
16        out->private_format_data=malloc(sizeof(struct private_png_t));
17        ((struct private_png_t *)out->private_format_data)->rows=0;
18        ((struct private_png_t *)out->private_format_data)->data=0;
19}
20
21static void output_png_flush(struct output_data_t *out)
22{
23        int i;
24        struct private_png_t *prv=out->private_format_data;
25        prv->rows++;
26        prv->data= realloc(prv->data,prv->rows*out->columns*sizeof(float));
27        for(i=0;i<out->columns;++i) {
28                switch (out->data[i].type) {
29                        case TYPE_int:
30                                prv->data[out->columns*(prv->rows-1)+i]=out->data[i].d_int;
31                                break;
32                        case TYPE_str:
33                                free(out->data[i].d_str);
34                                break;
35                        case TYPE_float:
36                                prv->data[out->columns*(prv->rows-1)+i]=out->data[i].d_float;
37                                break;
38                        case TYPE_time:
39                                prv->data[out->columns*(prv->rows-1)+i]=out->data[i].d_time;
40                                break;
41                }
42        }
43}
44
45static void output_png_destroy(struct output_data_t *out)
46{
47        struct private_png_t *prv=out->private_format_data;
48        int i,j;
49        char *labels[prv->rows];
50        float data1[(out->columns-1)/2][prv->rows];
51        float data2[(out->columns-1)/2][prv->rows];
52        for(i=0;i<prv->rows;++i) {
53                asprintf(&labels[i],"%i",(int)prv->data[i*out->columns]);
54                for(j=0;j<(out->columns-1)/2;++j) {
55                        data1[j][i]=prv->data[i*out->columns+j*2+1];
56                        data2[j][i]=prv->data[i*out->columns+j*2+2];
57                }
58        }
59
60        GDC_image_type = GDC_PNG;
61        GDC_title = out->title;
62        GDC_out_graph( 640, 480,
63                        stdout,
64                        GDC_COMBO_LINE_LINE,
65                        prv->rows,
66                        labels, 
67                        (out->columns-1)/2,
68                        data1,
69                        data2);
70        free(prv->data);
71        free(prv);
72}
73
74struct output_type_t output_png = {
75        name: "png",
76        init: output_png_init,
77        flush: output_png_flush,
78        destroy: output_png_destroy,
79};
Note: See TracBrowser for help on using the repository browser.