Skip to content

Commit

Permalink
Add some copy methods and convert for deserialization.
Browse files Browse the repository at this point in the history
  • Loading branch information
Zentrik committed Dec 30, 2023
1 parent 9239953 commit 94a0f98
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/LinuxPerf.jl
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ struct EventType
event::UInt64
end

Base.copy(event::EventType) = EventType(event.category, event.event)

function Base.convert(::Type{EventType}, d::Dict{String})
return EventType(d["category"], d["event"])
end

function all_events()
evts = EventType[]
for (cat_name, cat_id, events) in EVENT_TYPES
Expand Down Expand Up @@ -356,6 +362,18 @@ struct Counter
running::UInt64
end

function Base.copy(counter::Counter)
return Counter(
copy(counter.event), counter.value, counter.enabled, counter.running
)
end

function Base.convert(::Type{Counter}, d::Dict{String})
return Counter(
convert(EventType, d["event"]), d["value"], d["enabled"], d["running"]
)
end

struct Counters
counters::Vector{Counter}
end
Expand Down Expand Up @@ -734,6 +752,14 @@ struct ThreadStats
groups::Vector{Vector{Counter}}
end

function Base.copy(thread_stats::ThreadStats)
return ThreadStats(thread_stats.pid, copy(thread_stats.groups))
end

function Base.convert(::Type{ThreadStats}, d::Dict{String})
return ThreadStats(d["pid"], d["groups"])
end

function ThreadStats(b::PerfBench)
groups = Vector{Counter}[]
for g in b.groups
Expand Down Expand Up @@ -775,6 +801,10 @@ struct Stats
threads::Vector{ThreadStats}
end

Base.copy(stats::Stats) = Stats(copy(stats.threads))

Base.convert(::Type{Stats}, d::Dict{String}) = Stats(d["threads"])

Stats(b::PerfBenchThreaded) = Stats(map(ThreadStats, b.data))

Base.show(io::IO, stats::Stats) = printsummary(io, stats)
Expand Down

0 comments on commit 94a0f98

Please sign in to comment.