73 lines
2.2 KiB
C++
73 lines
2.2 KiB
C++
#pragma once
|
|
#include <vector>
|
|
#include <string>
|
|
#include "../Defines.h"
|
|
|
|
struct OctreeBuilderStatistics
|
|
{
|
|
public:
|
|
unsigned8 levels;
|
|
std::string type;
|
|
|
|
double validCoordBuildtime;
|
|
double depthPeelingTime;
|
|
double finalizationTime;
|
|
double totalTime;
|
|
|
|
std::vector<size_t> octreeNodesPerLevel;
|
|
std::vector<size_t> dagNodesPerLevel;
|
|
|
|
OctreeBuilderStatistics(unsigned8 levels)
|
|
{
|
|
this->levels = levels;
|
|
validCoordBuildtime = depthPeelingTime = finalizationTime = totalTime = 0;
|
|
octreeNodesPerLevel = std::vector<size_t>(levels + 1);
|
|
dagNodesPerLevel = std::vector<size_t>(levels + 1);
|
|
}
|
|
|
|
size_t GetOctreeNodeCount() const
|
|
{
|
|
size_t octreeNodeCount = 0;
|
|
for (unsigned8 level = 0; level <= levels; level++)
|
|
octreeNodeCount += octreeNodesPerLevel[level];
|
|
return octreeNodeCount;
|
|
}
|
|
|
|
size_t GetDAGNodeCount() const
|
|
{
|
|
size_t dagNodeCount = 0;
|
|
for (unsigned8 level = 0; level <= levels; level++)
|
|
dagNodeCount += dagNodesPerLevel[level];
|
|
return dagNodeCount;
|
|
}
|
|
|
|
long double GetCompression() const
|
|
{
|
|
return (long double)GetOctreeNodeCount() / (long double)GetDAGNodeCount();
|
|
}
|
|
|
|
long double GetCompression(unsigned8 level) const
|
|
{
|
|
return (long double)octreeNodesPerLevel[level] / (long double)dagNodesPerLevel[level];
|
|
}
|
|
|
|
void Print() const
|
|
{
|
|
printf("DAG created with the following properties:\n");
|
|
printf("Total time : %10u ms\n", (unsigned)(totalTime * 1000));
|
|
printf("Valid subtree calculation time : %10u ms\n", (unsigned)(validCoordBuildtime * 1000));
|
|
printf("Depth peeling time : %10u ms\n", (unsigned)(depthPeelingTime * 1000));
|
|
printf("Subtree finalization time : %10u ms\n", (unsigned)(finalizationTime * 1000));
|
|
|
|
printf("Total nodes : %10zu\n", GetOctreeNodeCount());
|
|
printf("DAG nodes : %10zu\n", GetDAGNodeCount());
|
|
printf("Compression : %10.2Lf\n", GetCompression());
|
|
printf("\n");
|
|
|
|
|
|
printf("Statistics per level:\n");
|
|
printf("Level Octree (#) DAG (#) Compression\n");
|
|
for (unsigned8 level = 0; level <= levels; level++)
|
|
printf("%5d %12zu %12zu %12.2Lf\n", level, octreeNodesPerLevel[level], dagNodesPerLevel[level], GetCompression(level));
|
|
}
|
|
}; |