@@ -69,7 +69,8 @@ void open_svg(const char *filename, int cpus, int rows)
69
69
fprintf (svgfile , " rect.process2 { fill:rgb(180,180,180); fill-opacity:0.9; stroke-width:0; stroke:rgb( 0, 0, 0); } \n" );
70
70
fprintf (svgfile , " rect.sample { fill:rgb( 0, 0,255); fill-opacity:0.8; stroke-width:0; stroke:rgb( 0, 0, 0); } \n" );
71
71
fprintf (svgfile , " rect.blocked { fill:rgb(255, 0, 0); fill-opacity:0.5; stroke-width:0; stroke:rgb( 0, 0, 0); } \n" );
72
- fprintf (svgfile , " rect.waiting { fill:rgb(255,255, 0); fill-opacity:0.3; stroke-width:0; stroke:rgb( 0, 0, 0); } \n" );
72
+ fprintf (svgfile , " rect.waiting { fill:rgb(214,214, 0); fill-opacity:0.3; stroke-width:0; stroke:rgb( 0, 0, 0); } \n" );
73
+ fprintf (svgfile , " rect.WAITING { fill:rgb(255,214, 48); fill-opacity:0.6; stroke-width:0; stroke:rgb( 0, 0, 0); } \n" );
73
74
fprintf (svgfile , " rect.cpu { fill:rgb(192,192,192); fill-opacity:0.2; stroke-width:0.5; stroke:rgb(128,128,128); } \n" );
74
75
fprintf (svgfile , " rect.pstate { fill:rgb(128,128,128); fill-opacity:0.8; stroke-width:0; } \n" );
75
76
fprintf (svgfile , " rect.c1 { fill:rgb(255,214,214); fill-opacity:0.5; stroke-width:0; } \n" );
@@ -92,14 +93,14 @@ void svg_box(int Yslot, u64 start, u64 end, const char *type)
92
93
time2pixels (start ), time2pixels (end )- time2pixels (start ), Yslot * SLOT_MULT , SLOT_HEIGHT , type );
93
94
}
94
95
95
- void svg_sample (int Yslot , int cpu , u64 start , u64 end , const char * type )
96
+ void svg_sample (int Yslot , int cpu , u64 start , u64 end )
96
97
{
97
98
double text_size ;
98
99
if (!svgfile )
99
100
return ;
100
101
101
- fprintf (svgfile , "<rect x=\"%4.8f\" width=\"%4.8f\" y=\"%4.1f\" height=\"%4.1f\" class=\"%s \"/>\n" ,
102
- time2pixels (start ), time2pixels (end )- time2pixels (start ), Yslot * SLOT_MULT , SLOT_HEIGHT , type );
102
+ fprintf (svgfile , "<rect x=\"%4.8f\" width=\"%4.8f\" y=\"%4.1f\" height=\"%4.1f\" class=\"sample \"/>\n" ,
103
+ time2pixels (start ), time2pixels (end )- time2pixels (start ), Yslot * SLOT_MULT , SLOT_HEIGHT );
103
104
104
105
text_size = (time2pixels (end )- time2pixels (start ));
105
106
if (cpu > 9 )
@@ -112,6 +113,53 @@ void svg_sample(int Yslot, int cpu, u64 start, u64 end, const char *type)
112
113
113
114
}
114
115
116
+ static char * time_to_string (u64 duration )
117
+ {
118
+ static char text [80 ];
119
+
120
+ text [0 ] = 0 ;
121
+
122
+ if (duration < 1000 ) /* less than 1 usec */
123
+ return text ;
124
+
125
+ if (duration < 1000 * 1000 ) { /* less than 1 msec */
126
+ sprintf (text , "%4.1f us" , duration / 1000.0 );
127
+ return text ;
128
+ }
129
+ sprintf (text , "%4.1f ms" , duration / 1000.0 / 1000 );
130
+
131
+ return text ;
132
+ }
133
+
134
+ void svg_waiting (int Yslot , u64 start , u64 end )
135
+ {
136
+ char * text ;
137
+ const char * style ;
138
+ double font_size ;
139
+
140
+ if (!svgfile )
141
+ return ;
142
+
143
+ style = "waiting" ;
144
+
145
+ if (end - start > 10 * 1000000 ) /* 10 msec */
146
+ style = "WAITING" ;
147
+
148
+ text = time_to_string (end - start );
149
+
150
+ font_size = 1.0 * (time2pixels (end )- time2pixels (start )) / strlen (text );
151
+
152
+ if (font_size > 0.2 )
153
+ font_size = 0.2 ;
154
+
155
+
156
+ fprintf (svgfile , "<rect x=\"%4.8f\" width=\"%4.8f\" y=\"%4.1f\" height=\"%4.1f\" class=\"%s\"/>\n" ,
157
+ time2pixels (start ), time2pixels (end )- time2pixels (start ), Yslot * SLOT_MULT , SLOT_HEIGHT , style );
158
+ if (font_size > MIN_TEXT_SIZE )
159
+ fprintf (svgfile , "<text transform=\"translate(%1.8f,%1.8f)\" font-size=\"%1.6fpt\">%s</text>\n" ,
160
+ time2pixels (start ), Yslot * SLOT_MULT + 2 , font_size , text );
161
+ }
162
+
115
163
static char * cpu_model (void )
116
164
{
117
165
static char cpu_m [255 ];
0 commit comments