Skip to content
Snippets Groups Projects
Select Git revision
  • fea9ad7c290f54b601934ae585efef8ffcdc08ca
  • master default protected
  • android-7.1.2_r28_klist
  • pie-cts-release
  • pie-vts-release
  • pie-cts-dev
  • oreo-mr1-iot-release
  • sdk-release
  • oreo-m6-s4-release
  • oreo-m4-s12-release
  • pie-release
  • pie-r2-release
  • pie-r2-s1-release
  • oreo-vts-release
  • oreo-cts-release
  • oreo-dev
  • oreo-mr1-dev
  • pie-gsi
  • pie-platform-release
  • pie-dev
  • oreo-cts-dev
  • android-o-mr1-iot-release-1.0.4
  • android-9.0.0_r8
  • android-9.0.0_r7
  • android-9.0.0_r6
  • android-9.0.0_r5
  • android-8.1.0_r46
  • android-8.1.0_r45
  • android-n-iot-release-smart-display-r2
  • android-vts-8.1_r5
  • android-cts-8.1_r8
  • android-cts-8.0_r12
  • android-cts-7.1_r20
  • android-cts-7.0_r24
  • android-o-mr1-iot-release-1.0.3
  • android-cts-9.0_r1
  • android-8.1.0_r43
  • android-8.1.0_r42
  • android-n-iot-release-smart-display
  • android-p-preview-5
  • android-9.0.0_r3
41 results

te_macros

Blame
  • summarize.py 2.97 KiB
    #!/usr/bin/env python3
    """Collect and summarize evaluation results"""
    
    import argparse
    import os
    import sys
    from pathlib import Path
    
    import numpy as np
    
    VALUE_CONVERSIONS = {'duration_time:u': lambda x: x / 1000 / 1000 / 1000}
    
    
    def collect(result_dir, verbose=False):
        """Collect the data in result_dir and return calculated averages"""
        if not result_dir or not os.path.exists(result_dir) or not os.path.isdir(
                result_dir):
            print(f'{result_dir} is not a directory')
            return None
    
        result_dir = Path(result_dir)
    
        data = {}
    
        for result_file_path in result_dir.iterdir():
            if result_file_path.suffix != '.stats':
                continue
            target = result_file_path.name.split('.')[0]
            results = {}
            with open(result_file_path, 'r') as result_file:
                for line in result_file.readlines()[2:]:
                    fields = line.split(';')
                    key, value = fields[2], fields[0]
    
                    try:
                        value = float(value)
                    except ValueError as val_err:
                        if verbose:
                            print(
                                f'{val_err} occured during value conversion of {key}'
                            )
                        results[key] = np.nan
                        continue
    
                    if key in VALUE_CONVERSIONS:
                        value = VALUE_CONVERSIONS[key](value)
                    results[key] = value
    
            if target not in data:
                data[target] = {k: [v] for k, v in results.items()}
            else:
                target_data = data[target]
                for key in target_data:
                    target_data[key].append(results[key])
    
        avgs = {
            t: {k: np.nanmean(vs)
                for k, vs in ms.items()}
            for t, ms in data.items()
        }
    
        return avgs
    
    
    def summarize(avgs, keys=None):
        """Print a summary for each selected key of the collected averages"""
        if not keys:
            keys = ['duration_time:u']
    
        if not avgs:
            print('no averages to summarize')
            return False
    
        for key in keys:
            print(f'{key}:')
            for target in avgs:
                print(f'\t{target}: {avgs[target][key]}')
    
        return True
    
    
    def collect_and_summarize(result_dir=None, keys=None, verbose=False):
        """Collect data and print a summary of the collected data"""
        avgs = collect(result_dir, verbose=verbose)
        if not avgs:
            return 1
    
        if not summarize(avgs, keys=keys):
            return 1
    
        return 0
    
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser()
        parser.add_argument('-v',
                            '--verbose',
                            help='show build output',
                            action='store_true')
        parser.add_argument('-k', '--keys', help='keys to summarize', nargs='*')
        parser.add_argument('result_dir',
                            help='directory containing the results to summarize')
    
        _args = parser.parse_args()
    
        print('### Summary ###')
        sys.exit(collect_and_summarize(**vars(_args)))