浏览代码

optimize EventLoop.insertEventByTime

Simon Krajewski 3 月之前
父节点
当前提交
23a491437e
共有 1 个文件被更改,包括 10 次插入1 次删除
  1. 10 1
      std/sys/thread/EventLoop.hx

+ 10 - 1
std/sys/thread/EventLoop.hx

@@ -28,6 +28,7 @@ class EventLoop {
 	final waitLock = new Lock();
 	final waitLock = new Lock();
 	var promisedEventsCount = 0;
 	var promisedEventsCount = 0;
 	var regularEvents:Null<RegularEvent>;
 	var regularEvents:Null<RegularEvent>;
+	var lastRegularEvent:Null<RegularEvent>;
 	var isMainThread:Bool;
 	var isMainThread:Bool;
 	static var CREATED : Bool;
 	static var CREATED : Bool;
 
 
@@ -53,12 +54,20 @@ class EventLoop {
 		switch regularEvents {
 		switch regularEvents {
 			case null:
 			case null:
 				regularEvents = event;
 				regularEvents = event;
+				lastRegularEvent = null;
 			case current:
 			case current:
 				var previous = null;
 				var previous = null;
+				if (lastRegularEvent != null && lastRegularEvent.nextRunTime <= event.nextRunTime) {
+					lastRegularEvent.next = event;
+					event.previous = lastRegularEvent;
+					lastRegularEvent = event;
+					return;
+				}
 				while(true) {
 				while(true) {
 					if(current == null) {
 					if(current == null) {
 						previous.next = event;
 						previous.next = event;
 						event.previous = previous;
 						event.previous = previous;
+						lastRegularEvent = event;
 						break;
 						break;
 					} else if(event.nextRunTime < current.nextRunTime) {
 					} else if(event.nextRunTime < current.nextRunTime) {
 						event.next = current;
 						event.next = current;
@@ -66,7 +75,7 @@ class EventLoop {
 						switch previous {
 						switch previous {
 							case null:
 							case null:
 								regularEvents = event;
 								regularEvents = event;
-								case _:
+							case _:
 								event.previous = previous;
 								event.previous = previous;
 								previous.next = event;
 								previous.next = event;
 								current.previous = event;
 								current.previous = event;