| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package encoding |
| |
| import ( |
| "encoding/json" |
| "os" |
| |
| "chromiumos/tast/common/perf" |
| "chromiumos/tast/errors" |
| ) |
| |
| // This file contains helper functions that can be used to parse the log files |
| // generated by the video_encode_accelerator_perf_tests. |
| |
| // ParseUncappedPerfMetrics parses the JSON log file generated by the |
| // MeasureUncappedPerformance test. |
| func ParseUncappedPerfMetrics(metricsPath string, p *perf.Values) error { |
| f, err := os.Open(metricsPath) |
| if err != nil { |
| return err |
| } |
| defer f.Close() |
| var metrics struct { |
| BitstreamDeliveryTimeAverage float64 |
| BitstreamEncodeTimeAverage float64 |
| FPS float64 |
| } |
| if err := json.NewDecoder(f).Decode(&metrics); err != nil { |
| return errors.Wrapf(err, "failed decoding %s", metricsPath) |
| } |
| p.Set(perf.Metric{ |
| Name: "delivery_time.average", |
| Unit: "milliseconds", |
| Direction: perf.SmallerIsBetter, |
| }, metrics.BitstreamDeliveryTimeAverage) |
| p.Set(perf.Metric{ |
| Name: "encode_time.average", |
| Unit: "milliseconds", |
| Direction: perf.SmallerIsBetter, |
| }, metrics.BitstreamEncodeTimeAverage) |
| p.Set(perf.Metric{ |
| Name: "frames_per_second", |
| Unit: "fps", |
| Direction: perf.SmallerIsBetter, |
| }, metrics.FPS) |
| return nil |
| } |
| |
| // ParseQualityPerfMetrics parses the JSON log file generated by the |
| // MeasureProducedBitstreamQuality test. |
| func ParseQualityPerfMetrics(metricsPath string, p *perf.Values) error { |
| f, err := os.Open(metricsPath) |
| if err != nil { |
| return err |
| } |
| defer f.Close() |
| var metrics struct { |
| SSIMAverage float64 |
| PSNRAverage float64 |
| } |
| if err := json.NewDecoder(f).Decode(&metrics); err != nil { |
| return errors.Wrapf(err, "failed decoding %s", metricsPath) |
| } |
| p.Set(perf.Metric{ |
| Name: "ssim.average", |
| Unit: "scalar", |
| Direction: perf.BiggerIsBetter, |
| }, metrics.SSIMAverage) |
| p.Set(perf.Metric{ |
| Name: "psnr.average", |
| Unit: "scalar", |
| Direction: perf.BiggerIsBetter, |
| }, metrics.PSNRAverage) |
| return nil |
| } |