43870e5920
- Create reports/ directory with detailed performance reports - Simplify README.md to provide overview and summary - Add links to detailed reports for each decimal level (1, 2, 5, 10, 100, 1000, 2000) - Keep summary table and key findings in main README - Remove verbose charts from main README to reduce noise
84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Update Memory Usage Over Time charts with actual data from timeline files."""
|
|
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
|
|
# Languages with Memory Usage Over Time charts
|
|
LANGUAGES = {
|
|
"C": {"max_time": 12, "max_memory": 1},
|
|
"Rust": {"max_time": 12, "max_memory": 1},
|
|
"Assembly": {"max_time": 20, "max_memory": 1},
|
|
"Haskell": {"max_time": 8, "max_memory": 12},
|
|
"Dart": {"max_time": 12, "max_memory": 11},
|
|
"Elixir": {"max_time": 300, "max_memory": 3},
|
|
"TypeScript": {"max_time": 1500, "max_memory": 3},
|
|
"Scala": {"max_time": 360, "max_memory": 3},
|
|
"JavaScript": {"max_time": 500, "max_memory": 3},
|
|
}
|
|
|
|
def get_memory_timeline(lang_dir):
|
|
"""Get memory timeline from timeline files."""
|
|
timeline_dir = Path(f"timelines/{lang_dir}")
|
|
if not timeline_dir.exists():
|
|
return []
|
|
|
|
# Read first timeline file
|
|
tsv_file = timeline_dir / "run_1.tsv"
|
|
if not tsv_file.exists():
|
|
return []
|
|
|
|
memories = []
|
|
with open(tsv_file, 'r') as f:
|
|
for line in f:
|
|
parts = line.strip().split()
|
|
if len(parts) >= 2:
|
|
try:
|
|
memory_bytes = int(parts[1])
|
|
# Convert to MB
|
|
memory_mb = memory_bytes / (1024 * 1024)
|
|
memories.append(round(memory_mb, 1))
|
|
except ValueError:
|
|
continue
|
|
|
|
return memories
|
|
|
|
def update_readme():
|
|
"""Update README with actual memory timeline data."""
|
|
with open('README.md', 'r') as f:
|
|
content = f.read()
|
|
|
|
for lang, config in LANGUAGES.items():
|
|
# Get memory timeline
|
|
memories = get_memory_timeline(lang)
|
|
|
|
if not memories:
|
|
print(f"No timeline data for {lang}")
|
|
continue
|
|
|
|
# Find and replace memory chart
|
|
# Pattern to match the line chart values
|
|
pattern = rf'(title "{lang} - Memory Usage Over Time".*?line \[).*?(\])'
|
|
|
|
# Create new values string
|
|
values_str = ', '.join(map(str, memories))
|
|
replacement = f'\\g<1>{values_str}\\g<2>'
|
|
|
|
# Update content
|
|
new_content = re.sub(pattern, replacement, content, flags=re.DOTALL)
|
|
|
|
if new_content != content:
|
|
content = new_content
|
|
print(f"Updated {lang} with {len(memories)} memory values: {memories[:5]}...")
|
|
else:
|
|
print(f"No match found for {lang}")
|
|
|
|
# Write updated README
|
|
with open('README.md', 'w') as f:
|
|
f.write(content)
|
|
|
|
print("\nUpdated README with actual memory timeline data")
|
|
|
|
if __name__ == "__main__":
|
|
update_readme() |