|
@@ -1607,32 +1607,50 @@ void QuadTree::DumpTree(const NodeID &inRoot, const char *inFileNamePrefix) cons
|
|
|
|
|
|
#ifdef JPH_TRACK_BROADPHASE_STATS
|
|
|
|
|
|
-void QuadTree::ReportStats(const char *inName, const LayerToStats &inLayer) const
|
|
|
+uint64 QuadTree::GetTicks100Pct(const LayerToStats &inLayer) const
|
|
|
{
|
|
|
- uint64 ticks_per_sec = GetProcessorTicksPerSecond();
|
|
|
+ uint64 total_ticks = 0;
|
|
|
+ for (const LayerToStats::value_type &kv : inLayer)
|
|
|
+ total_ticks += kv.second.mTotalTicks;
|
|
|
+ return total_ticks;
|
|
|
+}
|
|
|
|
|
|
+void QuadTree::ReportStats(const char *inName, const LayerToStats &inLayer, uint64 inTicks100Pct) const
|
|
|
+{
|
|
|
for (const LayerToStats::value_type &kv : inLayer)
|
|
|
{
|
|
|
- double total_time = 1000.0 * double(kv.second.mTotalTicks) / double(ticks_per_sec);
|
|
|
- double total_time_excl_collector = 1000.0 * double(kv.second.mTotalTicks - kv.second.mCollectorTicks) / double(ticks_per_sec);
|
|
|
+ double total_pct = 100.0 * double(kv.second.mTotalTicks) / double(inTicks100Pct);
|
|
|
+ double total_pct_excl_collector = 100.0 * double(kv.second.mTotalTicks - kv.second.mCollectorTicks) / double(inTicks100Pct);
|
|
|
double hits_reported_vs_bodies_visited = kv.second.mBodiesVisited > 0? 100.0 * double(kv.second.mHitsReported) / double(kv.second.mBodiesVisited) : 100.0;
|
|
|
- double hits_reported_vs_nodes_visited = kv.second.mNodesVisited > 0? double(kv.second.mHitsReported) / double(kv.second.mNodesVisited) : -1.0f;
|
|
|
+ double hits_reported_vs_nodes_visited = kv.second.mNodesVisited > 0? double(kv.second.mHitsReported) / double(kv.second.mNodesVisited) : -1.0;
|
|
|
|
|
|
- stringstream str;
|
|
|
- str << inName << ", " << kv.first << ", " << mName << ", " << kv.second.mNumQueries << ", " << total_time << ", " << total_time_excl_collector << ", " << kv.second.mNodesVisited << ", " << kv.second.mBodiesVisited << ", " << kv.second.mHitsReported << ", " << hits_reported_vs_bodies_visited << ", " << hits_reported_vs_nodes_visited;
|
|
|
+ std::stringstream str;
|
|
|
+ str << inName << ", " << kv.first << ", " << mName << ", " << kv.second.mNumQueries << ", " << total_pct << ", " << total_pct_excl_collector << ", " << kv.second.mNodesVisited << ", " << kv.second.mBodiesVisited << ", " << kv.second.mHitsReported << ", " << hits_reported_vs_bodies_visited << ", " << hits_reported_vs_nodes_visited;
|
|
|
Trace(str.str().c_str());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void QuadTree::ReportStats() const
|
|
|
+uint64 QuadTree::GetTicks100Pct() const
|
|
|
+{
|
|
|
+ uint64 total_ticks = 0;
|
|
|
+ total_ticks += GetTicks100Pct(mCastRayStats);
|
|
|
+ total_ticks += GetTicks100Pct(mCollideAABoxStats);
|
|
|
+ total_ticks += GetTicks100Pct(mCollideSphereStats);
|
|
|
+ total_ticks += GetTicks100Pct(mCollidePointStats);
|
|
|
+ total_ticks += GetTicks100Pct(mCollideOrientedBoxStats);
|
|
|
+ total_ticks += GetTicks100Pct(mCastAABoxStats);
|
|
|
+ return total_ticks;
|
|
|
+}
|
|
|
+
|
|
|
+void QuadTree::ReportStats(uint64 inTicks100Pct) const
|
|
|
{
|
|
|
unique_lock lock(mStatsMutex);
|
|
|
- ReportStats("RayCast", mCastRayStats);
|
|
|
- ReportStats("CollideAABox", mCollideAABoxStats);
|
|
|
- ReportStats("CollideSphere", mCollideSphereStats);
|
|
|
- ReportStats("CollidePoint", mCollidePointStats);
|
|
|
- ReportStats("CollideOrientedBox", mCollideOrientedBoxStats);
|
|
|
- ReportStats("CastAABox", mCastAABoxStats);
|
|
|
+ ReportStats("RayCast", mCastRayStats, inTicks100Pct);
|
|
|
+ ReportStats("CollideAABox", mCollideAABoxStats, inTicks100Pct);
|
|
|
+ ReportStats("CollideSphere", mCollideSphereStats, inTicks100Pct);
|
|
|
+ ReportStats("CollidePoint", mCollidePointStats, inTicks100Pct);
|
|
|
+ ReportStats("CollideOrientedBox", mCollideOrientedBoxStats, inTicks100Pct);
|
|
|
+ ReportStats("CastAABox", mCastAABoxStats, inTicks100Pct);
|
|
|
}
|
|
|
|
|
|
#endif // JPH_TRACK_BROADPHASE_STATS
|