summaryrefslogtreecommitdiff
path: root/poky/scripts
diff options
context:
space:
mode:
authorPatrick Williams <patrick@stwcx.xyz>2024-04-13 00:51:14 +0300
committerPatrick Williams <patrick@stwcx.xyz>2024-04-13 01:10:08 +0300
commit44b3caf2214045a1492e7aa14e808ac6312930e1 (patch)
treebde7c89dc5680df7768224f05287625cfbcc79dc /poky/scripts
parent03514f1996efa799e50da744818ba331c2e893b6 (diff)
downloadopenbmc-44b3caf2214045a1492e7aa14e808ac6312930e1.tar.xz
subtree updates
poky: 110ee701b3..5950c63d54: Alexander Kanavin (19): ovmf: update 202308 -> 202402 attr: update 2.5.1 -> 2.5.2 dpkg: update 1.22.0 -> 1.22.5 gptfdisk: update 1.0.9 -> 1.0.10 icu: update 74-1 -> 74-2 go-helloworld: update to latest revision libpam: update 1.5.3 -> 1.6.0 libtraceevent: update 1.7.3 -> 1.8.2 mdadm: update 4.2 -> 4.3 npth: update 1.6 -> 1.7 python3-lxml: update 5.0.0 -> 5.1.0 rpm: update 4.19.1 -> 4.19.1.1 ruby: update 3.2.2 -> 3.3.0 tcl: update 8.6.13 -> 8.6.14 texinfo: update 7.0.3 -> 7.1 waffle: update 1.7.2 -> 1.8.0 shadow: update 4.14.2 -> 4.15.0 meta/lib/oe/sstatesig.py: do not error out if sstate files fail on os.stat() scripts/oe-setup-build: write a build environment initialization one-liner into the build directory Bruce Ashfield (1): perf: make bpf asm include arch conditional Chen Qi (2): ovmf: set CVE_STATUS for CVE-2014-8271 ovmf: set CVE_STATUS for a few CVEs Denys Dmytriyenko (3): mtd-utils: upgrade 2.1.6 -> 2.2.0 lzip: upgrade 1.24 -> 1.24.1 wayland-protocols: upgrade 1.33 -> 1.34 Harish Sadineni (1): rust: set CVE_STATUS for CVE-2024-24576 Joao Marcos Costa (6): classes: document new go-vendor class migration updates for 5.0 release-notes updates for 5.0 ref-manual/variables: add new variables for v5.0 release-notes-5.0: add updates release-notes-5.0: mention cmake-qemu.bbclass Joe Slater (2): init-ifupdown: modify interfaces for busybox packagegroup-core-boot: recommend ifupdown Jon Mason (4): acpica: use github for SRC_URI acpica: update to 20240322 release yocto-bsp/linux-yocto-dev: add genericarm64 yocto-bsp/genericarm64: add virtio-gpu Joshua Watt (1): bitbake: siggen: Capture SSL environment for hashserver Julien Stephan (1): devtool: standard: throws appropriate error if source is in detached HEAD Jörg Sommer (1): kernel-dev: join mkdir commands with -p K Sanjay Nayak (1): xorg-xserver-config: Disable screen blanking for qemu images Khem Raj (5): llvm: Upgrade to 18.1.3 bugfix release sanity: Use diff instead of meld by default libseccomp: Fix build when python packageconfig is enabled linux-yocto: Enable nft modules for ptest images mdadm: Fix build with new musl Lee Chee Yang (2): release-notes-4.0.17: reorder CVEs migration-guides: add release notes for 4.3.4 Max Krummenacher (1): perf: add asm include required for v6.9+ Michael Haener (1): iproute2: add bridge package Michael Opdenacker (19): manuals: fix duplicate "stylecheck" target manuals: add initial sphinx-lint support manuals: fix trailing spaces manuals: fix incorrect double backticks migration-guides: add missing opening tag colon release-notes-5.0: documentation highlights manuals: remove tab characters dev-manual/debugging: mention new ``taskexp_ncurses`` option migration-guides: release-notes-5.0: update docs highlights bitbake: prserv: simplify the PRServerClient() interface bitbake: prserv: use double quotes by default bitbake: bitbake-prserv: replace deprecated optparse by argparse bitbake: prserv: use self.logger instead of logger directly bitbake: asyncrpc: include parse_address from hashserv bitbake: prserv: capitalization and spacing improvements bitbake: prserv: add extra requests bitbake: prserv: remove redundant exception handler bitbake: prserv: correct error message bitbake: prserv: remove unnecessary code Mikko Rapeli (1): linux-yocto-dev: remove duplicate DEPENDS Ninette Adhikari (3): oe-build-perf-report: Add apache echarts to make report interactive oe-build-perf-report: Display more than 300 commits and date instead of commit number oe-build-perf-report: Improve report styling and add descriptions Oleh Matiusha (1): nativesdk-gzip: fix reproducibility issues Peter Hoyes (1): u-boot-tools: Package mkeficapsule Peter Marko (2): bitbake.conf: remove comment about oldincludedir systemd: make predictable name mac policy opt-out Quentin Schulz (2): docs: conf.py: properly escape backslashes for latex_elements manuals: refer to new yocto-patches mailing list wherever appropriate Richard Purdie (10): xwayland: Upgrade 23.2.4 -> 23.2.5 curl: Upgrade 8.6.0 -> 8.7.1 nghttp2: Upgrade 1.60.1 -> 1.61.0 pseudo: Update to pull in fchmodat fix bitbake: doc/user-manual: Add BB_LOADFACTOR_MAX bitbake: BBHandler: Handle unclosed functions correctly testimage: Enable runtime 'login' screenshot tests Revert "testimage: Enable runtime 'login' screenshot tests" python3-websockets: Import from meta-python buildtools-tarball: Add python3-websockets Rob Woolley (1): bitbake: wget: Make wget --passive-ftp option conditional on ftp/ftps Ross Burton (2): eudev: update Upstream-Status on netifnames.patch classes/pypi: don't expose PYPI_ARCHIVE_NAME Simone Weiß (1): bitbake: doc: Add section for variable context Wang Mingyu (87): debianutils: upgrade 5.16 -> 5.17 diffoscope: upgrade 259 -> 260 encodings: upgrade 1.0.7 -> 1.1.0 gcr: upgrade 4.2.0 -> 4.2.1 ghostscript: upgrade 10.02.1 -> 10.03.0 libassuan: upgrade 2.5.6 -> 2.5.7 libfontenc: upgrade 1.1.7 -> 1.1.8 libpng: upgrade 1.6.42 -> 1.6.43 libsdl2: upgrade 2.30.0 -> 2.30.1 libxcb: upgrade 1.16 -> 1.16.1 libxcursor: upgrade 1.2.1 -> 1.2.2 libxdmcp: upgrade 1.1.4 -> 1.1.5 mkfontscale: upgrade 1.2.2 -> 1.2.3 pango: upgrade 1.52.0 -> 1.52.1 psmisc: upgrade 23.6 -> 23.7 python3-cython: upgrade 3.0.8 -> 3.0.9 python3-hypothesis: upgrade 6.98.15 -> 6.99.4 python3-importlib-metadata: upgrade 7.0.1 -> 7.0.2 python3-libarchive-c: upgrade 5.0 -> 5.1 python3-pygobject: update 3.46.0 -> 3.48.1 python3-pyopenssl: upgrade 24.0.0 -> 24.1.0 python3-pyparsing: upgrade 3.1.1 -> 3.1.2 python3-pytest-subtests: upgrade 0.11.0 -> 0.12.1 python3-pytest: upgrade 8.0.2 -> 8.1.1 python3-trove-classifiers: upgrade 2024.2.23 -> 2024.3.3 repo: upgrade 2.42 -> 2.44 shaderc: update 2023.8 -> 2024.0 stress-ng: upgrade 0.17.05 -> 0.17.06 xauth: upgrade 1.1.2 -> 1.1.3 xev: update 1.2.5 -> 1.2.6 gnupg: upgrade 2.4.4 -> 2.4.5 adwaita-icon-theme: upgrade 45.0 -> 46.0 at-spi2-core: upgrade 2.50.1 -> 2.52.0 bind: upgrade 9.18.24 -> 9.18.25 createrepo-c: upgrade 1.0.4 -> 1.1.0 enchant2: upgrade 2.6.7 -> 2.6.8 harfbuzz: upgrade 8.3.0 -> 8.3.1 libbsd: upgrade 0.12.1 -> 0.12.2 libcomps: upgrade 0.1.20 -> 0.1.21 libpciaccess: upgrade 0.18 -> 0.18.1 libwpe: upgrade 1.14.2 -> 1.16.0 libxkbcommon: upgrade 1.6.0 -> 1.7.0 libxml2: upgrade 2.12.5 -> 2.12.6 lighttpd: upgrade 1.4.74 -> 1.4.75 openssh: upgrade 9.6p1 -> 9.7p1 python3-hatchling: upgrade 1.21.1 -> 1.22.4 python3-importlib-metadata: upgrade 7.0.2 -> 7.1.0 python3-license-expression: upgrade 30.2.0 -> 30.3.0 python3-markdown: upgrade 3.5.2 -> 3.6 python3-packaging: upgrade 23.2 -> 24.0 python3-pyelftools: upgrade 0.30 -> 0.31 python3-referencing: upgrade 0.33.0 -> 0.34.0 python3-scons: upgrade 4.6.0 -> 4.7.0 python3-setuptools: upgrade 69.1.1 -> 69.2.0 python3-wheel: upgrade 0.42.0 -> 0.43.0 python3-zipp: upgrade 3.17.0 -> 3.18.1 vala: upgrade 0.56.15 -> 0.56.16 wget: upgrade 1.21.4 -> 1.24.5 mesa: upgrade 24.0.2 -> 24.0.3 vulkan: upgrade 1.3.275.0 -> 1.3.280.0 babeltrace2: upgrade 2.0.5 -> 2.0.6 bash-completion: upgrade 2.12.0 -> 2.13.0 btrfs-tools: upgrade 6.7.1 -> 6.8 coreutils: upgrade 9.4 -> 9.5 dnf: upgrade 4.19.0 -> 4.19.2 ell: upgrade 0.63 -> 0.64 enchant2: upgrade 2.6.8 -> 2.6.9 libdnf: upgrade 0.73.0 -> 0.73.1 libical: upgrade 3.0.17 -> 3.0.18 liburi-perl: upgrade 5.27 -> 5.28 libx11: upgrade 1.8.7 -> 1.8.9 libxmlb: upgrade 0.3.15 -> 0.3.17 libxmu: upgrade 1.1.4 -> 1.2.0 lttng-tools: upgrade 2.13.11 -> 2.13.13 man-db: upgrade 2.12.0 -> 2.12.1 mpg123: upgrade 1.32.5 -> 1.32.6 mtdev: upgrade 1.1.6 -> 1.1.7 pkgconf: upgrade 2.1.1 -> 2.2.0 python3-beartype: upgrade 0.17.2 -> 0.18.2 python3-build: upgrade 1.1.1 -> 1.2.1 python3-git: upgrade 3.1.42 -> 3.1.43 python3-pyasn1: upgrade 0.5.1 -> 0.6.0 python3-typing-extensions: upgrade 4.10.0 -> 4.11.0 rsync: upgrade 3.2.7 -> 3.3.0 ttyrun: upgrade 2.31.0 -> 2.32.0 u-boot: upgrade 2024.01 -> 2024.04 xorgproto: upgrade 2023.2 -> 2024.1 Yoann Congal (2): ref-manual: variables: document CVE_DB_INCR_UPDATE_AGE_THRES variable release-notes-5.0: document some cve, strace and qa changes meta-raspberrypi: d072cc8a48..1879cb831f: Max Stepanov (1): rpi-eeprom: Update to support raspberrypi5 machine meta-arm: d9e18ce792..17df9c4ebc: Anusmita Dutta Mazumder (2): arm-bsp/u-boot:corstone1000: add unique guid for fvp and mps3 arm-bsp/tf-m:corstone1000: add unique guid for fvp and mps3 Debbie Martin (1): arm-systemready: Change get_json_result_dir helper Harsimran Singh Tungal (1): corstone1000:arm-bsp/tftf: upgrade tftf version to v2.10 Jon Mason (7): arm-bsp: remove unused recipes arm-bsp: Remove tc1 CI: update to kas 4.3.2 arm/optee-ftpm: update to the latest SHA arm/trusted-firmware-a: update to 2.10.3 release arm/opencsd: update to 1.5.2 arm-bsp/corstone1000: reformat u-boot patches meta-security: 283a773f24..d1522af21d: Armin Kuster (1): README.md: update to new patches mailing list meta-openembedded: a6bcdca5b4..4958bfe013: Alex Kiernan (1): mdns: Upgrade 2200.80.16 -> 2200.100.94.0.2 Beniamin Sandu (5): mbedtls: upgrade 3.5.2 -> 3.6.0 mbedtls: upgrade 2.28.7 -> 2.28.8 unbound: upgrade 1.19.1 -> 1.19.3 libtorrent: remove CVE mention libtorrent-rasterbar: add initial recipe for 2.0.10 Changqing Li (1): nodejs: don't always disable io_uring Dan McGregor (2): dash: correct licence libfido2: new recipe Fathi Boudra (1): composefs: add a new recipe Guðni Már Gilbert (1): python3-ecdsa: upgrade 0.18.0 -> 0.19.0 Khem Raj (17): python3-pydantic-core: Enable benchmark tests python3-pydbus: Fix typo in ptest package name python3-netaddr: Ignore failing tests on musl python3-pydantic: Ignore failing testcases python3-pydantic-core: Skip failing ptests python3-whoosh: Fix an intermittent ptest python3-pyzmq: Fix ptests Revert "libqmi: upgrade 1.34.0 -> 1.35.2" Revert "libmbim: upgrade 1.30.0 -> 1.31.2" nftables: Fix ptest runs python3-flexparser,python3-flexcache: Add recipes python3-pint: Switch to using github SRC_URI libxml++: Delete recipe for 2.42.1 jemalloc: Update to tip of dev branch libteam: Add missing dependencies revealed by ptests oprofile: Fix failing ptests ptest-packagelists-meta-oe: jemalloc and oprofile are passing now Markus Volk (1): dav1d: update 1.4.0 -> 1.4.1 Maxim Perevozchikov (1): nginx: Disable login for www user Peter Kjellerstedt (1): libnice: Update to 0.1.22 Peter Marko (1): syslog-ng: fix build without ipv6 in distro features Randy MacLeod (5): ncftp: Upgrade to 3.2.7 pimd: switch SRC_URI to https tnftp: switch the SRC_URI to https postfix: switch SRC_URI to http libmad: switch links/SRC_URI to https sites Rui Costa (1): avro: add recipe for c++ Tom Geelen (4): python3-casttube: upgrade 0.2.0 -> 0.2.1 python3-sqlalchemy: upgrade 2.0.25 --> 2.0.27 python3-charset-normalizer: add native build option to recipe python3-chromecast: upgrade 13.1.0 -> 14.0.0 Xiangyu Chen (1): libgpiod: fix QA error in ptest RDEPENDS Yi Zhao (2): rocksdb: fix build error for DEBUG_BUILD rocksdb: fix build error for multilib Yongchang Qiao (1): packagegroup-meta-filesystems: Fix utils typo alperak (5): python3-bleak: enable ptest and add missing runtime dependency python3-pillow: Upgrade 10.1.0 -> 10.3.0 and fix ptest python3-flexcache: enable ptest python3-flexparser: enable ptest and add missing runtime dependencies python3-flexcache: add missing runtime dependencies Change-Id: I06aa4dd845848eec6e165878d482977f48422765 Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Diffstat (limited to 'poky/scripts')
-rw-r--r--poky/scripts/lib/build_perf/html/measurement_chart.html116
-rw-r--r--poky/scripts/lib/build_perf/html/report.html96
-rw-r--r--poky/scripts/lib/build_perf/report.py4
-rw-r--r--poky/scripts/lib/devtool/standard.py2
-rwxr-xr-xpoky/scripts/oe-build-perf-report6
-rwxr-xr-xpoky/scripts/oe-setup-build11
6 files changed, 155 insertions, 80 deletions
diff --git a/poky/scripts/lib/build_perf/html/measurement_chart.html b/poky/scripts/lib/build_perf/html/measurement_chart.html
index 65f1a227ad..9acb3785e2 100644
--- a/poky/scripts/lib/build_perf/html/measurement_chart.html
+++ b/poky/scripts/lib/build_perf/html/measurement_chart.html
@@ -1,50 +1,76 @@
-<script type="text/javascript">
- chartsDrawing += 1;
- google.charts.setOnLoadCallback(drawChart_{{ chart_elem_id }});
- function drawChart_{{ chart_elem_id }}() {
- var data = new google.visualization.DataTable();
+<script type="module">
+ // Get raw data
+ const rawData = [
+ {% for sample in measurement.samples %}
+ [{{ sample.commit_num }}, {{ sample.mean.gv_value() }}, {{ sample.start_time }}],
+ {% endfor %}
+ ];
- // Chart options
- var options = {
- theme : 'material',
- legend: 'none',
- hAxis: { format: '', title: 'Commit number',
- minValue: {{ chart_opts.haxis.min }},
- maxValue: {{ chart_opts.haxis.max }} },
- {% if measurement.type == 'time' %}
- vAxis: { format: 'h:mm:ss' },
- {% else %}
- vAxis: { format: '' },
- {% endif %}
- pointSize: 5,
- chartArea: { left: 80, right: 15 },
- };
+ const convertToMinute = (time) => {
+ return time[0]*60 + time[1] + time[2]/60 + time[3]/3600;
+ }
- // Define data columns
- data.addColumn('number', 'Commit');
- data.addColumn('{{ measurement.value_type.gv_data_type }}',
- '{{ measurement.value_type.quantity }}');
- // Add data rows
- data.addRows([
- {% for sample in measurement.samples %}
- [{{ sample.commit_num }}, {{ sample.mean.gv_value() }}],
- {% endfor %}
- ]);
+ // Convert raw data to the format: [time, value]
+ const data = rawData.map(([commit, value, time]) => {
+ return [
+ // The Date object takes values in milliseconds rather than seconds. So to use a Unix timestamp we have to multiply it by 1000.
+ new Date(time * 1000).getTime(),
+ // Assuming the array values are duration in the format [hours, minutes, seconds, milliseconds]
+ Array.isArray(value) ? convertToMinute(value) : value
+ ]
+ });
- // Finally, draw the chart
- chart_div = document.getElementById('{{ chart_elem_id }}');
- var chart = new google.visualization.LineChart(chart_div);
- google.visualization.events.addListener(chart, 'ready', function () {
- //chart_div = document.getElementById('{{ chart_elem_id }}');
- //chart_div.innerHTML = '<img src="' + chart.getImageURI() + '">';
- png_div = document.getElementById('{{ chart_elem_id }}_png');
- png_div.outerHTML = '<a id="{{ chart_elem_id }}_png" href="' + chart.getImageURI() + '">PNG</a>';
- console.log("CHART READY: {{ chart_elem_id }}");
- chartsDrawing -= 1;
- if (chartsDrawing == 0)
- console.log("ALL CHARTS READY");
- });
- chart.draw(data, options);
-}
+ // Set chart options
+ const option = {
+ tooltip: {
+ trigger: 'axis',
+ valueFormatter: (value) => {
+ const hours = Math.floor(value/60)
+ const minutes = Math.floor(value % 60)
+ const seconds = Math.floor((value * 60) % 60)
+ return hours + ':' + minutes + ':' + seconds
+ }
+ },
+ xAxis: {
+ type: 'time',
+ },
+ yAxis: {
+ name: '{{ measurement.value_type.quantity }}' == 'time' ? 'Duration in minutes' : 'Disk size in MB',
+ type: 'value',
+ min: function(value) {
+ return Math.round(value.min - 0.5);
+ },
+ max: function(value) {
+ return Math.round(value.max + 0.5);
+ }
+ },
+ dataZoom: [
+ {
+ type: 'slider',
+ xAxisIndex: 0,
+ filterMode: 'none'
+ },
+ ],
+ series: [
+ {
+ name: '{{ measurement.value_type.quantity }}',
+ type: 'line',
+ smooth: true,
+ symbol: 'none',
+ data: data
+ }
+ ]
+ };
+
+ // Draw chart
+ const chart_div = document.getElementById('{{ chart_elem_id }}');
+ const measurement_chart= echarts.init(chart_div, null, {
+ height: 320
+ });
+ // Change chart size with browser resize
+ window.addEventListener('resize', function() {
+ measurement_chart.resize();
+ });
+ measurement_chart.setOption(option);
</script>
diff --git a/poky/scripts/lib/build_perf/html/report.html b/poky/scripts/lib/build_perf/html/report.html
index d1ba6f2578..4cd240760a 100644
--- a/poky/scripts/lib/build_perf/html/report.html
+++ b/poky/scripts/lib/build_perf/html/report.html
@@ -3,11 +3,7 @@
<head>
{# Scripts, for visualization#}
<!--START-OF-SCRIPTS-->
-<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
-<script type="text/javascript">
-google.charts.load('current', {'packages':['corechart']});
-var chartsDrawing = 0;
-</script>
+<script src=" https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js "></script>
{# Render measurement result charts #}
{% for test in test_data %}
@@ -28,23 +24,15 @@ var chartsDrawing = 0;
text-align: left;
border-collapse: collapse;
}
-.meta-table tr:nth-child(even){background-color: #f2f2f2}
-meta-table th, .meta-table td {
- padding: 4px;
-}
.summary {
- margin: 0;
font-size: 14px;
text-align: left;
border-collapse: collapse;
}
-summary th, .meta-table td {
- padding: 4px;
-}
.measurement {
padding: 8px 0px 8px 8px;
border: 2px solid #f0f0f0;
- margin-bottom: 10px;
+ margin: 1.5rem 0;
}
.details {
margin: 0;
@@ -64,18 +52,58 @@ summary th, .meta-table td {
background-color: #f0f0f0;
margin-left: 10px;
}
-hr {
- color: #f0f0f0;
+.card-container {
+ border-bottom-width: 1px;
+ padding: 1.25rem 3rem;
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+ border-radius: 0.25rem;
+}
+body {
+ font-family: 'Helvetica', sans-serif;
+ margin: 3rem 8rem;
+}
+h1 {
+ text-align: center;
}
h2 {
- font-size: 20px;
+ font-size: 1.5rem;
margin-bottom: 0px;
color: #707070;
+ padding-top: 1.5rem;
}
h3 {
- font-size: 16px;
+ font-size: 1.3rem;
margin: 0px;
color: #707070;
+ padding: 1.5rem 0;
+}
+h4 {
+ font-size: 14px;
+ font-weight: lighter;
+ line-height: 1.2rem;
+ margin: auto;
+ padding-top: 1rem;
+}
+table {
+ margin-top: 1.5rem;
+ line-height: 2rem;
+}
+tr {
+ border-bottom: 1px solid #e5e7eb;
+}
+tr:first-child {
+ border-bottom: 1px solid #9ca3af;
+}
+tr:last-child {
+ border-bottom: none;
+}
+a {
+ text-decoration: none;
+ font-weight: bold;
+ color: #0000EE;
+}
+a:hover {
+ color: #8080ff;
}
</style>
@@ -83,13 +111,14 @@ h3 {
</head>
{% macro poky_link(commit) -%}
- <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?id={{ commit }}">{{ commit[0:11] }}</a>
+ <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?id={{ commit }}">{{ commit[0:11] }}</a>
{%- endmacro %}
-<body><div style="width: 700px">
+<body><div>
+ <h1 style="text-align: center;">Performance Test Report</h1>
{# Test metadata #}
<h2>General</h2>
- <hr>
+ <h4>The table provides an overview of the comparison between two selected commits from the same branch.</h4>
<table class="meta-table" style="width: 100%">
<tr>
<th></th>
@@ -112,19 +141,21 @@ h3 {
{# Test result summary #}
<h2>Test result summary</h2>
- <hr>
+ <h4>The test summary presents a thorough breakdown of each test conducted on the branch, including details such as build time and disk space consumption. Additionally, it gives insights into the average time taken for test execution, along with absolute and relative values for a better understanding.</h4>
<table class="summary" style="width: 100%">
+ <tr>
+ <th>Test name</th>
+ <th>Measurement description</th>
+ <th>Mean value</th>
+ <th>Absolute difference</th>
+ <th>Relative difference</th>
+ </tr>
{% for test in test_data %}
- {% if loop.index is even %}
- {% set row_style = 'style="background-color: #f2f2f2"' %}
- {% else %}
- {% set row_style = 'style="background-color: #ffffff"' %}
- {% endif %}
{% if test.status == 'SUCCESS' %}
{% for measurement in test.measurements %}
<tr {{ row_style }}>
{% if loop.index == 1 %}
- <td>{{ test.name }}: {{ test.description }}</td>
+ <td><a href=#{{test.name}}>{{ test.name }}: {{ test.description }}</a></td>
{% else %}
{# add empty cell in place of the test name#}
<td></td>
@@ -153,10 +184,12 @@ h3 {
</table>
{# Detailed test results #}
+ <h2>Test details</h2>
+ <h4>The following section provides details of each test, accompanied by charts representing build time and disk usage over time or by commit number.</h4>
{% for test in test_data %}
- <h2>{{ test.name }}: {{ test.description }}</h2>
- <hr>
+ <h3 style="color: #000;" id={{test.name}}>{{ test.name }}: {{ test.description }}</h3>
{% if test.status == 'SUCCESS' %}
+ <div class="card-container">
{% for measurement in test.measurements %}
<div class="measurement">
<h3>{{ measurement.description }}</h3>
@@ -275,7 +308,8 @@ h3 {
{% endif %}
{% endif %}
</div>
- {% endfor %}
+ {% endfor %}
+ </div>
{# Unsuccessful test #}
{% else %}
<span style="font-size: 150%; font-weight: bold; color: red;">{{ test.status }}
diff --git a/poky/scripts/lib/build_perf/report.py b/poky/scripts/lib/build_perf/report.py
index ab77424cc7..82c56830d7 100644
--- a/poky/scripts/lib/build_perf/report.py
+++ b/poky/scripts/lib/build_perf/report.py
@@ -294,7 +294,7 @@ class SizeVal(MeasurementVal):
return "null"
return self / 1024
-def measurement_stats(meas, prefix=''):
+def measurement_stats(meas, prefix='', time=0):
"""Get statistics of a measurement"""
if not meas:
return {prefix + 'sample_cnt': 0,
@@ -319,6 +319,7 @@ def measurement_stats(meas, prefix=''):
stats['quantity'] = val_cls.quantity
stats[prefix + 'sample_cnt'] = len(values)
+ start_time = time # Add start time for both type sysres and disk usage
mean_val = val_cls(mean(values))
min_val = val_cls(min(values))
max_val = val_cls(max(values))
@@ -334,6 +335,7 @@ def measurement_stats(meas, prefix=''):
stats[prefix + 'max'] = max_val
stats[prefix + 'minus'] = val_cls(mean_val - min_val)
stats[prefix + 'plus'] = val_cls(max_val - mean_val)
+ stats[prefix + 'start_time'] = start_time
return stats
diff --git a/poky/scripts/lib/devtool/standard.py b/poky/scripts/lib/devtool/standard.py
index 7972b4f822..6674e67267 100644
--- a/poky/scripts/lib/devtool/standard.py
+++ b/poky/scripts/lib/devtool/standard.py
@@ -1885,6 +1885,8 @@ def _update_recipe(recipename, workspace, rd, mode, appendlayerdir, wildcard_ver
for line in stdout.splitlines():
branchname = line[2:]
if line.startswith('* '):
+ if 'HEAD' in line:
+ raise DevtoolError('Detached HEAD - please check out a branch, e.g., "devtool"')
startbranch = branchname
if branchname.startswith(override_branch_prefix):
override_branches.append(branchname)
diff --git a/poky/scripts/oe-build-perf-report b/poky/scripts/oe-build-perf-report
index 7812ea4540..266700d294 100755
--- a/poky/scripts/oe-build-perf-report
+++ b/poky/scripts/oe-build-perf-report
@@ -336,7 +336,9 @@ def print_html_report(data, id_comp, buildstats):
test_i = test_data['tests'][test]
meas_i = test_i['measurements'][meas]
commit_num = get_data_item(meta, 'layers.meta.commit_count')
- samples.append(measurement_stats(meas_i))
+ # Add start_time for both test measurement types of sysres and disk usage
+ start_time = test_i['start_time'][0]
+ samples.append(measurement_stats(meas_i, '', start_time))
samples[-1]['commit_num'] = commit_num
absdiff = samples[-1]['val_cls'](samples[-1]['mean'] - samples[id_comp]['mean'])
@@ -473,7 +475,7 @@ Examine build performance test results from a Git repository"""
group.add_argument('--branch', '-B', default='master', help="Branch to find commit in")
group.add_argument('--branch2', help="Branch to find comparision revisions in")
group.add_argument('--machine', default='qemux86')
- group.add_argument('--history-length', default=25, type=int,
+ group.add_argument('--history-length', default=300, type=int,
help="Number of tested revisions to plot in html report")
group.add_argument('--commit',
help="Revision to search for")
diff --git a/poky/scripts/oe-setup-build b/poky/scripts/oe-setup-build
index 5364f2b481..c0476992a2 100755
--- a/poky/scripts/oe-setup-build
+++ b/poky/scripts/oe-setup-build
@@ -91,7 +91,16 @@ def setup_build_env(args):
builddir = args.b if args.b else template["buildpath"]
no_shell = args.no_shell
coredir = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
- cmd = "TEMPLATECONF={} . {} {}".format(template["templatepath"], os.path.join(coredir, 'oe-init-build-env'), builddir)
+ cmd_base = ". {} {}".format(os.path.join(coredir, 'oe-init-build-env'), os.path.abspath(builddir))
+
+ initbuild = os.path.join(builddir, 'init-build-env')
+ if not os.path.exists(initbuild):
+ os.makedirs(builddir, exist_ok=True)
+ with open(initbuild, 'w') as f:
+ f.write(cmd_base)
+ print("\nRun '. {}' to initialize the build in a current shell session.\n".format(initbuild))
+
+ cmd = "TEMPLATECONF={} {}".format(template["templatepath"], cmd_base)
if not no_shell:
cmd = cmd + " && {}".format(os.environ['SHELL'])
print("Running:", cmd)