-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathtest_performance.js
More file actions
158 lines (132 loc) Β· 5.71 KB
/
test_performance.js
File metadata and controls
158 lines (132 loc) Β· 5.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/**
* Test performance optimizations on Cesium page
*
* Verifies:
* 1. Page loads quickly
* 2. Dots appear (blue)
* 3. Classification button exists
* 4. Console shows performance telemetry
*/
const { chromium } = require('playwright');
async function testPerformanceOptimizations() {
console.log('π§ͺ Testing Cesium Performance Optimizations\n');
console.log('=' .repeat(80));
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
// Collect console messages for telemetry
const consoleLogs = [];
page.on('console', msg => {
const text = msg.text();
consoleLogs.push(text);
console.log(`π [Console] ${text}`);
});
try {
// Test 1: Navigate to page and measure load time
console.log('\nβ
Test 1: Page Load Performance');
console.log('-'.repeat(80));
const startTime = Date.now();
await page.goto('http://localhost:5860/tutorials/parquet_cesium.html', {
waitUntil: 'domcontentloaded',
timeout: 60000
});
const loadTime = Date.now() - startTime;
console.log(`β±οΈ Page loaded in ${loadTime}ms`);
// Test 2: Wait for Cesium globe to initialize
console.log('\nβ
Test 2: Cesium Globe Initialization');
console.log('-'.repeat(80));
await page.waitForSelector('#cesiumContainer', { timeout: 30000 });
console.log('β Cesium container found');
// Wait a bit for DuckDB and points to load
console.log('β³ Waiting for geocodes to load...');
await page.waitForTimeout(15000);
// Test 3: Check for classification button
console.log('\nβ
Test 3: Classification Button');
console.log('-'.repeat(80));
const button = await page.locator('button:has-text("Color-code by type")');
const buttonVisible = await button.isVisible({ timeout: 5000 }).catch(() => false);
if (buttonVisible) {
console.log('β Classification button found');
console.log(` Text: "${await button.innerText()}"`);
} else {
console.log('β Classification button NOT found');
}
// Test 4: Analyze console telemetry
console.log('\nβ
Test 4: Performance Telemetry Analysis');
console.log('-'.repeat(80));
const queryLog = consoleLogs.find(log => log.includes('Query executed'));
const renderLog = consoleLogs.find(log => log.includes('Rendering completed'));
const totalLog = consoleLogs.find(log => log.includes('Total time'));
if (queryLog) {
console.log(`β ${queryLog}`);
const queryTimeMatch = queryLog.match(/(\d+)ms/);
if (queryTimeMatch) {
const queryTime = parseInt(queryTimeMatch[1]);
if (queryTime < 3000) {
console.log(` π Query time ${queryTime}ms is under 3s (FAST!)`);
} else {
console.log(` β οΈ Query time ${queryTime}ms is over 3s (could be faster)`);
}
}
} else {
console.log('β No query timing found in console');
}
if (renderLog) {
console.log(`β ${renderLog}`);
}
if (totalLog) {
console.log(`β ${totalLog}`);
const totalTimeMatch = totalLog.match(/(\d+)ms/);
if (totalTimeMatch) {
const totalTime = parseInt(totalTimeMatch[1]);
if (totalTime < 3000) {
console.log(` π Total time ${totalTime}ms is under 3s (EXCELLENT!)`);
} else if (totalTime < 5000) {
console.log(` π Total time ${totalTime}ms is under 5s (GOOD)`);
} else {
console.log(` β οΈ Total time ${totalTime}ms is over 5s (needs work)`);
}
}
}
// Test 5: Click classification button (optional)
console.log('\nβ
Test 5: Optional Classification');
console.log('-'.repeat(80));
console.log('Press Enter to test classification button, or Ctrl+C to skip...');
// Wait for user input
await new Promise(resolve => {
process.stdin.once('data', resolve);
});
if (buttonVisible) {
console.log('π±οΈ Clicking classification button...');
consoleLogs.length = 0; // Clear logs
await button.click();
// Wait for classification
await page.waitForTimeout(10000);
const classifyLog = consoleLogs.find(log => log.includes('Classification completed'));
if (classifyLog) {
console.log(`β ${classifyLog}`);
} else {
console.log('β³ Classification may still be running...');
}
}
// Final summary
console.log('\n' + '='.repeat(80));
console.log('π Performance Test Summary');
console.log('='.repeat(80));
console.log(`Page load time: ${loadTime}ms`);
console.log(`Classification button: ${buttonVisible ? 'β Present' : 'β Missing'}`);
console.log(`Console telemetry: ${consoleLogs.length} messages captured`);
console.log('\nβ
Test complete! Browser will stay open for manual inspection.');
console.log('Press Enter to close...');
await new Promise(resolve => {
process.stdin.once('data', resolve);
});
} catch (error) {
console.error('\nβ Test failed:', error.message);
console.error(error.stack);
} finally {
await browser.close();
}
}
// Run the test
testPerformanceOptimizations().catch(console.error);