Reset resolver probe counters per query window
This commit is contained in:
@@ -278,6 +278,7 @@ uint32_t gGpsCostTablePatchLogCount = 0;
|
||||
uint32_t gGpsProviderClassPatchLogCount = 0;
|
||||
std::array<uint32_t, 4> gGpsResolveHandleRetLogCounts{};
|
||||
uint64_t gGpsResolveTraceWindowUntilMs = 0;
|
||||
uint32_t gGpsResolveTraceWindowSerial = 0;
|
||||
std::array<uint32_t, 64> gGpsEdgeCostClassLogCounts{};
|
||||
std::mutex gGpsCostLogMutex;
|
||||
std::mutex gGpsAsyncLogMutex;
|
||||
@@ -1111,6 +1112,8 @@ void ExtendGpsResolveTraceWindow(uint64_t aNowMs)
|
||||
{
|
||||
std::lock_guard lock(gGpsCostLogMutex);
|
||||
const auto untilMs = aNowMs + kGpsResolveTraceWindowMs;
|
||||
std::fill(gGpsResolveHandleRetLogCounts.begin(), gGpsResolveHandleRetLogCounts.end(), 0);
|
||||
++gGpsResolveTraceWindowSerial;
|
||||
if (untilMs > gGpsResolveTraceWindowUntilMs)
|
||||
{
|
||||
gGpsResolveTraceWindowUntilMs = untilMs;
|
||||
@@ -4000,16 +4003,19 @@ int32_t DetourGpsResolveHandle(void* aGraph, uint64_t aHandle, void* aOutSegment
|
||||
const auto pointIndex = aHandle & 0xFFFFF;
|
||||
uint32_t callCount = 0;
|
||||
uint32_t returnCallCount = 0;
|
||||
uint32_t traceWindowSerial = 0;
|
||||
bool inTraceWindow = false;
|
||||
bool shouldLog = false;
|
||||
{
|
||||
std::lock_guard lock(gGpsCostLogMutex);
|
||||
callCount = gGpsResolveHandleLogCount++;
|
||||
const auto returnBucket = GetGpsResolveReturnBucket(returnRva);
|
||||
if (returnBucket < gGpsResolveHandleRetLogCounts.size())
|
||||
inTraceWindow = GetElapsedMs() <= gGpsResolveTraceWindowUntilMs;
|
||||
traceWindowSerial = gGpsResolveTraceWindowSerial;
|
||||
if (inTraceWindow && returnBucket < gGpsResolveHandleRetLogCounts.size())
|
||||
{
|
||||
returnCallCount = gGpsResolveHandleRetLogCounts[returnBucket]++;
|
||||
}
|
||||
const auto inTraceWindow = GetElapsedMs() <= gGpsResolveTraceWindowUntilMs;
|
||||
shouldLog = result >= 0 && hasSegment && hasPoint &&
|
||||
((IsSelectedGpsResolveReturnRva(returnRva) && inTraceWindow &&
|
||||
returnCallCount < kGpsResolveSelectedRetLogLimit) ||
|
||||
@@ -4031,6 +4037,7 @@ int32_t DetourGpsResolveHandle(void* aGraph, uint64_t aHandle, void* aOutSegment
|
||||
|
||||
std::ostringstream line;
|
||||
line << "hook GPSResolveHandle 0x44e1a8 call=" << callCount << " retCall=" << returnCallCount
|
||||
<< " traceWindow=" << traceWindowSerial << " inTraceWindow=" << (inTraceWindow ? 1 : 0)
|
||||
<< " value=0x" << std::hex << static_cast<uint32_t>(result) << " handle=0x" << aHandle << std::dec;
|
||||
AppendGpsPackedHandleSummary(line, "handle", aHandle);
|
||||
AppendPointerWithRva(line, "graph", aGraph);
|
||||
@@ -4047,7 +4054,8 @@ int32_t DetourGpsResolveHandle(void* aGraph, uint64_t aHandle, void* aOutSegment
|
||||
AppendPointerWithRva(line, "segment_p38", aux38);
|
||||
AppendGpsPointSummary(line, "pointSummary", point);
|
||||
const auto shouldDumpBytes =
|
||||
callCount < kGpsResolveVerboseDumpLimit || returnCallCount < kGpsResolveVerboseDumpLimit;
|
||||
callCount < kGpsResolveVerboseDumpLimit ||
|
||||
(inTraceWindow && returnCallCount < kGpsResolveVerboseDumpLimit);
|
||||
line << " dump=" << (shouldDumpBytes ? 1 : 0);
|
||||
if (shouldDumpBytes)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user