Skip to content

Commit db1f497

Browse files
MatthewKhouzamarfio
authored andcommitted
TraceEvent: Handle string TIDs
Fix test, it was reading the wrong value before. Signed-off-by: Matthew Khouzam <[email protected]> Signed-off-by: Arnaud Fiorini <[email protected]>
1 parent e412d45 commit db1f497

File tree

5 files changed

+60
-27
lines changed

5 files changed

+60
-27
lines changed

tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/TraceEventTraceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ public void testEmptyEvent() throws TmfTraceException {
351351
assertEquals("X", eventField.getField("ph").getValue());
352352
assertEquals("event1", eventField.getField("name").getValue());
353353
assertEquals("12", eventField.getField("pid").getValue());
354-
assertEquals(12, eventField.getField("tid").getValue());
354+
assertEquals("12", eventField.getField("tid").getValue());
355355
assertEquals("456123453", eventField.getField("ts").getValue()); // it's in microseconds
356356
} finally {
357357
trace.dispose();

tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/traces/stable-diffusion.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
}
4343
},
4444
{
45-
"ph": "X", "cat": "cpu_op", "name": "aten::_to_copy", "pid": 301562, "tid": 455947,
45+
"ph": "X", "cat": "cpu_op", "name": "aten::_to_copy", "pid": "Spans", "tid": "PyTorch Profiler",
4646
"ts": 5624160252062.298, "dur": 1737.624,
4747
"args": {
4848
"External id": 5,"Record function id": 0, "Concrete Inputs": ["", "4", "0", "", "", "False", ""], "Input type": ["long int", "Scalar", "Scalar", "", "", "Scalar", ""], "Input Strides": [[77, 1], [], [], [], [], [], []], "Input Dims": [[1, 77], [], [], [], [], [], []], "Ev Idx": 4

tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/event/TraceEventAspects.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,19 @@
1111

1212
package org.eclipse.tracecompass.incubator.internal.traceevent.core.event;
1313

14+
import java.util.List;
1415
import java.util.Map;
1516
import java.util.logging.Level;
1617

1718
import org.eclipse.jdt.annotation.NonNull;
1819
import org.eclipse.jdt.annotation.Nullable;
1920
import org.eclipse.tracecompass.analysis.os.linux.core.event.aspect.LinuxTidAspect;
21+
import org.eclipse.tracecompass.incubator.internal.traceevent.core.trace.TraceEventTrace;
2022
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
2123
import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
2224
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
2325
import org.eclipse.tracecompass.tmf.core.event.lookup.ITmfCallsite;
24-
25-
import com.google.common.collect.ImmutableList;
26+
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
2627

2728
/**
2829
* Aspects for Trace Compass Logs
@@ -60,7 +61,7 @@ public class TraceEventAspects {
6061
public static @NonNull Iterable<@NonNull ITmfEventAspect<?>> getAspects() {
6162
Iterable<@NonNull ITmfEventAspect<?>> aspectSet = aspects;
6263
if (aspectSet == null) {
63-
aspectSet = ImmutableList.of(
64+
aspectSet = List.of(
6465
new TraceCompassScopeLogLabelAspect(),
6566
TmfBaseAspects.getTimestampAspect(),
6667
new TraceCompassLogPhaseAspect(),
@@ -159,7 +160,15 @@ public boolean isHiddenByDefault() {
159160
@Override
160161
public @Nullable Integer resolve(@NonNull ITmfEvent event) {
161162
if (event instanceof TraceEventEvent) {
162-
return ((TraceEventEvent) event).getField().getTid();
163+
ITmfTrace trace = event.getTrace();
164+
Object tid = ((TraceEventEvent) event).getField().getTid();
165+
if (trace instanceof TraceEventTrace) {
166+
TraceEventTrace traceEventTrace = (TraceEventTrace) trace;
167+
return traceEventTrace.registerTid(tid);
168+
}
169+
if (tid instanceof Integer) {
170+
return (Integer) tid;
171+
}
163172
}
164173
return null;
165174
}

tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/event/TraceEventField.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class TraceEventField {
5151
private final String fName;
5252
private ITmfEventField fContent;
5353
private final @Nullable Map<String, Object> fArgs;
54-
private final @Nullable Integer fTid;
54+
private final @Nullable Object fTid;
5555
private final @Nullable String fCategory;
5656
private final @Nullable String fId;
5757
private final @Nullable Long fDuration;
@@ -91,10 +91,7 @@ public class TraceEventField {
9191
}
9292
// We differentiate between the duration exit and the other exits for some reason
9393
String name = String.valueOf(optString(root, ITraceEventConstants.NAME, TraceEventPhases.DURATION_END.equals(phase) ? UNKNOWN_DURATION_EXIT_EVENT : UNKNOWN_EXIT_EVENT));
94-
Integer tid = optInt(root, ITraceEventConstants.TID);
95-
if (tid == Integer.MIN_VALUE) {
96-
tid = null;
97-
}
94+
String tid = optString(root, ITraceEventConstants.TID, null);
9895
JsonElement jsonElement = root.get(ITraceEventConstants.PID);
9996
JsonPrimitive primitive = jsonElement == null ? null : jsonElement.isJsonPrimitive() ? jsonElement.getAsJsonPrimitive() : null;
10097
Object pid = primitive == null ? null : primitive.isNumber() ? primitive.getAsNumber() : primitive.isString() ? primitive.getAsString() : null;
@@ -143,11 +140,6 @@ private static double optDouble(JsonObject root, String key) {
143140
return jsonElement != null ? jsonElement.getAsDouble() : Double.NaN;
144141
}
145142

146-
private static int optInt(JsonObject root, String key) {
147-
JsonElement jsonElement = root.get(key);
148-
return jsonElement != null ? jsonElement.getAsInt() : Integer.MIN_VALUE;
149-
}
150-
151143
private static @Nullable JsonObject optJSONObject(JsonObject root, String key) {
152144
JsonElement jsonElement = root.get(key);
153145
return jsonElement != null ? jsonElement.getAsJsonObject() : null;
@@ -184,7 +176,7 @@ private static int optInt(JsonObject root, String key) {
184176
* @param fields
185177
* event fields (arguments)
186178
*/
187-
protected TraceEventField(String name, long ts, String phase, @Nullable Object pid, @Nullable Integer tid, @Nullable String category, @Nullable String id, @Nullable Double duration, Map<String, Object> fields) {
179+
protected TraceEventField(String name, long ts, String phase, @Nullable Object pid, @Nullable Object tid, @Nullable String category, @Nullable String id, @Nullable Double duration, Map<String, Object> fields) {
188180
fName = name;
189181
fPid = pid;
190182
fTid = tid;
@@ -258,7 +250,7 @@ public char getPhase() {
258250
*
259251
* @return the event TID
260252
*/
261-
public @Nullable Integer getTid() {
253+
public @Nullable Object getTid() {
262254
return fTid;
263255
}
264256

tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/trace/TraceEventTrace.java

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.NavigableMap;
2323
import java.util.Set;
2424
import java.util.TreeMap;
25+
import java.util.regex.Pattern;
2526

2627
import org.eclipse.core.resources.IProject;
2728
import org.eclipse.core.resources.IResource;
@@ -104,7 +105,10 @@ public class TraceEventTrace extends JsonTrace {
104105

105106
private static final String EVENTS_ARRAY_KEY = "traceEvents"; //$NON-NLS-1$
106107

108+
private static final Pattern TID_REGEX = Pattern.compile("\\d+"); //$NON-NLS-1$
109+
107110
private final @NonNull Map<Object, String> fPidNames = new HashMap<>();
111+
private final @NonNull Map<Object, Integer> fTidMap = new HashMap<>();
108112
private final @NonNull NavigableMap<Integer, String> fTidNames = new TreeMap<>();
109113
private final @NonNull Iterable<@NonNull ITmfEventAspect<?>> fEventAspects;
110114

@@ -322,6 +326,7 @@ private void parseMetadata(TraceEventField field) {
322326
return;
323327
}
324328
Map<@NonNull String, @NonNull String> properties = fProperties;
329+
Object tid = field.getTid();
325330
switch (name) {
326331
case PROCESS_NAME:
327332
String procName = (String) args.get(NAME_ARG);
@@ -344,15 +349,17 @@ private void parseMetadata(TraceEventField field) {
344349
break;
345350
case THREAD_NAME:
346351
String threadName = (String) args.get(NAME_ARG);
347-
fTidNames.put(field.getTid(), threadName);
352+
if (tid instanceof Integer tidInt) {
353+
fTidNames.put(tidInt, threadName);
354+
}
348355
if (threadName != null) {
349-
properties.put(TID_PREFIX + field.getTid(), threadName);
356+
properties.put(TID_PREFIX + tid, threadName);
350357
}
351358
break;
352359
case THREAD_SORT_INDEX:
353360
sortIndex = (String) args.get(SORT_INDEX);
354361
if (sortIndex != null) {
355-
properties.put(name + '-' + field.getTid(), sortIndex);
362+
properties.put(name + '-' + tid, sortIndex);
356363
}
357364
break;
358365
default:
@@ -369,8 +376,8 @@ public class ProcessNameAspect extends org.eclipse.tracecompass.incubator.analys
369376

370377
@Override
371378
public @Nullable String resolve(@NonNull ITmfEvent event) {
372-
if (event instanceof TraceEventEvent) {
373-
TraceEventField field = ((TraceEventEvent) event).getField();
379+
if (event instanceof TraceEventEvent traceEventEvent) {
380+
TraceEventField field = traceEventEvent.getField();
374381
if (field.getPid() != null) {
375382
return fPidNames.get(field.getPid());
376383
}
@@ -386,13 +393,38 @@ public class ThreadNameAspect extends org.eclipse.tracecompass.incubator.analysi
386393

387394
@Override
388395
public @Nullable String resolve(@NonNull ITmfEvent event) {
389-
if (event instanceof TraceEventEvent) {
390-
TraceEventField field = ((TraceEventEvent) event).getField();
391-
if (field.getTid() != null) {
392-
return fTidNames.get(field.getTid());
396+
if (event instanceof TraceEventEvent traceEventEvent) {
397+
TraceEventField field = traceEventEvent.getField();
398+
Object tid = field.getTid();
399+
if (tid instanceof String tidString && TID_REGEX.matcher(tidString).matches()) {
400+
tid = Integer.parseInt(tidString);
393401
}
402+
if (tid instanceof Integer) {
403+
return fTidNames.get(tid);
404+
}
405+
394406
}
395407
return null;
396408
}
397409
}
410+
411+
/**
412+
* Register a TID, it is normally numerical, but a best effort is made for
413+
* string TIDs.
414+
*
415+
* @param tid
416+
* the TID object
417+
* @return an integer value
418+
*/
419+
public @Nullable Integer registerTid(Object tid) {
420+
if (tid instanceof Integer tidInt) {
421+
fTidMap.put(tid, tidInt);
422+
return tidInt;
423+
}
424+
if (tid instanceof String tidString && TID_REGEX.matcher(tidString).matches()) {
425+
return Integer.parseInt(tidString);
426+
}
427+
428+
return null;
429+
}
398430
}

0 commit comments

Comments
 (0)