feature/capability-based-deps (#53)

Reviewed-on: #53
Co-authored-by: David Gwilliam <dhgwilliam@gmail.com>
Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
This commit was merged in pull request #53.
This commit is contained in:
2026-03-31 01:55:21 +00:00
committed by david
parent 2650f7245e
commit 2d28e92594
190 changed files with 37860 additions and 2026 deletions

View File

@@ -2,7 +2,7 @@ import time
from engine.effects.performance import PerformanceMonitor, get_monitor
from engine.effects.registry import EffectRegistry
from engine.effects.types import EffectContext
from engine.effects.types import EffectContext, PartialUpdate
class EffectChain:
@@ -51,6 +51,18 @@ class EffectChain:
frame_number = ctx.frame_number
monitor.start_frame(frame_number)
# Get dirty regions from canvas via context (set by CanvasStage)
dirty_rows = ctx.get_state("canvas.dirty_rows")
# Create PartialUpdate for effects that support it
full_buffer = dirty_rows is None or len(dirty_rows) == 0
partial = PartialUpdate(
rows=None,
cols=None,
dirty=dirty_rows,
full_buffer=full_buffer,
)
frame_start = time.perf_counter()
result = list(buf)
for name in self._order:
@@ -59,7 +71,11 @@ class EffectChain:
chars_in = sum(len(line) for line in result)
effect_start = time.perf_counter()
try:
result = plugin.process(result, ctx)
# Use process_partial if supported, otherwise fall back to process
if getattr(plugin, "supports_partial_updates", False):
result = plugin.process_partial(result, ctx, partial)
else:
result = plugin.process(result, ctx)
except Exception:
plugin.config.enabled = False
elapsed = time.perf_counter() - effect_start