#!/usr/bin/env python3 # # Examine build performance test results # # Copyright (c) 2017, Intel Corporation. # # SPDX-License-Identifier: GPL-2.0-only # import argparse import json import logging import os import re import sys from collections import namedtuple, OrderedDict from operator import attrgetter from xml.etree import ElementTree as ET # Import oe libs scripts_path = os.path.dirname(os.path.realpath(__file__)) sys.path.append(os.path.join(scripts_path, 'lib')) import scriptpath from build_perf import print_table from build_perf.report import (metadata_xml_to_json, results_xml_to_json, aggregate_data, aggregate_metadata, measurement_stats, AggregateTestData) from build_perf import html from buildstats import BuildStats, diff_buildstats, BSVerDiff scriptpath.add_oe_lib_path() from oeqa.utils.git import GitRepo, GitError import oeqa.utils.gitarchive as gitarchive # Setup logging logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") log = logging.getLogger('oe-build-perf-report') def list_test_revs(repo, tag_name, verbosity, **kwargs): """Get list of all tested revisions""" valid_kwargs = dict([(k, v) for k, v in kwargs.items() if v is not None]) fields, revs = gitarchive.get_test_runs(log, repo, tag_name, **valid_kwargs) ignore_fields = ['tag_number'] if verbosity < 2: extra_fields = ['COMMITS', 'TEST RUNS'] ignore_fields.extend(['commit_number', 'commit']) else: extra_fields = ['TEST RUNS'] print_fields = [i for i, f in enumerate(fields) if f not in ignore_fields] # Sort revs rows = [[fields[i].upper() for i in print_fields] + extra_fields] prev = [''] * len(print_fields) prev_commit = None commit_cnt = 0 commit_field = fields.index('commit') for rev in revs: # Only use fields that we want to print cols = [rev[i] for i in print_fields] if cols != prev: commit_cnt = 1 test_run_cnt = 1 new_row = [''] * (len(print_fields) + len(extra_fields)) for i in print_fields: if cols[i] != prev[i]: break new_row[i:-len(extra_fields)] = cols[i:] rows.append(new_row) else: if rev[commit_field] != prev_commit: commit_cnt += 1 test_run_cnt += 1 if verbosity < 2: new_row[-2] = commit_cnt new_row[-1] = test_run_cnt prev = cols prev_commit = rev[commit_field] print_table(rows) def is_xml_format(repo, commit): """Check if the commit contains xml (or json) data""" if repo.rev_parse(commit + ':results.xml'): log.debug("Detected report in xml format in %s", commit) return True else: log.debug("No xml report in %s, assuming json formatted results", commit) return False def read_results(repo, tags, xml=True): """Read result files from repo""" def parse_xml_stream(data): """Parse multiple concatenated XML objects""" objs = [] xml_d = "" for line in data.splitlines(): if xml_d and line.startswith('<?xml version='): objs.append(ET.fromstring(xml_d)) xml_d = line else: xml_d += line objs.append(ET.fromstring(xml_d)) return objs def parse_json_stream(data): """Parse multiple concatenated JSON objects""" objs = [] json_d = &q/* * Copyright (C) 2005-2011 by Wind River Systems, Inc. * * SPDX-License-Identifier: MIT * */ #include <bits/wordsize.h> #if __WORDSIZE == 32 #ifdef _MIPS_SIM #if _MIPS_SIM == _ABIO32 #include <ENTER_HEADER_FILENAME_HERE-32.h> #elif _MIPS_SIM == _ABIN32 #include <ENTER_HEADER_FILENAME_HERE-n32.h> #else #error "Unknown _MIPS_SIM" #endif #else /* _MIPS_SIM is not defined */ #include <ENTER_HEADER_FILENAME_HERE-32.h> #endif #elif __WORDSIZE == 64 #include <ENTER_HEADER_FILENAME_HERE-64.h> #else #error "Unknown __WORDSIZE detected" #endif /* matches #if __WORDSIZE == 32 */
/* * Copyright (C) 2005-2011 by Wind River Systems, Inc. * * SPDX-License-Identifier: MIT * */ #include <bits/wordsize.h> #if __WORDSIZE == 32 #ifdef _MIPS_SIM #if _MIPS_SIM == _ABIO32 #include <ENTER_HEADER_FILENAME_HERE-32.h> #elif _MIPS_SIM == _ABIN32 #include <ENTER_HEADER_FILENAME_HERE-n32.h> #else #error "Unknown _MIPS_SIM" #endif #else /* _MIPS_SIM is not defined */ #include <ENTER_HEADER_FILENAME_HERE-32.h> #endif #elif __WORDSIZE == 64 #include <ENTER_HEADER_FILENAME_HERE-64.h> #else #error "Unknown __WORDSIZE detected" #endif /* matches #if __WORDSIZE == 32 */