| 683 | } |
| 684 | |
| 685 | FieldStatistics *getStatistics() const |
| 686 | { |
| 687 | FieldStatistics *stats = new FieldStatistics(); |
| 688 | stats->numCacheRegions = m_regionStorageContainer.size(); |
| 689 | stats->numCacheRegionsReserved = m_regionStorageContainer.capacity(); |
| 690 | stats->sizePerCacheRegions = sizeof(RegionStorageType); |
| 691 | stats->sizeAllCacheRegionsUsed = sizeof(RegionStorageType) * m_regionStorageContainer.size(); |
| 692 | stats->sizeAllCacheRegionsReserved = sizeof(RegionStorageType) * m_regionStorageContainer.capacity(); |
| 693 | stats->timeLastUpdate = m_timeLastUpdate; |
| 694 | stats->timeLastUpdateCopySamples = m_timeLastUpdateCopySamples; |
| 695 | stats->timeLastUpdateSpatialStructureUpdate = m_timeLastUpdateSpatialStructureUpdate; |
| 696 | stats->timeLastUpdateDirectionalDistriubtionUpdate = m_timeLastUpdateDirectionalDistriubtionUpdate; |
| 697 | |
| 698 | stats->spatialStructureStatistics = m_spatialSubdiv.getStatistics(); |
| 699 | |
| 700 | stats->directionalDistributionStatistics.sizePerDistribution = sizeof(DirectionalDistribution); |
| 701 | stats->directionalDistributionStatistics.minNumberOfComponents = 1e10f; |
| 702 | stats->directionalDistributionStatistics.maxNumberOfComponents = 0.0f; |
| 703 | stats->directionalDistributionStatistics.averageNumberOfComponents = 0.0f; |
| 704 | stats->directionalDistributionStatistics.secondMomentNumberOfComponents = 0.0f; |
| 705 | |
| 706 | int numDistributions = m_regionStorageContainer.size(); |
| 707 | for (int i = 0; i < numDistributions; i++) |
| 708 | { |
| 709 | int numDistributionComponents = m_regionStorageContainer[i].first.distribution.getNumComponents(); |
| 710 | stats->directionalDistributionStatistics.minNumberOfComponents = |
| 711 | std::min(stats->directionalDistributionStatistics.minNumberOfComponents, (float)numDistributionComponents); |
| 712 | stats->directionalDistributionStatistics.maxNumberOfComponents = |
| 713 | std::max(stats->directionalDistributionStatistics.maxNumberOfComponents, (float)numDistributionComponents); |
| 714 | stats->directionalDistributionStatistics.averageNumberOfComponents += numDistributionComponents; |
| 715 | stats->directionalDistributionStatistics.secondMomentNumberOfComponents += numDistributionComponents * numDistributionComponents; |
| 716 | } |
| 717 | stats->directionalDistributionStatistics.averageNumberOfComponents /= float(numDistributions); |
| 718 | stats->directionalDistributionStatistics.secondMomentNumberOfComponents /= float(numDistributions); |
| 719 | stats->directionalDistributionStatistics.secondMomentNumberOfComponents = std::sqrt(stats->directionalDistributionStatistics.secondMomentNumberOfComponents); |
| 720 | return stats; |
| 721 | } |
| 722 | |
| 723 | private: |
| 724 | bool m_isSurface{true}; |
nothing calls this directly
no test coverage detected