Skip to content

Commit f73efae

Browse files
authored
Merge pull request #8 from pyroscope-io/feat/lock-event-types
feat: add support for event types for lock profiling.
2 parents 3c6759c + 1ac4a10 commit f73efae

1 file changed

Lines changed: 79 additions & 8 deletions

File tree

parser/event_types.go

Lines changed: 79 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@ import (
77
)
88

99
var events = map[string]func() Parseable{
10-
"jdk.ActiveRecording": func() Parseable { return new(ActiveRecording) },
11-
"jdk.ActiveSetting": func() Parseable { return new(ActiveSetting) },
12-
"jdk.CPUInformation": func() Parseable { return new(CPUInformation) },
13-
"jdk.CPULoad": func() Parseable { return new(CPULoad) },
14-
"jdk.ExecutionSample": func() Parseable { return new(ExecutionSample) },
15-
"jdk.InitialSystemProperty": func() Parseable { return new(InitialSystemProperty) },
16-
// TODO: jdk.JavaMonitorEnter
10+
"jdk.ActiveRecording": func() Parseable { return new(ActiveRecording) },
11+
"jdk.ActiveSetting": func() Parseable { return new(ActiveSetting) },
12+
"jdk.CPUInformation": func() Parseable { return new(CPUInformation) },
13+
"jdk.CPULoad": func() Parseable { return new(CPULoad) },
14+
"jdk.ExecutionSample": func() Parseable { return new(ExecutionSample) },
15+
"jdk.InitialSystemProperty": func() Parseable { return new(InitialSystemProperty) },
16+
"jdk.JavaMonitorEnter": func() Parseable { return new(JavaMonitorEnter) },
1717
"jdk.JVMInformation": func() Parseable { return new(JVMInformation) },
1818
"jdk.NativeLibrary": func() Parseable { return new(NativeLibrary) },
1919
"jdk.ObjectAllocationInNewTLAB": func() Parseable { return new(ObjectAllocationInNewTLAB) },
2020
"jdk.ObjectAllocationOutsideTLAB": func() Parseable { return new(ObjectAllocationOutsideTLAB) },
2121
"jdk.OSInformation": func() Parseable { return new(OSInformation) },
22-
// TODO: jdk.ThreadPark
22+
"jdk.ThreadPark": func() Parseable { return new(ThreadPark) },
2323
}
2424

2525
func ParseEvent(r reader.Reader, classes ClassMap, cpools PoolMap) (Parseable, error) {
@@ -224,6 +224,40 @@ func (isp *InitialSystemProperty) Parse(r reader.Reader, classes ClassMap, cpool
224224
return parseFields(r, classes, cpools, class, nil, true, isp.parseField)
225225
}
226226

227+
type JavaMonitorEnter struct {
228+
StartTime int64
229+
Duration int64
230+
EventThread *Thread
231+
StackTrace *StackTrace
232+
MonitorClass *Class
233+
PreviousOwner *Thread
234+
Address int64
235+
}
236+
237+
func (jme *JavaMonitorEnter) parseField(name string, p ParseResolvable) (err error) {
238+
switch name {
239+
case "startTime":
240+
jme.StartTime, err = toLong(p)
241+
case "duration":
242+
jme.Duration, err = toLong(p)
243+
case "eventThread":
244+
jme.EventThread, err = toThread(p)
245+
case "stackTrace":
246+
jme.StackTrace, err = toStackTrace(p)
247+
case "monitorClass":
248+
jme.MonitorClass, err = toClass(p)
249+
case "previousOwner":
250+
jme.PreviousOwner, err = toThread(p)
251+
case "address":
252+
jme.Address, err = toLong(p)
253+
}
254+
return err
255+
}
256+
257+
func (jme *JavaMonitorEnter) Parse(r reader.Reader, classes ClassMap, cpools PoolMap, class ClassMetadata) error {
258+
return parseFields(r, classes, cpools, class, nil, true, jme.parseField)
259+
}
260+
227261
type JVMInformation struct {
228262
StartTime int64
229263
JVMName string
@@ -364,6 +398,43 @@ func (os *OSInformation) Parse(r reader.Reader, classes ClassMap, cpools PoolMap
364398
return parseFields(r, classes, cpools, class, nil, true, os.parseField)
365399
}
366400

401+
type ThreadPark struct {
402+
StartTime int64
403+
Duration int64
404+
EventThread *Thread
405+
StackTrace *StackTrace
406+
ParkedClass *Class
407+
Timeout int64
408+
Until int64
409+
Address int64
410+
}
411+
412+
func (tp *ThreadPark) parseField(name string, p ParseResolvable) (err error) {
413+
switch name {
414+
case "startTime":
415+
tp.StartTime, err = toLong(p)
416+
case "duration":
417+
tp.Duration, err = toLong(p)
418+
case "eventThread":
419+
tp.EventThread, err = toThread(p)
420+
case "stackTrace":
421+
tp.StackTrace, err = toStackTrace(p)
422+
case "parkedClass":
423+
tp.ParkedClass, err = toClass(p)
424+
case "timeout":
425+
tp.Timeout, err = toLong(p)
426+
case "until":
427+
tp.Until, err = toLong(p)
428+
case "address":
429+
tp.Address, err = toLong(p)
430+
}
431+
return err
432+
}
433+
434+
func (tp *ThreadPark) Parse(r reader.Reader, classes ClassMap, cpools PoolMap, class ClassMetadata) error {
435+
return parseFields(r, classes, cpools, class, nil, true, tp.parseField)
436+
}
437+
367438
type UnsupportedEvent struct{}
368439

369440
func (ue *UnsupportedEvent) parseField(name string, p ParseResolvable) error {

0 commit comments

Comments
 (0)