mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
5377533b0b
commit
5c7092adb1
|
@ -118,6 +118,32 @@ begin
|
||||||
Result:=t1-t2;
|
Result:=t1-t2;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function SwGetProcessTime(var ut:QWORD):Boolean;
|
||||||
|
var
|
||||||
|
ct,et,kt:TFileTime;
|
||||||
|
begin
|
||||||
|
QWORD(ct):=0;
|
||||||
|
QWORD(et):=0;
|
||||||
|
QWORD(kt):=0;
|
||||||
|
ut:=0;
|
||||||
|
_sig_lock;
|
||||||
|
Result:=GetProcessTimes(GetCurrentProcess,ct,et,kt,TFileTime(ut));
|
||||||
|
_sig_unlock;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SwGetThreadTime(var ut:QWORD):Boolean;
|
||||||
|
var
|
||||||
|
ct,et,kt:TFileTime;
|
||||||
|
begin
|
||||||
|
QWORD(ct):=0;
|
||||||
|
QWORD(et):=0;
|
||||||
|
QWORD(kt):=0;
|
||||||
|
ut:=0;
|
||||||
|
_sig_lock;
|
||||||
|
Result:=GetThreadTimes(GetCurrentProcess,ct,et,kt,TFileTime(ut));
|
||||||
|
_sig_unlock;
|
||||||
|
end;
|
||||||
|
|
||||||
function ps4_gettimeofday(tv:Ptimeval;tz:Ptimezone):Integer; SysV_ABI_CDecl;
|
function ps4_gettimeofday(tv:Ptimeval;tz:Ptimezone):Integer; SysV_ABI_CDecl;
|
||||||
Var
|
Var
|
||||||
tp:timespec;
|
tp:timespec;
|
||||||
|
@ -212,7 +238,6 @@ end;
|
||||||
|
|
||||||
function ps4_clock_gettime(clock_id:Integer;tp:Ptimespec):Integer; SysV_ABI_CDecl;
|
function ps4_clock_gettime(clock_id:Integer;tp:Ptimespec):Integer; SysV_ABI_CDecl;
|
||||||
var
|
var
|
||||||
ct,et,kt,ut:TFILETIME;
|
|
||||||
pc,pf:QWORD;
|
pc,pf:QWORD;
|
||||||
begin
|
begin
|
||||||
|
|
||||||
|
@ -222,10 +247,12 @@ begin
|
||||||
case clock_id of
|
case clock_id of
|
||||||
CLOCK_SECOND:
|
CLOCK_SECOND:
|
||||||
begin
|
begin
|
||||||
GetSystemTimeAsFileTime(ct);
|
_sig_lock;
|
||||||
QWORD(ct):=QWORD(ct)-DELTA_EPOCH_IN_100NS;
|
GetSystemTimeAsFileTime(TFILETIME(pc));
|
||||||
tp^.tv_sec :=QWORD(ct) div POW10_7;
|
_sig_unlock;
|
||||||
//tp^.tv_nsec:=(QWORD(ct) mod POW10_7)*100;
|
pc:=pc-DELTA_EPOCH_IN_100NS;
|
||||||
|
tp^.tv_sec :=pc div POW10_7;
|
||||||
|
//tp^.tv_nsec:=(QWORD(pc) mod POW10_7)*100;
|
||||||
tp^.tv_nsec:=0;
|
tp^.tv_nsec:=0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -233,10 +260,12 @@ begin
|
||||||
CLOCK_REALTIME_PRECISE,
|
CLOCK_REALTIME_PRECISE,
|
||||||
CLOCK_REALTIME_FAST:
|
CLOCK_REALTIME_FAST:
|
||||||
begin
|
begin
|
||||||
GetSystemTimeAsFileTime(ct);
|
_sig_lock;
|
||||||
QWORD(ct):=QWORD(ct)-DELTA_EPOCH_IN_100NS;
|
GetSystemTimeAsFileTime(TFILETIME(pc));
|
||||||
tp^.tv_sec :=QWORD(ct) div POW10_7;
|
_sig_unlock;
|
||||||
tp^.tv_nsec:=(QWORD(ct) mod POW10_7)*100;
|
pc:=pc-DELTA_EPOCH_IN_100NS;
|
||||||
|
tp^.tv_sec :=(pc div POW10_7);
|
||||||
|
tp^.tv_nsec:=(pc mod POW10_7)*100;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
CLOCK_EXT_NETWORK ,
|
CLOCK_EXT_NETWORK ,
|
||||||
|
@ -286,27 +315,25 @@ begin
|
||||||
|
|
||||||
CLOCK_PROCTIME:
|
CLOCK_PROCTIME:
|
||||||
begin
|
begin
|
||||||
_sig_lock;
|
if SwGetProcessTime(pc) then
|
||||||
if not GetProcessTimes(GetCurrentProcess,ct,et,kt,ut) then Result:=_set_errno(EINVAL);
|
|
||||||
_sig_unlock;
|
|
||||||
if (Result=0) then
|
|
||||||
begin
|
begin
|
||||||
QWORD(ct) :=QWORD(kt)+QWORD(ut);
|
tp^.tv_sec :=(pc div POW10_7);
|
||||||
tp^.tv_sec :=QWORD(ct) div POW10_7;
|
tp^.tv_nsec:=(pc mod POW10_7)*100;
|
||||||
tp^.tv_nsec:=(QWORD(ct) mod POW10_7)*100;
|
end else
|
||||||
|
begin
|
||||||
|
Result:=_set_errno(EINVAL);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
CLOCK_THREAD_CPUTIME_ID:
|
CLOCK_THREAD_CPUTIME_ID:
|
||||||
begin
|
begin
|
||||||
_sig_lock;
|
if SwGetThreadTime(pc) then
|
||||||
if not GetThreadTimes(GetCurrentProcess,ct,et,kt,ut) then Result:=_set_errno(EINVAL);
|
|
||||||
_sig_unlock;
|
|
||||||
if (Result=0) then
|
|
||||||
begin
|
begin
|
||||||
QWORD(ct) :=QWORD(kt)+QWORD(ut);
|
tp^.tv_sec :=(pc div POW10_7);
|
||||||
tp^.tv_sec :=QWORD(ct) div POW10_7;
|
tp^.tv_nsec:=(pc mod POW10_7)*100;
|
||||||
tp^.tv_nsec:=(QWORD(ct) mod POW10_7)*100;
|
end else
|
||||||
|
begin
|
||||||
|
Result:=_set_errno(EINVAL);
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -340,19 +367,15 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function ps4_sceKernelGetProcessTime:QWORD; SysV_ABI_CDecl; //microseconds
|
function ps4_sceKernelGetProcessTime:QWORD; SysV_ABI_CDecl; //microseconds
|
||||||
var
|
|
||||||
ct,et,kt,ut:TFileTime;
|
|
||||||
begin
|
begin
|
||||||
_sig_lock;
|
if SwGetProcessTime(Result) then
|
||||||
if GetProcessTimes(GetCurrentProcess,ct,et,kt,ut) then
|
|
||||||
begin
|
begin
|
||||||
Result:=({QWORD(kt)+}QWORD(ut)) div 10;
|
Result:=Result div 10;
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
_set_errno(EINVAL);
|
_set_errno(EINVAL);
|
||||||
Result:=0;
|
Result:=0;
|
||||||
end;
|
end;
|
||||||
_sig_unlock;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function ps4_sceKernelGetProcessTimeCounterFrequency:QWORD; SysV_ABI_CDecl; //microseconds*10
|
function ps4_sceKernelGetProcessTimeCounterFrequency:QWORD; SysV_ABI_CDecl; //microseconds*10
|
||||||
|
@ -361,18 +384,15 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function ps4_sceKernelGetProcessTimeCounter:QWORD; SysV_ABI_CDecl; //microseconds*10
|
function ps4_sceKernelGetProcessTimeCounter:QWORD; SysV_ABI_CDecl; //microseconds*10
|
||||||
var
|
|
||||||
ct,et,kt,ut:TFileTime;
|
|
||||||
begin
|
begin
|
||||||
_sig_lock;
|
if SwGetProcessTime(Result) then
|
||||||
if GetProcessTimes(GetCurrentProcess,ct,et,kt,ut) then
|
|
||||||
begin
|
begin
|
||||||
Result:=({QWORD(kt)+}QWORD(ut));
|
//
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
|
_set_errno(EINVAL);
|
||||||
Result:=0;
|
Result:=0;
|
||||||
end;
|
end;
|
||||||
_sig_unlock;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//1sec=10 000 000
|
//1sec=10 000 000
|
||||||
|
|
Loading…
Reference in New Issue