浏览代码

Filter out identical MsgInvokeEvent messages - this massively speeds up certain realtime curve displays. consider this a beta feature until it is documented that no unexpected side effects occur.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6732 8c9fc860-2736-0410-a75d-ab315db34111
eth.hunzikerp 9 年之前
父节点
当前提交
c261be8a79
共有 1 个文件被更改,包括 15 次插入0 次删除
  1. 15 0
      source/WMMessages.Mod

+ 15 - 0
source/WMMessages.Mod

@@ -186,6 +186,7 @@ TYPE
 		CONST
 			MergePointers = TRUE;
 			MergeInvalidates = TRUE;
+			MergeInvokeEvents = TRUE;
 
 			PROCEDURE Merge(VAR x,y,dx,dy: LONGINT; X,Y,dX,dY: LONGINT);
 			VAR nx, ny, ndx, ndy: LONGINT;
@@ -246,6 +247,20 @@ TYPE
 				END
 			END;
 
+						
+			(*	PH *)
+			IF MergeInvokeEvents & (msg.msgType = MsgInvokeEvent) & (msg.msgSubType = 0) & (num > 0) THEN  (* reduce pointer moves in buffer *)
+				i := num - 1;
+				WHILE i >= 0 DO
+					pos := (head + i) MOD LEN(msgQ);
+					IF (msgQ[pos].msgType = MsgInvokeEvent) & (msgQ[pos].msgSubType = 0) & (msgQ[pos].event = msg.event)& (msgQ[pos].sender = msg.sender) & (msgQ[pos].ext = msg.ext) THEN
+						RETURN TRUE
+					END;
+					DEC(i)
+				END
+			END;
+			(*  /PH*)
+
 			IF MergeInvalidates & (msg.msgType = MsgInvalidate) & (num > 0)  THEN
 				i := num-1;
 				pos := (head + i) MOD LEN(msgQ);