diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-04-28 23:58:57 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-05-12 15:35:19 +0900 |
commit | 0962e86da411a6b7302e5e60889ff91f20378188 (patch) | |
tree | 5860f1793855941e8340ad11dbcde9da22356c66 /serialize.go | |
parent | b4240ee0c1c81131a697f22e7ce63b65af88fefa (diff) | |
download | kati-0962e86da411a6b7302e5e60889ff91f20378188.tar.gz |
Show stats around serialized variables
Diffstat (limited to 'serialize.go')
-rw-r--r-- | serialize.go | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/serialize.go b/serialize.go index e217f69..827edc6 100644 --- a/serialize.go +++ b/serialize.go @@ -276,7 +276,101 @@ func DeserializeNodes(nodes []*SerializableDepNode, tsvs []SerializableTargetSpe return r } +func human(n int) string { + if n >= 10 * 1000 * 1000 * 1000 { + return fmt.Sprintf("%.2fGB", float32(n) / 1000 / 1000 / 1000) + } else if n >= 10 * 1000 * 1000 { + return fmt.Sprintf("%.2fMB", float32(n) / 1000 / 1000) + } else if n >= 10 * 1000 { + return fmt.Sprintf("%.2fkB", float32(n) / 1000) + } else { + return fmt.Sprintf("%dB", n) + } +} + +func showSerializedNodesStats(nodes []*SerializableDepNode) { + outputSize := 0 + cmdSize := 0 + depsSize := 0 + actualInputSize := 0 + tsvSize := 0 + filenameSize := 0 + linenoSize := 0 + for _, n := range nodes { + outputSize += len(n.Output) + for _, c := range n.Cmds { + cmdSize += len(c) + } + for _, d := range n.Deps { + depsSize += len(d) + } + for _, i := range n.ActualInputs { + actualInputSize += len(i) + } + for _ = range n.TargetSpecificVars { + tsvSize += 4 + } + filenameSize += len(n.Filename) + linenoSize += 4 + } + size := outputSize + cmdSize + depsSize + actualInputSize + tsvSize + filenameSize + linenoSize + LogStats("%d nodes %s", len(nodes), human(size)) + LogStats(" output %s", human(outputSize)) + LogStats(" command %s", human(cmdSize)) + LogStats(" deps %s", human(depsSize)) + LogStats(" inputs %s", human(actualInputSize)) + LogStats(" tsv %s", human(tsvSize)) + LogStats(" filename %s", human(filenameSize)) + LogStats(" lineno %s", human(linenoSize)) +} + +func (v SerializableVar) size() int { + size := 0 + size += len(v.Type) + size += len(v.V) + size += len(v.Origin) + for _, c := range v.Children { + size += c.size() + } + return size +} + +func showSerializedVarsStats(vars map[string]SerializableVar) { + nameSize := 0 + valueSize := 0 + for k, v := range vars { + nameSize += len(k) + valueSize += v.size() + } + size := nameSize + valueSize + LogStats("%d vars %s", len(vars), human(size)) + LogStats(" name %s", human(nameSize)) + LogStats(" value %s", human(valueSize)) +} + +func showSerializedTsvsStats(vars []SerializableTargetSpecificVar) { + nameSize := 0 + valueSize := 0 + for _, v := range vars { + nameSize += len(v.Name) + valueSize += v.Value.size() + } + size := nameSize + valueSize + LogStats("%d tsvs %s", len(vars), human(size)) + LogStats(" name %s", human(nameSize)) + LogStats(" value %s", human(valueSize)) +} + +func showSerializedGraphStats(g SerializableGraph) { + showSerializedNodesStats(g.Nodes) + showSerializedVarsStats(g.Vars) + showSerializedTsvsStats(g.Tsvs) +} + func DeserializeGraph(g SerializableGraph) ([]*DepNode, Vars) { + if katiLogFlag || katiStatsFlag { + showSerializedGraphStats(g) + } nodes := DeserializeNodes(g.Nodes, g.Tsvs) vars := DeserializeVars(g.Vars) return nodes, vars |