Skip to content

Commit 319045d

Browse files
[analyzer] Add metrics tracking time spent in Z3 solver (#133236)
These metrics would turn out to be useful for verifying an upgrade of Z3.
1 parent f7a034d commit 319045d

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

clang/lib/StaticAnalyzer/Core/Z3CrosscheckVisitor.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ STAT_COUNTER(NumTimesZ3QueryRejectReport,
4141
STAT_COUNTER(NumTimesZ3QueryRejectEQClass,
4242
"Number of times rejecting an report equivalenece class");
4343

44+
STAT_COUNTER(TimeSpentSolvingZ3Queries,
45+
"Total time spent solving Z3 queries excluding retries");
46+
STAT_MAX(MaxTimeSpentSolvingZ3Queries,
47+
"Max time spent solving a Z3 query excluding retries");
48+
4449
using namespace clang;
4550
using namespace ento;
4651

@@ -145,6 +150,8 @@ Z3CrosscheckOracle::Z3Decision Z3CrosscheckOracle::interpretQueryResult(
145150
const Z3CrosscheckVisitor::Z3Result &Query) {
146151
++NumZ3QueriesDone;
147152
AccumulatedZ3QueryTimeInEqClass += Query.Z3QueryTimeMilliseconds;
153+
TimeSpentSolvingZ3Queries += Query.Z3QueryTimeMilliseconds;
154+
MaxTimeSpentSolvingZ3Queries.updateMax(Query.Z3QueryTimeMilliseconds);
148155

149156
if (Query.IsSAT && Query.IsSAT.value()) {
150157
++NumTimesZ3QueryAcceptsReport;

clang/test/Analysis/analyzer-stats/entry-point-stats.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
// CHECK-NEXT: "NumTimesZ3SpendsTooMuchTimeOnASingleEQClass": "{{[0-9]+}}",
3232
// CHECK-NEXT: "NumTimesZ3TimedOut": "{{[0-9]+}}",
3333
// CHECK-NEXT: "NumZ3QueriesDone": "{{[0-9]+}}",
34+
// CHECK-NEXT: "TimeSpentSolvingZ3Queries": "{{[0-9]+}}",
3435
// CHECK-NEXT: "MaxBugClassSize": "{{[0-9]+}}",
3536
// CHECK-NEXT: "MaxCFGSize": "{{[0-9]+}}",
3637
// CHECK-NEXT: "MaxQueueSize": "{{[0-9]+}}",
3738
// CHECK-NEXT: "MaxReachableSize": "{{[0-9]+}}",
39+
// CHECK-NEXT: "MaxTimeSpentSolvingZ3Queries": "{{[0-9]+}}",
3840
// CHECK-NEXT: "MaxValidBugClassSize": "{{[0-9]+}}",
3941
// CHECK-NEXT: "PathRunningTime": "{{[0-9]+}}"
4042
// CHECK-NEXT: },
@@ -64,10 +66,12 @@
6466
// CHECK-NEXT: "NumTimesZ3SpendsTooMuchTimeOnASingleEQClass": "{{[0-9]+}}",
6567
// CHECK-NEXT: "NumTimesZ3TimedOut": "{{[0-9]+}}",
6668
// CHECK-NEXT: "NumZ3QueriesDone": "{{[0-9]+}}",
69+
// CHECK-NEXT: "TimeSpentSolvingZ3Queries": "{{[0-9]+}}",
6770
// CHECK-NEXT: "MaxBugClassSize": "{{[0-9]+}}",
6871
// CHECK-NEXT: "MaxCFGSize": "{{[0-9]+}}",
6972
// CHECK-NEXT: "MaxQueueSize": "{{[0-9]+}}",
7073
// CHECK-NEXT: "MaxReachableSize": "{{[0-9]+}}",
74+
// CHECK-NEXT: "MaxTimeSpentSolvingZ3Queries": "{{[0-9]+}}",
7175
// CHECK-NEXT: "MaxValidBugClassSize": "{{[0-9]+}}",
7276
// CHECK-NEXT: "PathRunningTime": "{{[0-9]+}}"
7377
// CHECK-NEXT: }

0 commit comments

Comments
 (0)