|
1 | 1 | import { AlphaTexErrorWithDiagnostics, AlphaTexImporter } from '@src/importer/AlphaTexImporter'; |
2 | 2 | import { ScoreLoader } from '@src/importer/ScoreLoader'; |
| 3 | +import { Logger } from '@src/Logger'; |
3 | 4 | import type { Score } from '@src/model/Score'; |
4 | 5 | import { Settings } from '@src/Settings'; |
5 | 6 | import { AlphaTexExporterOld } from '@test/exporter/AlphaTexExporterOld'; |
6 | 7 | import { AlphaTexError, AlphaTexImporterOld } from '@test/importer/AlphaTexImporterOld'; |
7 | 8 | import { ComparisonHelpers } from '@test/model/ComparisonHelpers'; |
8 | 9 | import { TestPlatform } from '@test/TestPlatform'; |
9 | | -import { assert } from 'chai'; |
| 10 | +import { assert, expect } from 'chai'; |
| 11 | +import * as inspector from 'node:inspector'; |
| 12 | +import fs from 'node:fs'; |
10 | 13 |
|
11 | 14 | describe('AlphaTexImporterOldNewCompat', () => { |
12 | 15 | async function loadScore(name: string): Promise<Score | null> { |
@@ -128,4 +131,92 @@ describe('AlphaTexImporterOldNewCompat', () => { |
128 | 131 | it('visual-special-tracks', async () => { |
129 | 132 | await testRoundTripFolderEqual('visual-tests/special-tracks'); |
130 | 133 | }); |
| 134 | + |
| 135 | + it('performance', async () => { |
| 136 | + const newTex = await TestPlatform.loadFileAsString('test-data/exporter/notation-legend-formatted.atex'); |
| 137 | + const settings = new Settings(); |
| 138 | + const oldTex = new AlphaTexExporterOld().exportToString(ScoreLoader.loadAlphaTex(newTex, settings)); |
| 139 | + |
| 140 | + let sumNew = 0; |
| 141 | + |
| 142 | + function run(i: number, check: boolean) { |
| 143 | + const oldImporter = new AlphaTexImporterOld(); |
| 144 | + oldImporter.initFromString(oldTex, settings); |
| 145 | + |
| 146 | + const oldStart = performance.now(); |
| 147 | + oldImporter.readScore(); |
| 148 | + const oldEnd = performance.now(); |
| 149 | + |
| 150 | + const newImporter = new AlphaTexImporter(); |
| 151 | + newImporter.initFromString(oldTex, settings); |
| 152 | + |
| 153 | + const newStart = performance.now(); |
| 154 | + newImporter.readScore(); |
| 155 | + const newEnd = performance.now(); |
| 156 | + |
| 157 | + if (check) { |
| 158 | + const oldTime = oldEnd - oldStart; |
| 159 | + const newTime = newEnd - newStart; |
| 160 | + Logger.info('Test-AlphaTexImporterOldNewCompat-performance', 'Old', i, oldTime); |
| 161 | + Logger.info('Test-AlphaTexImporterOldNewCompat-performance', 'New', i, newTime); |
| 162 | + Logger.info('Test-AlphaTexImporterOldNewCompat-performance', 'Diff', i, newTime - oldTime); |
| 163 | + sumNew += newTime; |
| 164 | + } |
| 165 | + } |
| 166 | + |
| 167 | + // warmup |
| 168 | + for (let i = 0; i < 3; i++) { |
| 169 | + run(i, false); |
| 170 | + } |
| 171 | + |
| 172 | + const testCount = 10; |
| 173 | + for (let i = 0; i < testCount; i++) { |
| 174 | + run(i, true); |
| 175 | + } |
| 176 | + |
| 177 | + const avgNew = sumNew / testCount; |
| 178 | + expect(avgNew).to.be.lessThan(25); |
| 179 | + }); |
| 180 | + |
| 181 | + // it('profile', async () => { |
| 182 | + // const session = new inspector.Session(); |
| 183 | + // session.connect(); |
| 184 | + |
| 185 | + // const newTex = await TestPlatform.loadFileAsString('test-data/exporter/notation-legend-formatted.atex'); |
| 186 | + // const settings = new Settings(); |
| 187 | + // const oldTex = new AlphaTexExporterOld().exportToString(ScoreLoader.loadAlphaTex(newTex, settings)); |
| 188 | + |
| 189 | + // await new Promise<void>(resolve => { |
| 190 | + // session.post('Profiler.enable', () => |
| 191 | + // session.post('Profiler.start', () => { |
| 192 | + // resolve(); |
| 193 | + // }) |
| 194 | + // ); |
| 195 | + // }); |
| 196 | + |
| 197 | + // for (let i = 0; i < 10; i++) { |
| 198 | + // const newImporter = new AlphaTexImporter(); |
| 199 | + // newImporter.initFromString(oldTex, settings); |
| 200 | + // newImporter.readScore(); |
| 201 | + // } |
| 202 | + |
| 203 | + // await new Promise<void>((resolve, reject) => { |
| 204 | + // session.post('Profiler.stop', async (sessionErr, data) => { |
| 205 | + // if (sessionErr) { |
| 206 | + // reject(sessionErr); |
| 207 | + // return; |
| 208 | + // } |
| 209 | + |
| 210 | + // try { |
| 211 | + // await TestPlatform.saveFileAsString( |
| 212 | + // `${new Date().toISOString().replaceAll(/[^0-9]/g, '')}.cpuprofile`, |
| 213 | + // JSON.stringify(data.profile) |
| 214 | + // ); |
| 215 | + // resolve(); |
| 216 | + // } catch (e) { |
| 217 | + // reject(e); |
| 218 | + // } |
| 219 | + // }); |
| 220 | + // }); |
| 221 | + // }).timeout(60000); |
131 | 222 | }); |
0 commit comments