Prechádzať zdrojové kódy

[Profile] add custom event as performance.measure string in the timeline (#788)

Yuxiao Mao 2 mesiacov pred
rodič
commit
0e9d99bded
1 zmenil súbory, kde vykonal 32 pridanie a 2 odobranie
  1. 32 2
      other/haxelib/hlprof/ProfileGen.hx

+ 32 - 2
other/haxelib/hlprof/ProfileGen.hx

@@ -55,6 +55,7 @@ class StackLink {
 
 class Frame {
 	public var samples : Array<{ thread : Int, time : Float, stack : Array<StackElement> }> = [];
+	public var marks : Array<{ thread : Int, time : Float, msgId : Int, data : String }> = [];
 	public var startTime : Float;
 	public function new() {
 	}
@@ -221,7 +222,8 @@ class ProfileGen {
 					tcur.curFrame.startTime = time;
 					tcur.frames.push(tcur.curFrame);
 				default:
-					Sys.println("Unknown profile message #"+msgId);
+					var dataStr = data.getString(0, data.length, RawNative); // our string is encoded in hl native format utf16 (ucs2)
+					tcur.curFrame.marks.push({ thread : tid, time : time, msgId : msgId, data : dataStr });
 				}
 			}
 		}
@@ -296,7 +298,8 @@ class ProfileGen {
 				args: { data : { startTime : 0 } },
 			});
 
-			for( f in thread.frames ) {
+			for( findex in 0...thread.frames.length ) {
+				var f = thread.frames[findex];
 				if( f.samples.length == 0 ) continue;
 				var ts = timeStamp(f.startTime);
 				var tend = timeStamp(f.samples[f.samples.length-1].time);
@@ -309,6 +312,33 @@ class ProfileGen {
 					cat : "disabled-by-default-devtools.timeline",
 					name : "RunTask",
 				});
+				// Insert event marker as performance.measure
+				if( f.marks.length == 0 ) continue;
+				for( mindex in 0...f.marks.length ) {
+					var mark = f.marks[mindex];
+					var markStart = timeStamp(mark.time);
+					var markEnd = ( mindex == f.marks.length-1 ) ? tend : timeStamp(f.marks[mindex+1].time);
+					json.push({
+						pid : 0,
+						tid : tid,
+						ts : markStart,
+						ph : "b",
+						cat : "blink.user_timing",
+						id2 : { local : '$findex' },
+						args : {},
+						name : '${mark.msgId}:${mark.data}',
+					});
+					json.push({
+						pid : 0,
+						tid : tid,
+						ts : markEnd,
+						ph : "e",
+						cat : "blink.user_timing",
+						id2 : { local : '$findex' },
+						args : {},
+						name : '${mark.msgId}:${mark.data}',
+					});
+				}
 			}
 			for( f in thread.frames ) {
 				if( f.samples.length == 0 ) continue;