in go/distinct_count_serde_profile.go [103:160]
func (d *DistinctCountSerDeProfile) runTrial(stats *distinctCountSerdeStats, key int64, lgDeltaU int) int64 {
var (
startEstimationTime_Ns int64
stopEstimationTime_Ns int64
startSerTime_Ns int64
stopSerTime_Ns int64
startDeserTime_Ns int64
stopDeserTime_Ns int64
sketchBytes []byte
est1 float64
est2 float64
)
d.sketch.Reset()
for u := lgDeltaU; u > 0; u-- {
key++
d.sketch.UpdateInt64(key)
}
startEstimationTime_Ns = time.Now().UnixNano()
est1, err := d.sketch.GetEstimate()
if err != nil {
panic(err)
}
stopEstimationTime_Ns = time.Now().UnixNano()
if d.config.compact {
startSerTime_Ns = time.Now().UnixNano()
sketchBytes, err = d.sketch.ToCompactSlice()
stopSerTime_Ns = time.Now().UnixNano()
} else {
startSerTime_Ns = time.Now().UnixNano()
sketchBytes, err = d.sketch.ToUpdatableSlice()
stopSerTime_Ns = time.Now().UnixNano()
}
startDeserTime_Ns = time.Now().UnixNano()
sketchRebuild, err := hll.NewHllSketchFromSlice(sketchBytes, true)
stopDeserTime_Ns = time.Now().UnixNano()
if err != nil {
panic(err)
}
est2, err = sketchRebuild.GetEstimate()
if err != nil {
panic(err)
}
if est1 != est2 {
panic("Estimation mismatch")
}
stats.serializeTime_nS = stopSerTime_Ns - startSerTime_Ns
stats.deserializeTime_nS = stopDeserTime_Ns - startDeserTime_Ns
stats.estimationTime_nS = stopEstimationTime_Ns - startEstimationTime_Ns
stats.size_bytes = uint64(len(sketchBytes))
return key
}