# Benchmarking in Basalt

Basalt provides built-in benchmarking tools to help you analyze and optimize your application's performance.

## Basic Usage

```lua
local main = basalt.getMainFrame()

-- Start benchmarking a container
main:benchmarkContainer("render")  -- Start tracking render performance

-- Log benchmark results
main:logContainerBenchmarks("render")  -- Print results to console
```

## Available Benchmark Methods

```lua
-- Track specific container methods
container:benchmarkContainer(methodName)  -- Start tracking
container:logContainerBenchmarks(methodName)  -- Show results

-- Common methods to benchmark:
- "render"      -- Track render performance
- "mouse_click"  -- Track click handling
- "mouse_up"     -- Track release handling
- "mouse_drag"   -- Track drag performance
```

## Practical Example

```lua
local basalt = require("basalt")
local main = basalt.getMainFrame()

-- Create a benchmark trigger button
main:addButton()
    :setText("Show Benchmarks")
    :setPosition(2, 2)
    :onClick(function()
        main:logContainerBenchmarks("render")
    end)

-- Create some test elements
local program = main:addProgram()
    :execute("shell.lua")

local complexFrame = main:addFrame()
    :setPosition(30, 1)
    :addButton()
    :addLabel()
    :addList()

-- Start benchmarking
main:benchmarkContainer("render")

basalt.run()
```

## Understanding Results

The benchmark results show:
- Total execution time
- Number of calls
- Average execution time

## Best Practices

1. **Targeted Benchmarking**
   - Benchmark specific methods you suspect are slow
   - Test with realistic data amounts
   - Compare different implementation approaches

2. **When to Benchmark**
   - During development for optimization
   - When experiencing performance issues
   - After making significant changes

3. **Common Areas to Watch**
   - Complex render logic
   - Heavy event handlers
   - Containers with many children
   - Programs and dynamic content
