Skip to content

sistema performance

github-actions[bot] edited this page Nov 13, 2026 · 1 revision

⚙️ Sistema, Performance & Pacotes

Esta página cobre as ferramentas de Ferramentas → Sistema & Processos: Gerenciador de Pacotes Pip, Gerenciador de Processos e Modo Performance - além do Cursor Customizável e do Explorador de Arquivos Remotos, que vivem em outras partes do menu mas são, na essência, ferramentas de sistema. Também inclui uma seção técnica sobre a arquitetura de performance do editor, metas, benchmarks e como diagnosticar lentidão.


📦 Gerenciador de Pacotes Pip (src/ui/pip_manager.py)

Atalho: Ferramentas → Sistema & Processos → 📦 Gerenciador Pip.

Interface gráfica completa para pip, organizada em quatro abas:

Aba Conteúdo
Instalados Cards visuais por pacote: versão, licença, links do projeto, badge de status
PyPI Busca de pacotes no PyPI com cards ricos (descrição, autor, contagem de downloads, botão de instalar direto)
Ambientes Lista, cria e ativa ambientes virtuais (venv)
Outdated Lista pacotes com atualização disponível, com opção de atualização em massa

Funcionalidades

  • Log de operações em tempo real, com cores distintas para sucesso/aviso/erro
  • Instalar, atualizar e desinstalar pacotes com barra de progresso
  • Exportar e importar requirements.txt diretamente da interface
  • Criação de novo ambiente virtual sem sair do Codis

🖥️ Gerenciador de Processos (src/ui/process_manager.py)

Atalho: Ctrl+Alt+M ou Ferramentas → Sistema & Processos → Gerenciador de Processos.

Duas abas:

Aba Conteúdo
Sistema Todos os processos do sistema operacional, com CPU, memória, status e usuário
Codis Painéis internos abertos, threads internas e subprocessos gerados pelo próprio editor

Funcionalidades

  • Gráficos de uso de CPU e memória em tempo real
  • Painel de informações do sistema: RAM total, número de núcleos, uptime
  • Filtro em tempo real por nome de processo ou PID
  • Encerrar processo individual (com confirmação) ou encerrar a árvore completa de processos
  • Detalhes expandidos por processo: linha de comando completa, threads, arquivos abertos
  • Auto-atualização configurável (1s / 2s / 5s)

Dependência opcional: requer psutil (pip install psutil). Sem ele, o painel degrada graciosamente - a aba Sistema fica indisponível, mas a aba Codis continua funcionando, já que não depende de psutil.


🚀 Modo Performance (src/ui/performance_panel.py)

Atalho: Ferramentas → Sistema & Processos → Modo Performance.

Permite controlar individualmente quais funcionalidades visuais são desativadas quando o monitor automático de travamentos é acionado, ou ao ativar o modo manualmente. Janela de 700×680.

Funcionalidades controláveis

Editor: Minimap, Syntax Highlighting (debounce), Sticky Scroll, Code Folding, Inline Blame, Color Preview, Inlay Hints, Ligatures, Edit Heatmap, Code Rhythm, Autocomplete.

K-UI: Perfil de animações (dropdown de intensidade do motor holográfico).

Linting: Lint automático ao salvar.

Monitor automático

O Codis monitora o tempo de resposta da interface continuamente. Quando detecta um travamento acima de um limiar configurável (perf_freeze_threshold_ms, padrão 500ms), aciona automaticamente o conjunto de desativações escolhido pelo usuário neste painel - sem precisar de intervenção manual.

O botão Aplicar Agora permite acionar manualmente o modo performance mesmo sem ter ocorrido um travamento, útil antes de abrir um arquivo muito grande.


📊 Performance Técnica, Benchmarks e Diagnóstico

Seção voltada a quem quer entender como o Codis atinge sua performance e como diagnosticar lentidão - não é sobre um painel específico, mas sobre a arquitetura de performance do editor como um todo.

Metas de Performance

Métrica Meta Medição
Tempo de inicialização (cold start) < 1.5s Da execução de python run.py até a janela visível
Abertura de arquivo (< 1 MB) < 100ms Do clique até o texto renderizado
Abertura de arquivo grande (1–10 MB) < 500ms Com modo de arquivo grande ativado
Syntax highlight (< 500 linhas) < 16ms Por frame (60fps)
Autocomplete (primeira sugestão) < 200ms Com LSP ativo
Busca global (projeto 10k arquivos) < 2s Com indexação em cache
Render de minimap < 8ms Por frame

Threading

O Codis usa threads para todas as operações que não tocam na UI:

Thread principal (Tkinter mainloop)
  ├── LSP I/O thread            ← leitura/escrita stdio com servidor LSP
  ├── Lint thread               ← execução de linters externos
  ├── Git thread                ← operações git (status, blame, log)
  ├── File watcher thread       ← inotify/FSEvents/ReadDirectoryChangesW
  ├── Plugin worker thread      ← execução de plugins via ProcessRunner
  └── IA inference thread       ← chamadas HTTP para APIs de IA

Resultados das threads são agendados de volta na thread principal via root.after(0, callback) - Tkinter não é thread-safe, então nenhum código de outra thread pode tocar widgets diretamente.

Debounce e Throttle

Operação Estratégia Delay
Syntax highlighting Debounce 50ms após última digitação
Lint Debounce 500ms após última digitação
LSP textDocument/didChange Debounce 100ms
Minimap render Throttle 60ms (≈16fps)
File tree refresh Debounce 200ms
Busca incremental Debounce 150ms

Modo Arquivo Grande

Arquivos com mais de 500 KB ou 10.000 linhas ativam automaticamente o modo de arquivo grande (src/editor/large_file.py):

  • Syntax highlighting desativado (o Tkinter Tag system não escala para centenas de milhares de tags).
  • Minimap em modo low-res (1 pixel por linha em vez de renderização completa).
  • Code folding, Inline blame e Inlay hints desativados.

O arquivo ainda é completamente editável - apenas as features visuais pesadas são suspensas.

Cache de Syntax Highlighting

O highlighter (src/syntax/highlighter.py) mantém um cache de resultados por hash do conteúdo. Re-highlight de um arquivo não modificado é um lookup de O(1). Qualquer edição invalida apenas o cache do arquivo editado, não o cache global.

Diagnosticando lentidão manualmente

# Perfil de inicialização
python -m cProfile -o startup.prof -m src
python -m pstats startup.prof

# Perfil de operação específica (ex: abertura de arquivo grande)
# Adicione ao código:
import cProfile
cProfile.enable()
# ... operação ...
cProfile.disable()
cProfile.print_stats(sort='cumulative')

O EventBus loga automaticamente handlers que demoram mais de 50ms em modo debug:

CODIS_DEBUG=1 python run.py
[EventBus] SLOW handler: git_panel.on_file_saved took 87ms for event editor:file:saved

Limites conhecidos do Tkinter

Limitação Impacto Mitigação no Codis
Tags no widget Text são O(n) para overlap Highlight lento em arquivos grandes Modo arquivo grande desativa tags
Canvas não usa aceleração GPU Animações limitadas a ~60fps em CPU K-UI usa deltas mínimos por frame
Font rendering depende do sistema Ligatures inconsistentes entre SOs src/editor/ligatures.py normaliza
Sem suporte a sub-pixel rendering Texto levemente diferente entre SOs Aceito como limitação da plataforma
after() não é tempo real Delays variáveis sob carga de CPU Throttle adaptativo baseado em frame time

Benchmarks de referência

Medidos em: Ryzen 5 3600, 16GB RAM, SSD NVMe, Python 3.12.3, Ubuntu 22.04.

Operação Tempo médio Desvio padrão
Cold start 890ms ±45ms
Abertura arquivo 100KB Python 42ms ±8ms
Abertura arquivo 5MB JSON 310ms ±25ms
Highlight 500 linhas Python 11ms ±2ms
Highlight 2000 linhas Python 38ms ±5ms
Busca regex em projeto 1000 arquivos 680ms ±90ms
LSP completion (pylsp local) 85ms ±30ms
Git status (repo 5000 commits) 120ms ±20ms

Benchmarks reproduzíveis via python -m pytest tests/ -m slow -v

Tuning pelo usuário

Em Configurações → Performance, o usuário pode ajustar:

Configuração Padrão Impacto
highlight_delay_ms 50 Latência vs. CPU
lint_delay_ms 500 Frequência de lint
large_file_threshold_kb 500 Quando ativar modo arquivo grande
minimap_enabled true Desativar reduz CPU em ~5%
animations_enabled true Desativar reduz CPU em ~3%
git_auto_refresh_ms 2000 Frequência do git status automático

🖱️ Cursor Customizável (src/ui/cursor_manager.py)

Acesso: integrado ao seletor de tema/aparência (categoria Cursor dentro de Configurações).

Substitui o ponteiro do mouse do sistema por um cursor de software: emoji, texto, imagem (PNG/SVG via Pillow) ou combinações.

Como funciona internamente

  • O cursor nativo do sistema é ocultado na janela (root.config(cursor="none"))
  • Um Toplevel transparente e clicável segue o mouse em tempo real
  • Esse Toplevel exibe o cursor escolhido como Label ou Canvas
  • Os cliques atravessam normalmente o overlay: no Windows via SetWindowLong (passthrough nativo) e configuração de -transparentcolor; no Linux/macOS via Toplevel ultra-fino de 1px com wm_attributes("-alpha", 0.99)

Limitações conhecidas

  • Emojis dependem da fonte disponível no sistema operacional
  • Cursores de imagem requerem Pillow instalado (pip install Pillow)
  • Existe uma latência de até ~1 frame (≤16ms) entre o cursor real e o de software, imperceptível na maioria dos casos

🌐 Explorador de Arquivos Remotos (src/ui/remote_browser.py)

Suporta múltiplos protocolos de acesso remoto a arquivos em uma única interface unificada:

Protocolo Implementação
SSH / SFTP Via cliente SSH do próprio sistema (scp/sftp)
FTP Via ftplib (biblioteca padrão)
FTPS FTP sobre TLS, via ftplib
HTTP/HTTPS Listagem de índices Apache/Nginx + download
WebDAV Via requests + xml.etree (requer pip install requests)
Local/SMB Montagens de rede já visíveis no sistema de arquivos local

Funcionalidades

  • Gerenciamento de conexões com perfis persistentes em JSON
  • Navegação em árvore com duplo-clique para entrar em pastas
  • Download e upload bidirecional
  • Abertura direta de arquivos remotos no editor do Codis (texto, código, imagem ou notebook)
  • Sync automático ao salvar: ao editar um arquivo aberto remotamente e salvar, o Codis faz upload de volta ao servidor automaticamente
  • Menu de contexto com ações rápidas e filtro de busca

Cada protocolo é implementado como um _Adapter próprio, seguindo o mesmo padrão arquitetural usado no Chat Panel.

Clone this wiki locally