Skip to content

Commit 068770c

Browse files
committed
feat(jfr): add submittingSpanId to datadog.QueueTime for causal DAG edges
1 parent 8a18576 commit 068770c

6 files changed

Lines changed: 12 additions & 6 deletions

File tree

ddprof-lib/src/main/cpp/event.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ typedef struct QueueTimeEvent {
184184
u32 _origin;
185185
u32 _queueType;
186186
u32 _queueLength;
187+
u64 _submitting_span_id;
187188
} QueueTimeEvent;
188189

189190
#endif // _EVENT_H

ddprof-lib/src/main/cpp/flightRecorder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,6 +1598,7 @@ void Recording::recordQueueTime(Buffer *buf, int tid, QueueTimeEvent *event) {
15981598
buf->putVar64(event->_queueType);
15991599
buf->putVar64(event->_queueLength);
16001600
writeContext(buf, Contexts::get());
1601+
buf->putVar64(event->_submitting_span_id);
16011602
writeEventSizePrefix(buf, start);
16021603
flushIfNeeded(buf);
16031604
}

ddprof-lib/src/main/cpp/javaApi.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,8 @@ static int dictionarizeClassName(JNIEnv* env, jstring className) {
319319
extern "C" DLLEXPORT void JNICALL
320320
Java_com_datadoghq_profiler_JavaProfiler_recordQueueEnd0(
321321
JNIEnv *env, jclass unused, jlong startTime, jlong endTime, jstring task,
322-
jstring scheduler, jthread origin, jstring queueType, jint queueLength) {
322+
jstring scheduler, jthread origin, jstring queueType, jint queueLength,
323+
jlong submittingSpanId) {
323324
int tid = ProfiledThread::currentTid();
324325
if (tid < 0) {
325326
return;
@@ -349,6 +350,7 @@ Java_com_datadoghq_profiler_JavaProfiler_recordQueueEnd0(
349350
event._origin = origin_tid;
350351
event._queueType = queue_type_offset;
351352
event._queueLength = queueLength;
353+
event._submitting_span_id = (u64)submittingSpanId;
352354
Profiler::instance()->recordQueueTime(tid, &event);
353355
}
354356

ddprof-lib/src/main/cpp/jfrMetadata.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ void JfrMetadata::initialize(
214214
<< field("queueType", T_CLASS, "Queue Type", F_CPOOL)
215215
<< field("queueLength", T_INT, "Queue Length on Entry")
216216
<< field("spanId", T_LONG, "Span ID")
217-
<< field("localRootSpanId", T_LONG, "Local Root Span ID") ||
217+
<< field("localRootSpanId", T_LONG, "Local Root Span ID")
218+
<< field("submittingSpanId", T_LONG, "Submitting Span ID") ||
218219
contextAttributes)
219220

220221
<< (type("datadog.HeapUsage", T_HEAP_USAGE, "JVM Heap Usage")

ddprof-lib/src/main/java/com/datadoghq/profiler/JavaProfiler.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,9 @@ public void recordQueueTime(long startTicks,
314314
Class<?> scheduler,
315315
Class<?> queueType,
316316
int queueLength,
317-
Thread origin) {
318-
recordQueueEnd0(startTicks, endTicks, task.getName(), scheduler.getName(), origin, queueType.getName(), queueLength);
317+
Thread origin,
318+
long submittingSpanId) {
319+
recordQueueEnd0(startTicks, endTicks, task.getName(), scheduler.getName(), origin, queueType.getName(), queueLength, submittingSpanId);
319320
}
320321

321322
/**
@@ -374,7 +375,7 @@ private static ThreadContext initializeThreadContext() {
374375

375376
private static native void recordSettingEvent0(String name, String value, String unit);
376377

377-
private static native void recordQueueEnd0(long startTicks, long endTicks, String task, String scheduler, Thread origin, String queueType, int queueLength);
378+
private static native void recordQueueEnd0(long startTicks, long endTicks, String task, String scheduler, Thread origin, String queueType, int queueLength, long submittingSpanId);
378379

379380
private static native long currentTicks0();
380381

ddprof-test/src/test/java/com/datadoghq/profiler/queue/QueueTimeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void run() {
4545
profiler.setContext(1, 2);
4646
long now = profiler.getCurrentTicks();
4747
if (profiler.isThresholdExceeded(9, start, now)) {
48-
profiler.recordQueueTime(start, now, getClass(), QueueTimeTest.class, ArrayBlockingQueue.class, 10, origin);
48+
profiler.recordQueueTime(start, now, getClass(), QueueTimeTest.class, ArrayBlockingQueue.class, 10, origin, 0L);
4949
}
5050
profiler.clearContext();
5151
}

0 commit comments

Comments
 (0)