Skip to content

Conversation

@ydah
Copy link
Member

@ydah ydah commented Dec 18, 2025

Summary

This PR improves the performance of integration tests by implementing compiled binary caching and optimizing compiler flags. The overall test suite execution time has been reduced by approximately 17% (from ~11.5s to ~9.5s).

Performance Improvements

Metric Before After Improvement
Full test suite ~11.5s ~9.5s ~17% faster

Changes

1. Compiled Binary Caching

Added a caching mechanism to avoid unnecessary recompilation of the same parsers:

  • Introduced IntegrationHelper.compiled_parsers hash to track compiled binaries
  • Cache key includes both parser name and lrama command arguments
  • Only recompiles when the parser hasn't been built or the binary doesn't exist
  • Particularly effective for parsers used multiple times:
    • after_shift: used 2 times
    • destructors: used 4 times

2. Optimized Compiler Flags

Changed GCC compilation flags to prioritize compilation speed over runtime performance:

  • Changed from -ggdb3 to -g (minimal debug info)
  • Added -O0 flag (no optimization)
  • These changes are appropriate for integration tests since we only care about correctness, not runtime performance

3. Memory Cleanup

Added after(:all) hook to clear the compiled parsers cache, preventing memory bloat during test runs.

### Summary

This PR improves the performance of integration tests by implementing compiled binary caching and optimizing compiler flags. The overall test suite execution time has been reduced by approximately 17% (from ~11.5s to ~9.5s).

### Performance Improvements

| Metric | Before | After | Improvement |
|--------|--------|-------|-------------|
| Full test suite | ~11.5s | ~9.5s | ~17% faster |
| Integration tests only | ~10.5s | ~8.3s | ~21% faster |

### Changes

#### 1. Compiled Binary Caching

Added a caching mechanism to avoid unnecessary recompilation of the same parsers:

- Introduced `IntegrationHelper.compiled_parsers` hash to track compiled binaries
- Cache key includes both parser name and lrama command arguments
- Only recompiles when the parser hasn't been built or the binary doesn't exist
- Particularly effective for parsers used multiple times:
  - `after_shift`: used 2 times
  - `destructors`: used 4 times

#### 2. Optimized Compiler Flags

Changed GCC compilation flags to prioritize compilation speed over runtime performance:

- Changed from `-ggdb3` to `-g` (minimal debug info)
- Added `-O0` flag (no optimization)
- These changes are appropriate for integration tests since we only care about correctness, not runtime performance

#### 3. Memory Cleanup

Added `after(:all)` hook to clear the compiled parsers cache, preventing memory bloat during test runs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant