浏览代码

Fixed missing cpu cycles (copied from Windows)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8690 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 年之前
父节点
当前提交
e18fe3936d
共有 1 个文件被更改,包括 10 次插入3 次删除
  1. 10 3
      source/Unix.Objects.Mod

+ 10 - 3
source/Unix.Objects.Mod

@@ -184,6 +184,7 @@ TYPE
 		state-			: Machine.State;	
 		state-			: Machine.State;	
 		state0	: ARRAY 2048 OF CHAR;		(* thread state at body start, used for restart after trap *)					
 		state0	: ARRAY 2048 OF CHAR;		(* thread state at body start, used for restart after trap *)					
 		context: ANY; (* commands context *)
 		context: ANY; (* commands context *)
+		lastThreadTimes: HUGEINT;
 
 
 		PROCEDURE FindRoots*;
 		PROCEDURE FindRoots*;
 		VAR sp, bp, n, a0, a1, adr: ADDRESS; desc: Modules.ProcedureDescPointer; i: LONGINT; p {UNTRACED}: ANY;
 		VAR sp, bp, n, a0, a1, adr: ADDRESS; desc: Modules.ProcedureDescPointer; i: LONGINT; p {UNTRACED}: ANY;
@@ -577,10 +578,16 @@ TYPE
 
 
 	
 	
 	PROCEDURE GetCpuCycles*( process : Process; VAR cpuCycles: CpuCyclesArray; all: BOOLEAN );
 	PROCEDURE GetCpuCycles*( process : Process; VAR cpuCycles: CpuCyclesArray; all: BOOLEAN );
-	VAR i: LONGINT;
+	VAR temp : HUGEINT; 
 	BEGIN
 	BEGIN
-		ASSERT( process # NIL );
-		FOR i := 0 TO Machine.MaxCPU-1 DO  cpuCycles[i] := 0  END;
+		ASSERT(process # NIL);
+		cpuCycles[0] := Machine.GetTimer();
+
+		IF ~all THEN
+			temp := process.lastThreadTimes;
+			process.lastThreadTimes := cpuCycles[0];
+			cpuCycles[0] := cpuCycles[0] - temp;
+		END;
 	END GetCpuCycles;
 	END GetCpuCycles;