Heavy Chromium Files/Includes #78
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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, '<').replace(/>/g, '>')}`, | |
| 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, '<').replace(/>/g, '>')}`, | |
| 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, '<').replace(/>/g, '>')}`, | |
| 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(); |