@@ -1567,6 +1567,23 @@ def do_engine_fuzzing(self, engine_impl):
15671567
15681568 return crashes , fuzzer_metadata
15691569
1570+ def _emit_testcase_generation_time_metric (self , start_time , testcase_count ,
1571+ fuzzer , job ):
1572+ testcase_generation_finish = time .time ()
1573+ elapsed_testcase_generation_time = testcase_generation_finish
1574+ elapsed_testcase_generation_time -= start_time
1575+ # Avoid division by zero.
1576+ if testcase_count :
1577+ average_time_per_testcase = elapsed_testcase_generation_time
1578+ average_time_per_testcase = average_time_per_testcase / testcase_count
1579+ monitoring_metrics .TESTCASE_GENERATION_AVERAGE_TIME .add (
1580+ average_time_per_testcase ,
1581+ labels = {
1582+ 'job' : job ,
1583+ 'fuzzer' : fuzzer ,
1584+ 'platform' : environment .platform (),
1585+ })
1586+
15701587 def do_blackbox_fuzzing (self , fuzzer , fuzzer_directory , job_type ):
15711588 """Run blackbox fuzzing. Currently also used for engine fuzzing."""
15721589 # Set the thread timeout values.
@@ -1590,11 +1607,15 @@ def do_blackbox_fuzzing(self, fuzzer, fuzzer_directory, job_type):
15901607
15911608 # Run the fuzzer to generate testcases. If error occurred while trying
15921609 # to run the fuzzer, bail out.
1610+ testcase_generation_start = time .time ()
15931611 generate_result = self .generate_blackbox_testcases (
15941612 fuzzer , job_type , fuzzer_directory , testcase_count )
15951613 if not generate_result .success :
15961614 return None , None , None , None
15971615
1616+ self ._emit_testcase_generation_time_metric (
1617+ testcase_generation_start , testcase_count , fuzzer .name , job_type )
1618+
15981619 environment .set_value ('FUZZER_NAME' , self .fully_qualified_fuzzer_name )
15991620
16001621 # Initialize a list of crashes.
0 commit comments