Skip to content

Heavy Chromium Files/Includes #81

Heavy Chromium Files/Includes

Heavy Chromium Files/Includes #81

name: Heavy Chromium Files/Includes
on:
workflow_dispatch:
schedule:
- cron: '0 18 * * *'
permissions: {}
jobs:
by_edge_added_size:
name: By edge added size
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: dsanders11/chromium-include-cleanup
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: '3.12'
cache: 'pip'
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Download Include Analysis Output
run: |
curl https://commondatastorage.googleapis.com/chromium-browser-clang/include-analysis.js > include-analysis.js
- name: Find Heavy Include edges
run: |
python extract_include_analysis_metrics.py --edges --filter-generated-files --filter-third-party --weight-threshold 75000000 > heavy-includes.csv
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: heavy-includes
path: heavy-includes.csv
- run: npm install @actions/cache
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const fs = require('node:fs');
const cache = await import('${{ github.workspace }}/node_modules/@actions/cache/lib/cache.js');
const data = fs.readFileSync('./heavy-includes.csv', 'utf8').trim();
const includes = await Promise.all(data.split('\n').map(async (line, idx) => {
const [filename, include, added_size, prevalence, expanded_size, centrality] = line.trim().split(',');
// Check if this is known from a previous run
const cacheKey = `heavy-chromium-include-${filename}-${include}`;
const cacheHit =
(await cache.restoreCache(['/dev/null'], cacheKey, undefined, {
lookupOnly: true,
})) !== undefined;
if (!cacheHit) {
// Create a cache entry (only the name matters) to keep track of
// includes we've seen from previous runs to mark them as stale
await cache.saveCache(['/dev/null'], cacheKey);
}
return [
`${filename} --> ${include.replace(/</g, '&lt;').replace(/>/g, '&gt;')}`,
parseInt(added_size),
parseFloat(prevalence),
parseInt(expanded_size),
parseFloat(centrality),
cacheHit,
];
}));
const addTable = (includes) => {
core.summary.addTable([
[
{ data: 'Include Edge', header: true },
{ data: 'Added Size', header: true },
{ data: 'Prevalence', header: true },
{ data: 'Expanded Size', header: true },
{ data: 'Centrality', header: true },
],
// Sort by added size, then convert it back to string or it won't render
...includes
.sort((a, b) => b[1] - a[1])
.map(([edge, added_size, prevalence, expandedSize, centrality]) => [
edge,
added_size.toLocaleString(),
`${prevalence.toFixed(2)}%`,
expandedSize.toLocaleString(),
centrality.toFixed(5),
]),
]);
}
core.summary.addHeading('🔗 Heavy Chromium Includes');
core.summary.addRaw(`Found ${includes.length} include edges over 75 MB`);
const newlySeen = includes.filter(([, , , , , cacheHit]) => !cacheHit)
if (newlySeen.length > 0) {
core.summary.addHeading('Not Seen Before', '2');
addTable(newlySeen);
core.summary.addHeading('All Includes', '2');
} else {
core.summary.addBreak();
}
addTable(includes);
await core.summary.write();
by_file_prevalence:
name: By file prevalence
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: dsanders11/chromium-include-cleanup
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: '3.12'
cache: 'pip'
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Download Include Analysis Output
run: |
curl https://commondatastorage.googleapis.com/chromium-browser-clang/include-analysis.js > include-analysis.js
- name: Find Prevalent Files
run: |
python extract_include_analysis_metrics.py --filter-generated-files --filter-third-party --filter-mojom-headers --metric prevalence --weight-threshold 10 > prevalent-files.csv
- run: npm install @actions/cache
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const fs = require('node:fs');
const cache = await import('${{ github.workspace }}/node_modules/@actions/cache/lib/cache.js');
const data = fs.readFileSync('./prevalent-files.csv', 'utf8').trim();
const files = await Promise.all(data.split('\n').map(async (line, idx) => {
const [filename, added_size, prevalence, expanded_size] = line.trim().split(',');
// Check if this is known from a previous run
const cacheKey = `prevalent-chromium-file-${filename}`;
const cacheHit =
(await cache.restoreCache(['/dev/null'], cacheKey, undefined, {
lookupOnly: true,
})) !== undefined;
if (!cacheHit) {
// Create a cache entry (only the name matters) to keep track of
// includes we've seen from previous runs to mark them as stale
await cache.saveCache(['/dev/null'], cacheKey);
}
return [
filename,
parseInt(added_size),
parseFloat(prevalence),
parseInt(expanded_size),
cacheHit,
];
}));
const addTable = (files) => {
core.summary.addTable([
[
{ data: 'File', header: true },
{ data: 'Prevalence', header: true },
{ data: 'Added Size', header: true },
{ data: 'Expanded Size', header: true },
],
// Sort by prevalence, then convert it back to string or it won't render
...files
.sort((a, b) => b[2] - a[2])
.map(([filename, added_size, prevalence, expandedSize]) => [
filename,
`${prevalence.toFixed(2)}%`,
added_size.toLocaleString(),
expandedSize.toLocaleString(),
]),
]);
}
core.summary.addHeading('🔗 Prevalent Chromium Files');
core.summary.addRaw(`Found ${files.length} files at 10%+ prevalence`);
const newlySeen = files.filter(([, , , , cacheHit]) => !cacheHit)
if (newlySeen.length > 0) {
core.summary.addHeading('Not Seen Before', '2');
addTable(newlySeen);
core.summary.addHeading('All Files', '2');
} else {
core.summary.addBreak();
}
addTable(files);
await core.summary.write();
by_edge_prevalence:
name: By edge prevalence
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: dsanders11/chromium-include-cleanup
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: '3.12'
cache: 'pip'
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Download Include Analysis Output
run: |
curl https://commondatastorage.googleapis.com/chromium-browser-clang/include-analysis.js > include-analysis.js
- name: Find Prevalent Include edges
run: |
python extract_include_analysis_metrics.py --edges --filter-generated-files --filter-third-party --metric prevalence --weight-threshold 30 > prevalent-includes.csv
- run: npm install @actions/cache
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const fs = require('node:fs');
const cache = await import('${{ github.workspace }}/node_modules/@actions/cache/lib/cache.js');
const data = fs.readFileSync('./prevalent-includes.csv', 'utf8').trim();
const includes = await Promise.all(data.split('\n').map(async (line, idx) => {
const [filename, include, added_size, prevalence, expanded_size, centrality] = line.trim().split(',');
// Check if this is known from a previous run
const cacheKey = `prevalent-chromium-include-${filename}-${include}`;
const cacheHit =
(await cache.restoreCache(['/dev/null'], cacheKey, undefined, {
lookupOnly: true,
})) !== undefined;
if (!cacheHit) {
// Create a cache entry (only the name matters) to keep track of
// includes we've seen from previous runs to mark them as stale
await cache.saveCache(['/dev/null'], cacheKey);
}
return [
`${filename} --> ${include.replace(/</g, '&lt;').replace(/>/g, '&gt;')}`,
parseInt(added_size),
parseFloat(prevalence),
parseInt(expanded_size),
parseFloat(centrality),
cacheHit,
];
}));
const addTable = (includes) => {
core.summary.addTable([
[
{ data: 'Include Edge', header: true },
{ data: 'Prevalence', header: true },
{ data: 'Added Size', header: true },
{ data: 'Expanded Size', header: true },
{ data: 'Centrality', header: true },
],
// Sort by prevalence, then convert it back to string or it won't render
...includes
.sort((a, b) => b[2] - a[2])
.map(([edge, added_size, prevalence, expandedSize, centrality]) => [
edge,
`${prevalence.toFixed(2)}%`,
added_size.toLocaleString(),
expandedSize.toLocaleString(),
centrality.toFixed(5),
]),
]);
}
core.summary.addHeading('🔗 Prevalent Chromium Includes');
core.summary.addRaw(`Found ${includes.length} include edges at 20%+ prevalence`);
const newlySeen = includes.filter(([, , , , , cacheHit]) => !cacheHit)
if (newlySeen.length > 0) {
core.summary.addHeading('Not Seen Before', '2');
addTable(newlySeen);
core.summary.addHeading('All Includes', '2');
} else {
core.summary.addBreak();
}
addTable(includes);
await core.summary.write();
by_edge_centrality:
name: By edge centrality
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: dsanders11/chromium-include-cleanup
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: '3.12'
cache: 'pip'
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Download Include Analysis Output
run: |
curl https://commondatastorage.googleapis.com/chromium-browser-clang/include-analysis.js > include-analysis.js
- name: Find High Centrality Include edges
run: |
python extract_include_analysis_metrics.py --edges --filter-generated-files --filter-third-party --metric centrality --weight-threshold 0.04 > high-centrality-includes.csv
- run: npm install @actions/cache
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const fs = require('node:fs');
const cache = await import('${{ github.workspace }}/node_modules/@actions/cache/lib/cache.js');
const data = fs.readFileSync('./high-centrality-includes.csv', 'utf8').trim();
const includes = await Promise.all(data.split('\n').map(async (line, idx) => {
const [filename, include, added_size, prevalence, expanded_size, centrality] = line.trim().split(',');
// Check if this is known from a previous run
const cacheKey = `centrality-chromium-include-${filename}-${include}`;
const cacheHit =
(await cache.restoreCache(['/dev/null'], cacheKey, undefined, {
lookupOnly: true,
})) !== undefined;
if (!cacheHit) {
// Create a cache entry (only the name matters) to keep track of
// includes we've seen from previous runs to mark them as stale
await cache.saveCache(['/dev/null'], cacheKey);
}
return [
`${filename} --> ${include.replace(/</g, '&lt;').replace(/>/g, '&gt;')}`,
parseInt(added_size),
parseFloat(prevalence),
parseInt(expanded_size),
parseFloat(centrality),
cacheHit,
];
}));
const addTable = (includes) => {
core.summary.addTable([
[
{ data: 'Include Edge', header: true },
{ data: 'Centrality', header: true },
{ data: 'Added Size', header: true },
{ data: 'Prevalence', header: true },
{ data: 'Expanded Size', header: true },
],
// Sort by centrality
...includes
.sort((a, b) => b[4] - a[4])
.map(([edge, added_size, prevalence, expandedSize, centrality]) => [
edge,
centrality.toFixed(5),
added_size.toLocaleString(),
`${prevalence.toFixed(2)}%`,
expandedSize.toLocaleString(),
]),
]);
}
core.summary.addHeading('🔗 High Centrality Chromium Includes');
core.summary.addRaw(`Found ${includes.length} include edges with >= 0.04 centrality`);
const newlySeen = includes.filter(([, , , , , cacheHit]) => !cacheHit)
if (newlySeen.length > 0) {
core.summary.addHeading('Not Seen Before', '2');
addTable(newlySeen);
core.summary.addHeading('All Includes', '2');
} else {
core.summary.addBreak();
}
addTable(includes);
await core.summary.write();