⚙️ 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.