# bedomagdi/probo architecture

> Architecture diagram of the GitHub repository bedomagdi/probo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bedomagdi/probo
- Repository: https://github.com/bedomagdi/probo

## Overview

PROBO evaluates JVM flag combinations against Maven test suites, uses JFR-derived runtime metrics to guide Bayesian search, and records the measured results; BOCA and random search provide alternative strategies. A separate workflow checks a selected combination across later project commits. The map includes the parser’s main stages and core helper types. Edges reflect the supplied excerpts, SOURCE INDEX references, or README; some orchestration details are documented but not directly shown in source excerpts.

Main entry points: [`evaluator.py`](https://github.com/bedomagdi/probo/blob/main/evaluator.py) (Combination evaluator), [`run_best_flags_for_project.py`](https://github.com/bedomagdi/probo/blob/main/run_best_flags_for_project.py) (Best-flag follow-up), [`probo.py`](https://github.com/bedomagdi/probo/blob/main/probo.py) (PROBO search), [`jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java`](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java) (Suite metric aggregation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_search["Search strategies"]
  node_probo["PROBO search<br/>[probo.py]"]
  node_boca["BOCA search<br/>[boca.py]"]
  node_random["Random search<br/>[random_search.py]"]
  node_flagspace["Flag space<br/>[utils.py]"]
end

subgraph group_evaluation["Test evaluation"]
  node_evaluator["Combination evaluator<br/>[evaluator.py]"]
  node_pomargs["POM JVM arguments"]
  node_results["Experiment results<br/>[utils.py]"]
end

subgraph group_profiling["JFR profiling"]
  node_jfrparser["JFR parser entry<br/>[JFRParser.java]"]
  node_filefinder["Recording discovery<br/>[FileFinder.java]"]
  node_aggregation["Suite metric aggregation"]
  node_eventaggregation["Event aggregation"]
  node_summary["JFR event summary<br/>[JFRSummary.java]"]
  node_pair["Pair helper<br/>[Pair.java]"]
  node_triple["Triple helper<br/>[Triple.java]"]
end

subgraph group_followup["Commit follow-up"]
  node_bestflags["Best-flag follow-up"]
  node_commits["Project commit history"]
end

node_researcher(("Experiment user"))
node_maven["Maven test suite"]

node_researcher -->|"starts search"| node_probo
node_researcher -->|"selects approach"| node_boca
node_researcher -->|"selects approach"| node_random
node_probo -->|"uses flags"| node_flagspace
node_boca -->|"uses flags"| node_flagspace
node_random -->|"samples flags"| node_flagspace
node_probo -->|"evaluates candidates"| node_evaluator
node_boca -->|"evaluates candidates"| node_evaluator
node_random -->|"evaluates candidates"| node_evaluator
node_evaluator -->|"sets JVM arguments"| node_pomargs
node_evaluator -->|"runs tests"| node_maven
node_evaluator -->|"saves measurements"| node_results
node_probo -->|"extracts profile metrics"| node_jfrparser
node_jfrparser -->|"discovers recordings"| node_filefinder
node_jfrparser -->|"processes recordings"| node_aggregation
node_aggregation -->|"groups events"| node_eventaggregation
node_eventaggregation -->|"populates summary"| node_summary
node_aggregation -->|"uses pairs"| node_pair
node_aggregation -->|"uses triples"| node_triple
node_researcher -->|"runs later-commit check"| node_bestflags
node_bestflags -->|"reads commit list"| node_commits
node_bestflags -->|"measures configurations"| node_maven
node_bestflags -->|"sets JVM arguments"| node_pomargs
node_bestflags -->|"writes run results"| node_results

click node_probo "https://github.com/bedomagdi/probo/blob/main/probo.py"
click node_boca "https://github.com/bedomagdi/probo/blob/main/boca.py"
click node_random "https://github.com/bedomagdi/probo/blob/main/random_search.py"
click node_flagspace "https://github.com/bedomagdi/probo/blob/main/utils.py"
click node_evaluator "https://github.com/bedomagdi/probo/blob/main/evaluator.py"
click node_pomargs "https://github.com/bedomagdi/probo/blob/main/insert_jvm_args_in_pom.py"
click node_results "https://github.com/bedomagdi/probo/blob/main/utils.py"
click node_jfrparser "https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/JFRParser.java"
click node_filefinder "https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/FileFinder.java"
click node_aggregation "https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java"
click node_eventaggregation "https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/AggregateJFRData.java"
click node_summary "https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/JFRSummary.java"
click node_pair "https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/Pair.java"
click node_triple "https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/Triple.java"
click node_bestflags "https://github.com/bedomagdi/probo/blob/main/run_best_flags_for_project.py"
click node_commits "https://github.com/bedomagdi/probo/tree/main/commits"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_probo,node_boca,node_random,node_flagspace,node_researcher toneBlue
class node_evaluator,node_pomargs,node_results toneAmber
class node_jfrparser,node_filefinder,node_aggregation,node_eventaggregation,node_summary,node_pair,node_triple toneMint
class node_bestflags,node_commits toneRose
class node_maven toneIndigo
```

## Components

### Search strategies

- [PROBO search](https://github.com/bedomagdi/probo/blob/main/probo.py): `probo.py`
- [BOCA search](https://github.com/bedomagdi/probo/blob/main/boca.py): `boca.py`
- [Random search](https://github.com/bedomagdi/probo/blob/main/random_search.py): `random_search.py`
- [Flag space](https://github.com/bedomagdi/probo/blob/main/utils.py): `utils.py`

### Test evaluation

- [Combination evaluator](https://github.com/bedomagdi/probo/blob/main/evaluator.py): `evaluator.py`
- [POM JVM arguments](https://github.com/bedomagdi/probo/blob/main/insert_jvm_args_in_pom.py): `insert_jvm_args_in_pom.py`
- [Experiment results](https://github.com/bedomagdi/probo/blob/main/utils.py): `utils.py`

### JFR profiling

- [JFR parser entry](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/JFRParser.java): `jfr_parser/parser/src/main/java/parser/JFRParser.java`
- [Recording discovery](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/FileFinder.java): `jfr_parser/parser/src/main/java/parser/FileFinder.java`
- [Suite metric aggregation](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java): `jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java`
- [Event aggregation](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/AggregateJFRData.java): `jfr_parser/parser/src/main/java/parser/AggregateJFRData.java`
- [JFR event summary](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/JFRSummary.java): `jfr_parser/parser/src/main/java/parser/JFRSummary.java`
- [Pair helper](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/Pair.java): `jfr_parser/parser/src/main/java/parser/Pair.java`
- [Triple helper](https://github.com/bedomagdi/probo/blob/main/jfr_parser/parser/src/main/java/parser/Triple.java): `jfr_parser/parser/src/main/java/parser/Triple.java`

### Commit follow-up

- [Best-flag follow-up](https://github.com/bedomagdi/probo/blob/main/run_best_flags_for_project.py): `run_best_flags_for_project.py`
- [Project commit history](https://github.com/bedomagdi/probo/tree/main/commits): `commits`

### Other components

- **Experiment user**
- **Maven test suite**

## Connections

- Experiment user → PROBO search: starts search (evidence: `README.md`)
- Experiment user → BOCA search: selects approach (evidence: `README.md`)
- Experiment user → Random search: selects approach (evidence: `README.md`)
- PROBO search → Flag space: uses flags (evidence: `probo.py`)
- BOCA search → Flag space: uses flags (evidence: `boca.py`)
- Random search → Flag space: samples flags (evidence: `random_search.py`)
- PROBO search → Combination evaluator: evaluates candidates (evidence: `probo.py`)
- BOCA search → Combination evaluator: evaluates candidates (evidence: `boca.py`)
- Random search → Combination evaluator: evaluates candidates (evidence: `random_search.py`)
- Combination evaluator → POM JVM arguments: sets JVM arguments (evidence: `evaluator.py`)
- Combination evaluator → Maven test suite: runs tests (evidence: `evaluator.py`)
- Combination evaluator → Experiment results: saves measurements (evidence: `evaluator.py`)
- PROBO search → JFR parser entry: extracts profile metrics (evidence: `README.md`)
- JFR parser entry → Recording discovery: discovers recordings (evidence: `jfr_parser/parser/src/main/java/parser/JFRParser.java`)
- JFR parser entry → Suite metric aggregation: processes recordings (evidence: `jfr_parser/parser/src/main/java/parser/JFRParser.java`)
- Suite metric aggregation → Event aggregation: groups events (evidence: `jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java`)
- Event aggregation → JFR event summary: populates summary (evidence: `jfr_parser/parser/src/main/java/parser/AggregateJFRData.java`)
- Suite metric aggregation → Pair helper: uses pairs (evidence: `jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java`)
- Suite metric aggregation → Triple helper: uses triples (evidence: `jfr_parser/parser/src/main/java/parser/AggregateTestSuite.java`)
- Experiment user → Best-flag follow-up: runs later-commit check (evidence: `README.md`)
- Best-flag follow-up → Project commit history: reads commit list (evidence: `README.md`)
- Best-flag follow-up → Maven test suite: measures configurations (evidence: `README.md`)
- Best-flag follow-up → POM JVM arguments: sets JVM arguments (evidence: `run_best_flags_for_project.py`)
- Best-flag follow-up → Experiment results: writes run results (evidence: `run_best_flags_for_project.py`)
