Quickshell / panneau : mesurer et réduire le coût mémoire des contenus masqués #22
Labels
No labels
Agent/Autonomous OK
Agent/Demeter
Agent/Hermes
Agent/Human
Agent/Needs Review
Area/API
Area/Auth
Area/CLI
Area/Data
Area/Docs
Area/Infra
Area/UI
CI/Failing
CI/Flaky
CI/Green
CI/Needs Runner
CI/Needs Workflow
Compat/Backward Compatible
Compat/Breaking
Compat/Migration
Deploy/Ansible
Deploy/Blocked
Deploy/Homelab
Deploy/Needs Config
Deploy/Needs Secret
Deploy/Ready
Deploy/Rollback
Kind/Bug
Kind/Chore
Kind/Design
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Refactor
Kind/Security
Kind/Spike
Kind/Testing
Ops/Backup
Ops/Incident
Ops/Maintenance
Ops/Monitoring
Ops/Upgrade
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Priority
Someday
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Risk
Critical
Risk
High
Risk
Low
Risk
Medium
Security/Auth
Security/Disclosure
Security/Hardening
Security/Secret
Size
L
Size
M
Size
S
Size
XL
Size
XS
Stack/Ansible
Stack/Docker
Stack/Forgejo
Stack/Hermes
Stack/Node
Stack/Postgres
Stack/Python
Stack/Systemd
Status
Abandoned
Status
Blocked
Status
In Progress
Status
In Review
Status
Need More Info
Status
Ready
chantier-racine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
mathieu/dotfiles#22
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Optimisation proposée, pas fuite démontrée
mathieu/SystemPanel.qml:212–226instancie les quatre pages dans unStackLayout. Certaines sections deHomePage.qml, notamment les contrôles des pièces/lumières, restent instanciées une fois chargées même lorsqu’elles sont repliées ou la page masquée. Masquer n’équivaut pas à détruire.Le relevé ponctuel d’une instance de longue durée ne permet pas d’attribuer son empreinte ni d’affirmer une fuite. Un test QML complémentaire a par ailleurs conservé identité, déploiement et focus des cartes de notifications après une mise à jour d’horloge : ne pas partir d’une hypothèse de churn systématique non reproduite.
Résultat attendu
Validation
Articulation
Après les bornes de ressources #12 / #13, pour ne pas masquer ces défauts par une optimisation UI. Pas de refonte de framework.
Référence
Revue du code au commit
5e350a8, avec Quickshell 0.3.2. Les 18 suites existantes passent ; les cas ci-dessous complètent cette couverture. Chantier : #11.Baseline synthétique parent sur
e8ec9ad: vraiHomePage.qmlet composants de lumières, Quickshell0.3.2 hors écran/backend logiciel, HOME/bus/audio privés, faux bridge sans connexion HA. La page est inactive et les lumières repliées ; charger un inventaire n’émet aucune commande.Après déploiement puis fermeture, les 128 LightRow existent encore (2 167 items). Cette mesure prouve une instanciation masquée évitable, pas une fuite ni un gain après correction. PSS est un relevé ponctuel sensible au partage de bibliothèques, pas une limite ni un profil complet. Un comparatif répété, cycles et latence/focus seront nécessaires pour accepter l’optimisation.
Le protocole n’inclut aucun serveur de notifications ; il peut donc préparer la baseline pendant #13 sans modifier ni masquer les bornes de notifications. L’implémentation de #22 attendra celles-ci. Fixture/mesures temporaires conservées hors dépôt pour comparaison, aucun fichier projet modifié.
Intégré sur main d5f3472, contenu distant exact des6fichiers vérifié. Candidate finale signée6f52da2 (C547fbf0 +correctionmétadonnées), revue indépendante sans constat après correction des séquences de nom hors-ligne/préselection. Gate parent combiné26/26 suites passent, dont16cas HomePage,21garde et11helper.
Acceptation technique : optimisation à froid, pas guérison de fuite ni promesse de RAM plus basse après usage. Corps d’une pièce créé à sa première consultation réelle puis conservé ; flags booléens prunés par inventaire, au plus l’inventaire eager original, pas de cache de QObjects/framework/GC forcé. Contrôles masqués inactifs et sans dépendance aux valeurs live ; états ID/focus/pointer-annulation conservés. Métadonnées sans changement d’ordre préservent les instances ; l’ordre alphabétique réel reste prioritaire lorsqu’un nom change de position. Notifications/dictée/Keepawake ne sont pas arrêtés.
Mesures finales exactes6f52da2 seulement (pas les anciennesC547plus favorables) : deux workloads128lampes puis2×128, deux paires avant/après chacun,60cycles naturels/GCnonforcé,992observations privées. Gain froid RSS
25–28Mio (une pièce) et62–64Mio (deux). Après usage, résultats mixtes : une paire+8,98MioRSS/+9,08MioPSS au point+5s, seconde paire comparable ; stresschangementdepièces moyennes tardives~+4,4MioRSS/+4,6MioPSS, pics échantillonnés~+1MioRSS et pointfinal~−3Mio. Ce surcoût modéré et variable est accepté au regard du gain tant que les pièces restent non consultées. A/Bavaient de vrais coûts de churn et n’ont pas été retenues. Objets bornés/plateau sur60cycles ne prouvent pas absence de fuite lente ; pas de retour froid revendiqué.Coût de première ouverture mesuré, accepté mais pas neutre : huit paires de processus natifs frais, vrai Return vers frame après oracle128contrôles/layout valides : médiane13,25→141,62ms, supplément126–137ms. Travail auparavant payé au démarrage déplacé vers la première consultation ; environ0,14s pour ce stress128contrôles jugé non disproportionné, pas une SLA ni une promesse sur matériel lent. Pas de gain CPU allégué pour cette page.
Deux écrans validés au niveau de la page Qt : deux vrais QScreen virtuels natifs Fixture-A1280×1440 etFixture-B1920×1080, même QQuickWindow A→B→A/B, largeurs360/560/960, identités/groupe/membres/focus conservés ; fenêtre réellement fermée/déplacée hors-ligne/réouverte, Tab, inventaire absent/restauré, zéro commande/WARN/ERROR. Ce n’est PAS une validation physique de moniteurs, LayerShell, compositor focus/hotplug/DPI ni du déplacement complet SystemPanel. Limite conservée explicitement ; le code modifié est HomePage/contrôles, pas l’ancrage du panneau.
Protocole/scripts/hashes/échantillons conservés hors dépôt :
/tmp/home-lazy-visited.Kqsk3aoD/final/(mémoire finale),/tmp/home-screens-latency.8W5OrxQl/(17processus natifs), rapports wave7/home-lazy-visited.md etwave10/home-screens-latency.md. Bus/audio/HOME/XDG privés, aucun état HA/historique personnel/écran ou touche hôte. Publication≠activation : checkout actif non avancé.Clôture corrigée après rejet de l’audit final : le test à deux vrais QScreen virtuels déplaçait une fenêtre QtQuick contenant HomePage, sans SystemPanel/PanelWindow/LayerShell. Il ne couvre donc pas le critère explicite « deux écrans, déplacement du panneau ». Le code final90f0cd8, les26suites, les mesures mémoire/latence et revues restent valides, mais l’acceptation est incomplète. #22 et #11 sont rouverts ; le suivi de chantier a été rétabli sur leurs véritables descendants. Prochaine étape : panneau complet dans un compositeur privé headless à deux sorties, services/données factices, aucune connexion/commande à la session hôte. Si impossible sans action sensible, demander à Mathieu une validation ou modification explicite du critère ; aucune acceptation n’est inférée.
Précontrôle privé arrêté par sécurité avant tout lancement : Hyprland installé0.56.2/Aquamarine0.15.1 initialise DRM/libseat/input et exige un allocateurGBM adossé DRM ; pas de mode headless-only sûr dans cette version vérifiée. Weston15 installé dispose de headless/pixman mais pas des protocoles wlr-layer-shell/Hyprland-focus-grab nécessaires au vrai panneau. Aucun compositeur, accès matériel, paquet, substitution offscreen/mock ou action sur la session hôte lancé.
Le critère reste ouvert. Prochaine décision demandée à Mathieu : autoriser un panneau complet de démonstration à données/services factices sur son compositeur actuel/deux sorties (focus temporaire), sans avancer/recharger sa configuration active ni commandeHA/appareil/session/presse-papiers ; sinon conserver ce contrôle en attente ou réviser explicitement le critère. Aucun accord n’est inféré des validations18/19.
Mathieu a maintenant explicitement répondu « oui, ok » à la demande d’afficher un panneau de démonstration à données factices sur ses deux écrans réels, avec focus temporaire, sans avancer/recharger sa configuration active ni commandeHA/appareil/session/presse-papiers. Objectif repris ; aucune modification du critère demandée/inférée.
Test borné lancé en préparation : vraiSystemPanel/PanelWindow/LayerShell et ses4pages inchangés au90f0cd8, dépendances de données factices, HOME/XDG/bus/audio privés, seule connexion d’affichage au compositeur actuel autorisée. Fermeture/cleanup/focus de retour prévus ; pas de nouveau compositeur/paquet/matériel. Le précontrôle privé échoué reste documenté, pas remplacé par un fauxPASS. Validation/revue attendues avant clôture.
Validation complémentaire terminée après l’autorisation explicite « oui, ok » de Mathieu : vraiSystemPanel/PanelWindow/LayerShell avec ses4pages de production90f0cd8, données/services factices, déplacé sur les2sorties existantes A→B→A puis bord droit/haut, fermé surB et rouvert surA. Ce n’est plus le simple QQuickWindow de la preuve initiale.18instantanés passent ; le compositeur identifie lePID du test sur chaque sortie et les protocoles Wayland confirment surfaces layer-shell, output-enter, configuration, entrée clavier et focus-grab. Rotation/logicalité/barre réservée prises en compte. Les contrôles/membres/états/focus et navigation sont conservés, données hors-ligne/absentes/restaurées couvertes ; le faux oracle de mauvaise sortie échoue comme attendu.
Le panneau a été visible 5,48secondes, puis fermé ; son client/watchdog sont sortis, état des sorties et surfaces hôtes identique, focus d’origine revenu automatiquement sans dispatch de restauration. Aucune commande de backend/appareil/session/presse-papiers, aucun receive de contenu ni capture d’écran. HOME/XDG/bus/audio privés, seule la connexion d’affichage autorisée au compositeur réel.39dépendancesQML/JS et90blobs de source inchangés ; checkout/instance habituels non avancés/rechargés.
Revue indépendante des preuves606a0f9a puis09dba92e/b4449195 : objection initiale couverte, notesP2 de classification des warnings et recette de reproduction corrigées/clarifiées, aucun constat restant. Le premier essai n’avait pas affiché de surface : nom synthétiqueIPCshow réservé, erreurCLI109 ; cause démontrée, puis tentative fraîche explicitement autorisée avec fixtureopenPanel etfauxchampmetrics.error corrigés. Aucun correctifQt/compositeur/panneau de production ou changement de runner.
**Pas de prétention warning-free :**4messages précis d’indisponibilité attendue des backends privés et21warningsQtWaylandtextinputdisableSurface sont conservés ; l’allowlist exacte rejette tout autreWARN/ERROR/FATAL/CRITICAL, zéro erreur QMLtype/référence/binding/assignment. La navigation/focus native est vérifiée malgré ces transitoires ; aucune correction universelle de textinput revendiquée.
Preuves privées :
/tmp/authorized-full-panel-retry.oJzxXYh7/(18snapshots natifs/états, sources/hashes, logs protocolaires FILTRÉS) ; vérification parent etallowlist dans/tmp/pi-quickshell-tickets.7b0ahn/. Ne pas publier les logs Wayland bruts (descriptions matériel). La recette de relecture est l’inspection des fichiers retenus et le nouveau classificateur à sortie séparée ; ne pas relancer le driver live ni l’ancienverify-evidence (queries/proc/écritures) sans nouvelle autorisation/revue. Ce dernier reste historique.Le critère « deux écrans, déplacement du panneau, fermeture/réouverture et données absentes » est maintenant accepté sur cette preuve complète. Le code et le gate26/26 au90f0cd8 restent inchangés ; aucune nouvelle mesure de ressources n’a été substituée.