diff --git a/src/landmarks/data.ml b/src/landmarks/data.ml index a8372fc..4738148 100644 --- a/src/landmarks/data.ml +++ b/src/landmarks/data.ml @@ -8,12 +8,12 @@ type gc_info = { (** Basic GC statistics *) (** Convert gc_info to yojson *) -let gc_info_to_yojson (gc : gc_info) : Yojson.Safe.t = +let gc_info_to_yojson (self : gc_info) : Yojson.Safe.t = `Assoc [ - "minor_words", `Float gc.minor_words; - "promoted_words", `Float gc.promoted_words; - "major_words", `Float gc.major_words; + "minor_words", `Float self.minor_words; + "promoted_words", `Float self.promoted_words; + "major_words", `Float self.major_words; ] type timing = { @@ -25,13 +25,13 @@ type timing = { (** Timing information *) (** Convert timing to yojson *) -let timing_to_yojson (t : timing) : Yojson.Safe.t = +let timing_to_yojson (self : timing) : Yojson.Safe.t = `Assoc [ - "start_time", `Float t.start_time; - "end_time", `Float t.end_time; - "duration", `Float t.duration; - "cpu_time", `Float t.cpu_time; + "start_time", `Float self.start_time; + "end_time", `Float self.end_time; + "duration", `Float self.duration; + "cpu_time", `Float self.cpu_time; ] type landmark = { @@ -45,17 +45,17 @@ type landmark = { (** A single landmark measurement *) (** Convert landmark to yojson *) -let landmark_to_yojson (lm : landmark) : Yojson.Safe.t = +let landmark_to_yojson (self : landmark) : Yojson.Safe.t = `Assoc ([ - "name", `String lm.name; - "timing", timing_to_yojson lm.timing; - "gc_before", gc_info_to_yojson lm.gc_before; - "gc_after", gc_info_to_yojson lm.gc_after; - "call_count", `Int lm.call_count; + "name", `String self.name; + "timing", timing_to_yojson self.timing; + "gc_before", gc_info_to_yojson self.gc_before; + "gc_after", gc_info_to_yojson self.gc_after; + "call_count", `Int self.call_count; ] @ - match lm.location with + match self.location with | None -> [] | Some loc -> [ "location", `String loc ]) diff --git a/src/landmarks/data.mli b/src/landmarks/data.mli new file mode 100644 index 0000000..1a98380 --- /dev/null +++ b/src/landmarks/data.mli @@ -0,0 +1,52 @@ +(** Basic data types for Landmarks profiling export *) + +(** GC statistics at a point in time *) +type gc_info = { + minor_words : float; + promoted_words : float; + major_words : float; + minor_collections : int; + major_collections : int; + heap_words : int; + compactions : int; +} + +val gc_info_to_yojson : gc_info -> Yojson.Safe.t +(** Convert gc_info to yojson *) + +(** Timing information *) +type timing = { + start_time : float; (** Start timestamp (seconds) *) + end_time : float; (** End timestamp (seconds) *) + duration : float; (** Duration in seconds *) + cpu_time : float; (** CPU time in seconds *) +} + +val timing_to_yojson : timing -> Yojson.Safe.t +(** Convert timing to yojson *) + +(** A single landmark measurement *) +type landmark = { + name : string; + location : string option; + timing : timing; + gc_before : gc_info; + gc_after : gc_info; + call_count : int; +} + +val landmark_to_yojson : landmark -> Yojson.Safe.t +(** Convert landmark to yojson *) + +(** A collection of landmarks *) +type landmark_collection = { + landmarks : landmark list; + total_time : float; + timestamp : float; +} + +val landmark_collection_to_yojson : landmark_collection -> Yojson.Safe.t +(** Convert landmark_collection to yojson *) + +val get_gc_info : unit -> gc_info +(** Helper to get current GC info from Gc.stat *)