mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-24 21:10:33 +05:00
more statistics in sunburst chart
This commit is contained in:
parent
25efdadd05
commit
14e6a1d24b
@ -785,7 +785,11 @@ namespace ngcore
|
|||||||
{
|
{
|
||||||
int id = 0;
|
int id = 0;
|
||||||
std::map<int, TreeNode> children;
|
std::map<int, TreeNode> children;
|
||||||
|
double chart_size = 0.0; // time without children (the chart lib accumulates children sizes again)
|
||||||
double time = 0.0;
|
double time = 0.0;
|
||||||
|
double min_time = 1e99;
|
||||||
|
double max_time = 0.0;
|
||||||
|
size_t calls = 0;
|
||||||
std::string name;
|
std::string name;
|
||||||
TTimePoint start_time = 0;
|
TTimePoint start_time = 0;
|
||||||
};
|
};
|
||||||
@ -793,7 +797,13 @@ namespace ngcore
|
|||||||
void PrintNode (const TreeNode &n, int &level, std::ofstream & f);
|
void PrintNode (const TreeNode &n, int &level, std::ofstream & f);
|
||||||
void PrintNode (const TreeNode &n, int &level, std::ofstream & f)
|
void PrintNode (const TreeNode &n, int &level, std::ofstream & f)
|
||||||
{
|
{
|
||||||
f << "{ name: \"" + n.name + "\", size: " + ToString(n.time);
|
f << "{ name: \"" + n.name + "\"";
|
||||||
|
f << ", calls: " << n.calls;
|
||||||
|
f << ", size: " << n.chart_size;
|
||||||
|
f << ", time: " << n.time;
|
||||||
|
f << ", min: " << n.min_time;
|
||||||
|
f << ", max: " << n.max_time;
|
||||||
|
f << ", avg: " << n.time/n.calls;
|
||||||
int size = n.children.size();
|
int size = n.children.size();
|
||||||
if(size>0)
|
if(size>0)
|
||||||
{
|
{
|
||||||
@ -815,7 +825,6 @@ namespace ngcore
|
|||||||
std::vector<TimerEvent> events;
|
std::vector<TimerEvent> events;
|
||||||
|
|
||||||
TreeNode root;
|
TreeNode root;
|
||||||
root.time=0;
|
|
||||||
root.name="all";
|
root.name="all";
|
||||||
TreeNode *current = &root;
|
TreeNode *current = &root;
|
||||||
|
|
||||||
@ -853,6 +862,9 @@ namespace ngcore
|
|||||||
std::sort (events.begin(), events.end());
|
std::sort (events.begin(), events.end());
|
||||||
|
|
||||||
root.time = 1000.0*static_cast<double>(stop_time) * seconds_per_tick;
|
root.time = 1000.0*static_cast<double>(stop_time) * seconds_per_tick;
|
||||||
|
root.calls = 1;
|
||||||
|
root.min_time = root.time;
|
||||||
|
root.max_time = root.time;
|
||||||
|
|
||||||
for(auto & event : events)
|
for(auto & event : events)
|
||||||
{
|
{
|
||||||
@ -883,12 +895,19 @@ namespace ngcore
|
|||||||
}
|
}
|
||||||
double time = 1000.0*static_cast<double>(event.time-current->start_time) * seconds_per_tick;
|
double time = 1000.0*static_cast<double>(event.time-current->start_time) * seconds_per_tick;
|
||||||
current->time += time;
|
current->time += time;
|
||||||
|
current->chart_size += time;
|
||||||
|
current->min_time = std::min(current->min_time, time);
|
||||||
|
current->max_time = std::max(current->max_time, time);
|
||||||
|
current->calls++;
|
||||||
|
|
||||||
current = node_stack.back();
|
current = node_stack.back();
|
||||||
current->time -= time;
|
current->chart_size -= time;
|
||||||
node_stack.pop_back();
|
node_stack.pop_back();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
root.chart_size = 0.0;
|
||||||
|
|
||||||
int level = 0;
|
int level = 0;
|
||||||
std::ofstream f(tracefile_name+".html");
|
std::ofstream f(tracefile_name+".html");
|
||||||
f.precision(4);
|
f.precision(4);
|
||||||
@ -910,11 +929,26 @@ namespace ngcore
|
|||||||
|
|
||||||
const color = d3.scaleOrdinal(d3.schemePaired);
|
const color = d3.scaleOrdinal(d3.schemePaired);
|
||||||
|
|
||||||
|
let getTime = (t) =>
|
||||||
|
{
|
||||||
|
if(t>=1000) return (t/1000).toPrecision(4) + ' s';
|
||||||
|
if(t>=0.1) return t.toPrecision(4) + ' ms';
|
||||||
|
if(t>=1e-4) return (t*1e3).toPrecision(4) + ' us';
|
||||||
|
|
||||||
|
return (t/1e6).toPrecision(4) + ' ns';
|
||||||
|
};
|
||||||
|
|
||||||
Sunburst()
|
Sunburst()
|
||||||
.data(data)
|
.data(data)
|
||||||
.size('size')
|
.size('size')
|
||||||
.color(d => color(d.name))
|
.color(d => color(d.name))
|
||||||
.tooltipContent((d, node) => `Time: <i>${node.value.toPrecision(6)}ms</i>`)
|
.tooltipContent((d, node) => {
|
||||||
|
return `Time: <i>${getTime(d.time)}</i> <br>`
|
||||||
|
+ `calls: <i>${d.calls}</i> <br>`
|
||||||
|
+ `min: <i>${getTime(d.min)}</i> <br>`
|
||||||
|
+ `max: <i>${getTime(d.max)}</i> <br>`
|
||||||
|
+ `avg: <i>${getTime(d.avg)}</i>`
|
||||||
|
})
|
||||||
(document.getElementById('chart'));
|
(document.getElementById('chart'));
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
Loading…
Reference in New Issue
Block a user