Skip to content

Commit be08a56

Browse files
authored
Merge pull request microsoft#1244 from brianrob/process-names
Handle More Corner Case Process Names in Linux Traces
2 parents d483418 + fbc4f32 commit be08a56

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

src/LinuxEvent.Tests/EventParseTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,5 +240,22 @@ public void SchedHeaderFormat2()
240240
new ScheduleSwitch("comm2", 1, 0, 'S', "comm1", 0, 1)
241241
});
242242
}
243+
244+
[Fact]
245+
public void CornerCaseProcessNames()
246+
{
247+
string path = Constants.GetTestingPerfDumpPath("corner_case_process_names");
248+
HeaderTest(path, blockedTime: false,
249+
commands: new string[] { "6", "77", "", "k/2", "k/[2]", "k:2"},
250+
pids: new int[] { 0, 1, 2, 3, 4, 5 },
251+
tids: new int[] { 0, 1, 2, 3, 4, 5 },
252+
cpus: new int[] { 0, 0, 0, 0, 0, 0 },
253+
times: new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
254+
timeProperties: new int[] { 1, 1, 1, 1, 1, 1 },
255+
events: new string[] { "event_name", "event_name", "event_name", "event_name", "event_name", "event_name" },
256+
eventProperties: new string[] { "event_properties", "event_properties", "event_properties", "event_properties", "event_properties", "event_properties" },
257+
eventKinds: null,
258+
switches: null);
259+
}
243260
}
244261
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
6 0/0 [000] 0.0: 1 event_name: event_properties
2+
address symbol (module)
3+
address symbol2 (module2)
4+
address main (main)
5+
6+
77 1/1 [000] 0.0: 1 event_name: event_properties
7+
address symbol3 (module3)
8+
address symbol4 (module4)
9+
address main (main)
10+
11+
2/2 [000] 0.0: 1 event_name: event_properties
12+
address symbol5 (module5)
13+
address symbol6 (module6)
14+
address main (main)
15+
16+
k/2 3/3 [000] 0.0: 1 event_name: event_properties
17+
address symbol7 (module7)
18+
address symbol8 (module8)
19+
address main (main)
20+
21+
k/[2] 4/4 [000] 0.0: 1 event_name: event_properties
22+
address symbol9 (module9)
23+
address symbol10 (module10)
24+
address main (main)
25+
26+
k:2 5/5 [000] 0.0: 1 event_name: event_properties
27+
address symbol11 (module11)
28+
address symbol12 (module12)
29+
address main (main)

src/TraceEvent/Stacks/Linux/LinuxPerfScriptEventParser.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,11 +550,18 @@ private static int FindEndOfProcessCommand(FastStream source)
550550
}
551551
else if (!char.IsDigit((char)val))
552552
{
553-
if(source.Peek(idx+1) == '[')
553+
if (source.Peek(idx + 1) == '[')
554554
{
555555
return firstSpaceIdx;
556556
}
557-
goto startOver;
557+
else if (char.IsWhiteSpace((char)val))
558+
{
559+
firstSpaceIdx = (int)idx;
560+
}
561+
else
562+
{
563+
goto startOver;
564+
}
558565
}
559566
}
560567
}

0 commit comments

Comments
 (0)