Packages

Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.

Current section

Files

Jump to
raxol lib raxol benchmark competitor_suite.ex
Raw

lib/raxol/benchmark/competitor_suite.ex

defmodule Raxol.Benchmark.CompetitorSuite do
@moduledoc """
Benchmark suite for comparing Raxol against competitor terminal emulators.
This is a simplified version that avoids DSL compilation issues.
"""
alias Raxol.Core.Runtime.Log
alias Raxol.Terminal.Emulator
# Competitors data for reference and reporting
@competitors %{
raxol: %{
name: "Raxol",
type: :native,
language: "Elixir",
gpu_accelerated: false
},
alacritty: %{
name: "Alacritty",
type: :simulated,
language: "Rust",
gpu_accelerated: true,
expected_performance: %{
parser: 5.0,
memory: 15.0,
startup: 50.0
}
},
kitty: %{
name: "Kitty",
type: :simulated,
language: "Python/C",
gpu_accelerated: true,
expected_performance: %{
parser: 4.0,
memory: 25.0,
startup: 40.0
}
}
}
@doc """
Run competitor comparison benchmarks.
"""
def run_benchmarks(opts \\ []) do
Log.console("Running competitor comparison benchmarks...")
# Run parser benchmarks
parser_results = run_parser_benchmarks(opts)
# Generate comparison report
report = generate_comparison_report(parser_results)
{:ok, report}
end
@doc """
Calculate performance scores.
"""
def calculate_performance_score(results) do
Map.new(results, fn {name, timings} ->
# Simple scoring based on average timing
avg = Enum.sum(timings) / length(timings)
# Convert to score (higher is better)
score = 100 / (1 + avg / 1000)
{name, score}
end)
end
@doc """
Generate comparison report.
"""
def generate_comparison_report(results) do
%{
summary: "Benchmark comparison complete",
results: results,
competitors: @competitors,
timestamp: DateTime.utc_now()
}
end
# Private functions
defp run_parser_benchmarks(_opts) do
emulator = Emulator.new(80, 24)
benchmarks = %{
"plain_text" => fn ->
# Simplified benchmark - just process the input
Emulator.process_input(
emulator,
"The quick brown fox jumps over the lazy dog"
)
end,
"ansi_colors" => fn ->
Emulator.process_input(
emulator,
"\e[31mRed \e[32mGreen \e[34mBlue \e[0mNormal"
)
end,
"cursor_movement" => fn ->
Emulator.process_input(emulator, "\e[10;20H\e[2J\e[K\e[5A\e[3B")
end
}
# Run each benchmark
Map.new(benchmarks, fn {name, fun} ->
timings =
for _ <- 1..100 do
{time, _} = :timer.tc(fun)
time
end
{name, timings}
end)
end
end