aboutsummaryrefslogtreecommitdiff
path: root/serialize.go
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-04-28 23:58:57 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-05-12 15:35:19 +0900
commit0962e86da411a6b7302e5e60889ff91f20378188 (patch)
tree5860f1793855941e8340ad11dbcde9da22356c66 /serialize.go
parentb4240ee0c1c81131a697f22e7ce63b65af88fefa (diff)
downloadkati-0962e86da411a6b7302e5e60889ff91f20378188.tar.gz
Show stats around serialized variables
Diffstat (limited to 'serialize.go')
-rw-r--r--serialize.go94
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