Skip to content

Commit 156108d

Browse files
committed
get rid of clock()
1 parent e34761e commit 156108d

File tree

4 files changed

+46
-70
lines changed

4 files changed

+46
-70
lines changed

lib/dictBuilder/cover.rs

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::cmp::Ordering;
22
use std::mem::MaybeUninit;
33
use std::ops::Range;
44
use std::sync::{Condvar, Mutex};
5+
use std::time::{Duration, Instant};
56

67
use libc::size_t;
78

@@ -16,12 +17,6 @@ use crate::lib::dictBuilder::zdict::{ZDICT_finalizeDictionary, ZDICT_isError};
1617
use crate::lib::zdict::experimental::{ZDICT_cover_params_t, ZDICT_DICTSIZE_MIN};
1718
use crate::ZDICT_params_t;
1819

19-
extern "C" {
20-
fn clock() -> clock_t;
21-
}
22-
type __clock_t = core::ffi::c_long;
23-
type clock_t = __clock_t;
24-
2520
#[repr(C)]
2621
struct COVER_map_t {
2722
data: Box<[COVER_map_pair_t]>,
@@ -142,8 +137,6 @@ pub(super) struct COVER_dictSelection_t {
142137
dictSize: size_t,
143138
totalCompressedSize: size_t,
144139
}
145-
const CLOCKS_PER_SEC: core::ffi::c_int = 1000000;
146-
147140
const COVER_DEFAULT_SPLITPOINT: core::ffi::c_double = 1.0f64;
148141

149142
fn COVER_map_clear(map: &mut COVER_map_t) {
@@ -719,7 +712,7 @@ pub(super) fn COVER_computeEpochs(
719712
epochs
720713
}
721714

722-
unsafe fn COVER_buildDictionary(
715+
fn COVER_buildDictionary(
723716
ctx: &COVER_ctx_t,
724717
freqs: &mut [u32],
725718
activeDmers: &mut COVER_map_t,
@@ -738,7 +731,7 @@ unsafe fn COVER_buildDictionary(
738731
let maxZeroScoreRun = (epochs.num >> 3).clamp(10, 100) as size_t;
739732
let mut zeroScoreRun = 0 as size_t;
740733
let mut epoch: size_t = 0;
741-
let mut lastUpdateTime = 0;
734+
let mut last_update_time = Instant::now();
742735
let displayLevel = ctx.displayLevel;
743736
if displayLevel >= 2 {
744737
eprintln!(
@@ -778,15 +771,17 @@ unsafe fn COVER_buildDictionary(
778771
}
779772
tail = tail.wrapping_sub(segmentSize);
780773
let samples = ctx.samples;
781-
core::ptr::copy_nonoverlapping(
782-
samples[segment.begin as usize..][..segmentSize as usize].as_ptr(),
783-
dict.add(tail),
784-
segmentSize,
785-
);
774+
unsafe {
775+
core::ptr::copy_nonoverlapping(
776+
samples[segment.begin as usize..][..segmentSize as usize].as_ptr(),
777+
dict.add(tail),
778+
segmentSize,
779+
);
780+
}
786781
if displayLevel >= 2 {
787-
let refreshRate = CLOCKS_PER_SEC as __clock_t * 15 / 100;
788-
if clock() - lastUpdateTime > refreshRate || displayLevel >= 4 {
789-
lastUpdateTime = clock();
782+
let refresh_rate = Duration::from_millis(150);
783+
if last_update_time.elapsed() > refresh_rate || displayLevel >= 4 {
784+
last_update_time = Instant::now();
790785
eprint!(
791786
"\r{}% ",
792787
(dictBufferCapacity.wrapping_sub(tail) * 100 / dictBufferCapacity)
@@ -1155,16 +1150,14 @@ fn COVER_tryParameters(data: Box<COVER_tryParameters_data_t>) {
11551150
let mut activeDmers =
11561151
COVER_map_t::new((parameters.k).wrapping_sub(parameters.d).wrapping_add(1));
11571152

1158-
let tail = unsafe {
1159-
COVER_buildDictionary(
1160-
ctx,
1161-
&mut freqs,
1162-
&mut activeDmers,
1163-
dict.as_mut_ptr() as *mut core::ffi::c_void,
1164-
dictBufferCapacity,
1165-
parameters,
1166-
)
1167-
};
1153+
let tail = COVER_buildDictionary(
1154+
ctx,
1155+
&mut freqs,
1156+
&mut activeDmers,
1157+
dict.as_mut_ptr() as *mut core::ffi::c_void,
1158+
dictBufferCapacity,
1159+
parameters,
1160+
);
11681161

11691162
selection = COVER_selectDict(
11701163
&dict[tail..],
@@ -1247,7 +1240,7 @@ pub unsafe extern "C" fn ZDICT_optimizeTrainFromBuffer_cover(
12471240
let mut iteration = 1 as core::ffi::c_uint;
12481241
let mut pool = core::ptr::null_mut();
12491242
let mut warned = 0;
1250-
let mut lastUpdateTime = 0;
1243+
let mut last_update_time = Instant::now();
12511244
if splitPoint <= 0.0 || splitPoint > 1.0 {
12521245
if displayLevel >= 1 {
12531246
eprintln!("Incorrect parameters");
@@ -1372,9 +1365,9 @@ pub unsafe extern "C" fn ZDICT_optimizeTrainFromBuffer_cover(
13721365
COVER_tryParameters(data);
13731366
}
13741367
if displayLevel >= 2 {
1375-
let refreshRate = CLOCKS_PER_SEC as __clock_t * 15 / 100;
1376-
if clock() - lastUpdateTime > refreshRate || displayLevel >= 4 {
1377-
lastUpdateTime = clock();
1368+
let refresh_rate = Duration::from_millis(150);
1369+
if last_update_time.elapsed() > refresh_rate || displayLevel >= 4 {
1370+
last_update_time = Instant::now();
13781371
eprintln!(
13791372
"\r{}% ",
13801373
iteration.wrapping_mul(100).wrapping_div(kIterations),

lib/dictBuilder/fastcover.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use core::ptr;
2+
use std::time::{Duration, Instant};
23

34
use libc::{free, malloc, memcpy, size_t};
45

@@ -17,12 +18,6 @@ use crate::lib::zdict::experimental::{
1718
};
1819
use crate::lib::zdict::ZDICT_finalizeDictionary;
1920

20-
extern "C" {
21-
fn clock() -> clock_t;
22-
}
23-
type __clock_t = core::ffi::c_long;
24-
type clock_t = __clock_t;
25-
2621
#[derive(Debug, Copy, Clone, Default)]
2722
#[repr(C)]
2823
struct FASTCOVER_accel_t {
@@ -55,7 +50,6 @@ struct FASTCOVER_tryParameters_data_t<'a> {
5550
parameters: ZDICT_cover_params_t,
5651
}
5752

58-
const CLOCKS_PER_SEC: core::ffi::c_int = 1000000;
5953
const FASTCOVER_MAX_F: core::ffi::c_int = 31;
6054
const FASTCOVER_MAX_ACCEL: core::ffi::c_int = 10;
6155
const FASTCOVER_DEFAULT_SPLITPOINT: core::ffi::c_double = 0.75f64;
@@ -365,7 +359,7 @@ unsafe fn FASTCOVER_buildDictionary(
365359
let maxZeroScoreRun = 10;
366360
let displayLevel = ctx.displayLevel;
367361
let mut zeroScoreRun = 0 as size_t;
368-
let mut lastUpdateTime = 0;
362+
let mut last_update_time = Instant::now();
369363
let mut epoch: size_t = 0;
370364
if displayLevel >= 2 {
371365
eprintln!(
@@ -410,9 +404,9 @@ unsafe fn FASTCOVER_buildDictionary(
410404
segmentSize,
411405
);
412406
if displayLevel >= 2 {
413-
let refreshRate = CLOCKS_PER_SEC as __clock_t * 15 / 100;
414-
if clock() - lastUpdateTime > refreshRate || displayLevel >= 4 {
415-
lastUpdateTime = clock();
407+
let refresh_rate = Duration::from_millis(150);
408+
if last_update_time.elapsed() > refresh_rate || displayLevel >= 4 {
409+
last_update_time = Instant::now();
416410
eprint!(
417411
"\r{}% ",
418412
(dictBufferCapacity.wrapping_sub(tail) * 100 / dictBufferCapacity)
@@ -698,7 +692,7 @@ pub unsafe extern "C" fn ZDICT_optimizeTrainFromBuffer_fastCover(
698692
let mut k: core::ffi::c_uint = 0;
699693
let mut pool = core::ptr::null_mut();
700694
let mut warned = 0;
701-
let mut lastUpdateTime = 0;
695+
let mut last_update_time = Instant::now();
702696
if splitPoint <= 0.0 || splitPoint > 1.0 {
703697
if displayLevel >= 1 {
704698
eprintln!("Incorrect splitPoint");
@@ -843,9 +837,9 @@ pub unsafe extern "C" fn ZDICT_optimizeTrainFromBuffer_fastCover(
843837
FASTCOVER_tryParameters(data as *mut core::ffi::c_void);
844838
}
845839
if displayLevel >= 2 {
846-
let refreshRate = CLOCKS_PER_SEC as __clock_t * 15 / 100;
847-
if clock() - lastUpdateTime > refreshRate || displayLevel >= 4 {
848-
lastUpdateTime = clock();
840+
let refresh_rate = Duration::from_millis(150);
841+
if last_update_time.elapsed() > refresh_rate || displayLevel >= 4 {
842+
last_update_time = Instant::now();
849843
eprintln!(
850844
"\r{}% ",
851845
iteration.wrapping_mul(100).wrapping_div(kIterations),

lib/dictBuilder/zdict.rs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use core::ptr;
2+
use std::time::{Duration, Instant};
23

34
use libc::{free, malloc, memcpy, size_t};
45

@@ -27,11 +28,6 @@ use crate::lib::zdict::experimental::{
2728
use crate::lib::zdict::ZDICT_params_t;
2829
use crate::lib::zstd::*;
2930

30-
extern "C" {
31-
fn clock() -> clock_t;
32-
}
33-
type __clock_t = core::ffi::c_long;
34-
type clock_t = __clock_t;
3531
#[derive(Copy, Clone)]
3632
#[repr(C)]
3733
struct EStats_ress_t {
@@ -57,12 +53,8 @@ const ZDICT_MAX_SAMPLES_SIZE: core::ffi::c_uint = (2000) << 20;
5753
#[expect(deprecated)]
5854
const ZDICT_MIN_SAMPLES_SIZE: core::ffi::c_int = ZDICT_CONTENTSIZE_MIN * MINRATIO;
5955

60-
const CLOCKS_PER_SEC: core::ffi::c_int = 1000000;
6156
const NOISELENGTH: core::ffi::c_int = 32;
6257
static g_selectivity_default: u32 = 9;
63-
unsafe fn ZDICT_clockSpan(nPrevious: clock_t) -> clock_t {
64-
clock() - nPrevious
65-
}
6658
unsafe fn ZDICT_printHex(ptr: *const core::ffi::c_void, length: size_t) {
6759
let b = ptr as *const u8;
6860
let mut u: size_t = 0;
@@ -617,8 +609,8 @@ unsafe fn ZDICT_trainBuffer_legacy(
617609
let filePos =
618610
malloc((nbFiles as size_t).wrapping_mul(::core::mem::size_of::<u32>())) as *mut u32;
619611
let mut result = 0;
620-
let mut displayClock = 0;
621-
let refreshRate = CLOCKS_PER_SEC as __clock_t * 3 / 10;
612+
let mut displayClock = Instant::now();
613+
let refresh_rate = Duration::from_millis(300);
622614
if notificationLevel >= 2 {
623615
eprintln!("\r{:70 }\r", "");
624616
}
@@ -702,8 +694,8 @@ unsafe fn ZDICT_trainBuffer_legacy(
702694
ZDICT_insertDictItem(dictList, dictListSize, solution, buffer);
703695
cursor = cursor.wrapping_add(solution.length);
704696
if notificationLevel >= 2 {
705-
if ZDICT_clockSpan(displayClock) > refreshRate {
706-
displayClock = clock();
697+
if displayClock.elapsed() > refresh_rate {
698+
displayClock = Instant::now();
707699
eprint!(
708700
"\r{:4.2} % \r",
709701
cursor as core::ffi::c_double

programs/fileio.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
use core::ptr;
22
use std::ffi::CStr;
33
use std::io;
4+
use std::time::Instant;
45

56
use libc::{
6-
calloc, clock_t, close, exit, fclose, fdopen, feof, fflush, fileno, fopen, fprintf, fread,
7-
free, fseek, ftell, malloc, memcpy, mmap, mode_t, munmap, open, remove, sighandler_t, signal,
8-
size_t, strcmp, strcpy, strlen, strrchr, timespec, FILE, O_CREAT, O_RDONLY, O_TRUNC, O_WRONLY,
9-
SIGINT, SIG_DFL, SIG_IGN, S_IRGRP, S_IROTH, S_IRUSR, S_IWGRP, S_IWOTH, S_IWUSR,
7+
calloc, close, exit, fclose, fdopen, feof, fflush, fileno, fopen, fprintf, fread, free, fseek,
8+
ftell, malloc, memcpy, mmap, mode_t, munmap, open, remove, sighandler_t, signal, size_t,
9+
strcmp, strcpy, strlen, strrchr, timespec, FILE, O_CREAT, O_RDONLY, O_TRUNC, O_WRONLY, SIGINT,
10+
SIG_DFL, SIG_IGN, S_IRGRP, S_IROTH, S_IRUSR, S_IWGRP, S_IWOTH, S_IWUSR,
1011
};
1112
use libzstd_rs_sys::internal::{MEM_readLE24, MEM_readLE32};
1213
use libzstd_rs_sys::lib::common::zstd_common::{
@@ -66,7 +67,6 @@ extern "C" {
6667
__size: size_t,
6768
__compar: __compar_fn_t,
6869
);
69-
fn clock() -> clock_t;
7070
fn zlibVersion() -> *const core::ffi::c_char;
7171
fn deflate(strm: z_streamp, flush: core::ffi::c_int) -> core::ffi::c_int;
7272
fn deflateEnd(strm: z_streamp) -> core::ffi::c_int;
@@ -324,7 +324,6 @@ const Z_STREAM_END: core::ffi::c_int = 1;
324324
const Z_BUF_ERROR: core::ffi::c_int = -(5);
325325
const Z_BEST_COMPRESSION: core::ffi::c_int = 9;
326326
const ZSTD_SPARSE_DEFAULT: core::ffi::c_int = 1;
327-
const CLOCKS_PER_SEC: core::ffi::c_int = 1000000;
328327
const REFRESH_RATE: PTime = SEC_TO_MICRO as PTime / 6;
329328
const LZ4_MAGICNUMBER: core::ffi::c_int = 0x184d2204 as core::ffi::c_int;
330329
pub unsafe fn FIO_zlibVersion() -> *const core::ffi::c_char {
@@ -4489,7 +4488,7 @@ unsafe fn FIO_compressFilename_internal(
44894488
compressionLevel: core::ffi::c_int,
44904489
) -> core::ffi::c_int {
44914490
let timeStart = UTIL_getTime();
4492-
let cpuStart = clock();
4491+
let cpuStart = Instant::now();
44934492
let mut readsize = 0;
44944493
let mut compressedfilesize = 0;
44954494
let fileSize = UTIL_getFileSize(srcFileName);
@@ -4627,9 +4626,7 @@ unsafe fn FIO_compressFilename_internal(
46274626
);
46284627
}
46294628
}
4630-
let cpuEnd = clock();
4631-
let cpuLoad_s =
4632-
(cpuEnd - cpuStart) as core::ffi::c_double / CLOCKS_PER_SEC as core::ffi::c_double;
4629+
let cpuLoad_s = cpuStart.elapsed().as_secs_f64();
46334630
let timeLength_ns = UTIL_clockSpanNano(timeStart);
46344631
let timeLength_s = timeLength_ns as core::ffi::c_double / 1000000000.0;
46354632
let cpuLoad_pct = cpuLoad_s / timeLength_s * 100.0;

0 commit comments

Comments
 (0)