afl like exec secs
This commit is contained in:
parent
177135d330
commit
02fb44b5cc
@ -20,19 +20,19 @@ pub struct ClientStats {
|
|||||||
/// The last time we got this information
|
/// The last time we got this information
|
||||||
pub last_window_time: time::Duration,
|
pub last_window_time: time::Duration,
|
||||||
/// The last executions per sec
|
/// The last executions per sec
|
||||||
pub last_execs_per_sec: u64,
|
pub last_execs_per_sec: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ClientStats {
|
impl ClientStats {
|
||||||
/// We got a new information about executions for this client, insert them.
|
/// We got a new information about executions for this client, insert them.
|
||||||
pub fn update_executions(&mut self, executions: u64, cur_time: time::Duration) {
|
pub fn update_executions(&mut self, executions: u64, cur_time: time::Duration) {
|
||||||
self.executions = executions;
|
|
||||||
let diff = cur_time.checked_sub(self.last_window_time).map_or(0, |d| d.as_secs());
|
let diff = cur_time.checked_sub(self.last_window_time).map_or(0, |d| d.as_secs());
|
||||||
if diff > CLIENT_STATS_TIME_WINDOW_SECS {
|
if diff > CLIENT_STATS_TIME_WINDOW_SECS {
|
||||||
self.last_execs_per_sec = self.execs_per_sec(cur_time);
|
let _ = self.execs_per_sec(cur_time);
|
||||||
self.last_window_time = cur_time;
|
self.last_window_time = cur_time;
|
||||||
self.last_window_executions = executions;
|
self.last_window_executions = self.executions;
|
||||||
}
|
}
|
||||||
|
self.executions = executions;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// We got a new information about corpus size for this client, insert them.
|
/// We got a new information about corpus size for this client, insert them.
|
||||||
@ -41,17 +41,29 @@ impl ClientStats {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Get the calculated executions per second for this client
|
/// Get the calculated executions per second for this client
|
||||||
pub fn execs_per_sec(&self, cur_time: time::Duration) -> u64 {
|
pub fn execs_per_sec(&mut self, cur_time: time::Duration) -> u64 {
|
||||||
if self.executions == 0 {
|
if self.executions == 0 {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
let secs = (cur_time - self.last_window_time).as_secs();
|
|
||||||
if secs == 0 {
|
let elapsed = cur_time.checked_sub(self.last_window_time).map_or(0, |d| d.as_secs());
|
||||||
self.last_execs_per_sec
|
if elapsed == 0 {
|
||||||
} else {
|
return self.last_execs_per_sec as u64;
|
||||||
let diff = self.executions - self.last_window_executions;
|
|
||||||
diff / secs
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let cur_avg = ((self.executions - self.last_window_executions) as f32) / (elapsed as f32);
|
||||||
|
if self.last_window_executions == 0 {
|
||||||
|
self.last_execs_per_sec = cur_avg;
|
||||||
|
return self.last_execs_per_sec as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is a dramatic (5x+) jump in speed, reset the indicator more quickly
|
||||||
|
if cur_avg * 5.0 < self.last_execs_per_sec || cur_avg / 5.0 > self.last_execs_per_sec {
|
||||||
|
self.last_execs_per_sec = cur_avg;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.last_execs_per_sec = self.last_execs_per_sec * (1.0 - 1.0 / 16.0) + cur_avg * (1.0 / 16.0);
|
||||||
|
self.last_execs_per_sec as u64
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,8 +100,8 @@ pub trait Stats {
|
|||||||
#[inline]
|
#[inline]
|
||||||
fn execs_per_sec(&mut self) -> u64 {
|
fn execs_per_sec(&mut self) -> u64 {
|
||||||
let cur_time = current_time();
|
let cur_time = current_time();
|
||||||
self.client_stats()
|
self.client_stats_mut()
|
||||||
.iter()
|
.iter_mut()
|
||||||
.fold(0u64, |acc, x| acc + x.execs_per_sec(cur_time))
|
.fold(0u64, |acc, x| acc + x.execs_per_sec(cur_time))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#define HAS_BUG 1
|
//#define HAS_BUG 1
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
@ -17,8 +17,9 @@ uint32_t __lafl_max_edges_size = 0;
|
|||||||
void __sanitizer_cov_trace_pc_guard(uint32_t *guard) {
|
void __sanitizer_cov_trace_pc_guard(uint32_t *guard) {
|
||||||
|
|
||||||
uint32_t pos = *guard;
|
uint32_t pos = *guard;
|
||||||
uint16_t val = __lafl_edges_map[pos] + 1;
|
//uint16_t val = __lafl_edges_map[pos] + 1;
|
||||||
__lafl_edges_map[pos] = ((uint8_t) val) + (uint8_t) (val >> 8);
|
//__lafl_edges_map[pos] = ((uint8_t) val) + (uint8_t) (val >> 8);
|
||||||
|
__lafl_edges_map[pos] = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user