Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,8 @@ public PerfettoTrackEventBuilder usingNamedTrack(long id, String name, long pare
}

NamedTrack track = mObjectsCache.mNamedTrackCache.get(name.hashCode());
if (track == null || !track.getName().equals(name)) {
if (track == null || !track.getName().equals(name) || track.getId() != id
|| track.getParentUuid() != parentUuid) {
track = new NamedTrack(id, name, parentUuid, mNativeMemoryCleaner);
mObjectsCache.mNamedTrackCache.put(name.hashCode(), track);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,14 +117,16 @@ public long getPtr() {
static final class NamedTrack implements PerfettoPointer {
private final long mPtr;
private final long mExtraPtr;
private final String mName;
private final long mId;
private final String mName;
private final long mParentUuid;

NamedTrack(long id, String name, long parentUuid, PerfettoNativeMemoryCleaner memoryCleaner) {
mPtr = native_init(id, name, parentUuid);
mExtraPtr = native_get_extra_ptr(mPtr);
mName = name;
mId = id;
mName = name;
mParentUuid = parentUuid;
memoryCleaner.registerNativeAllocation(this, mPtr, native_delete());
}

Expand All @@ -133,10 +135,18 @@ public long getPtr() {
return mExtraPtr;
}

public long getId() {
return mId;
}

public String getName() {
return mName;
}

public long getParentUuid() {
return mParentUuid;
}

@FastNative
private static native long native_init(long id, String name, long parentUuid);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
import dev.perfetto.sdk.PerfettoTrackEventBuilder;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.HashSet;
import java.util.HashMap;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand Down Expand Up @@ -72,6 +75,7 @@ public class PerfettoTraceTest {
private final Set<String> mEventNames = new ArraySet<>();
private final Set<String> mDebugAnnotationNames = new ArraySet<>();
private final Set<String> mTrackNames = new ArraySet<>();
private final Map<String, Set<Long>> mTrackNameToTrackUuids = new HashMap<>();

@Before
public void setUp() {
Expand All @@ -86,6 +90,7 @@ public void setUp() {
mEventNames.clear();
mDebugAnnotationNames.clear();
mTrackNames.clear();
mTrackNameToTrackUuids.clear();
}

@Test
Expand Down Expand Up @@ -204,6 +209,50 @@ public void testDebugAnnotations() throws Exception {
assertThat(mDebugAnnotationNames).contains("string_val");
}

@Test
public void testTwoNamedTrackWithDifferentIds() throws Exception {
TraceConfig traceConfig = getTraceConfig(FOO);

PerfettoTrace.Session session = new PerfettoTrace.Session(true, traceConfig.toByteArray());

PerfettoTrace.instant(FOO_CATEGORY, "event1")
.usingNamedTrack(123, FOO, PerfettoTrace.getProcessTrackUuid())
.emit();
PerfettoTrace.instant(FOO_CATEGORY, "event2")
.usingNamedTrack(456, FOO, PerfettoTrace.getProcessTrackUuid())
.emit();

Trace trace = Trace.parseFrom(session.close());

for (TracePacket packet : trace.getPacketList()) {
collectTrackNameAndUuid(packet);
}

assertThat(mTrackNameToTrackUuids.get(FOO).size()).isEqualTo(2);
}

@Test
public void testTwoNamedTrackWithDifferentParentUuids() throws Exception {
TraceConfig traceConfig = getTraceConfig(FOO);

PerfettoTrace.Session session = new PerfettoTrace.Session(true, traceConfig.toByteArray());

PerfettoTrace.instant(FOO_CATEGORY, "event1")
.usingNamedTrack(123, FOO, PerfettoTrace.getProcessTrackUuid())
.emit();
PerfettoTrace.instant(FOO_CATEGORY, "event2")
.usingNamedTrack(123, FOO, PerfettoTrace.getThreadTrackUuid(Process.myTid()))
.emit();

Trace trace = Trace.parseFrom(session.close());

for (TracePacket packet : trace.getPacketList()) {
collectTrackNameAndUuid(packet);
}

assertThat(mTrackNameToTrackUuids.get(FOO).size()).isEqualTo(2);
}

@Test
public void testNamedTrack() throws Exception {
TraceConfig traceConfig = getTraceConfig(FOO);
Expand Down Expand Up @@ -785,4 +834,14 @@ private void collectTrackNames(TracePacket packet) {
TrackDescriptor desc = packet.getTrackDescriptor();
mTrackNames.add(desc.getName());
}


private void collectTrackNameAndUuid(TracePacket packet) {
if (!packet.hasTrackDescriptor()) {
return;
}
TrackDescriptor desc = packet.getTrackDescriptor();
mTrackNameToTrackUuids.putIfAbsent(desc.getName(), new HashSet<>());
mTrackNameToTrackUuids.get(desc.getName()).add(desc.getUuid());
}
}