macOS + Node server: Latency with high polling rate devices
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 20/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- cpp, macos, node.js
- Ambito
- desktop, operating-systems
Direzione di ricerca
Inizia da bindings/Node/libpointing/pointing/pointing.cc e analizza la modifica all'elaborazione degli eventi macOS nel commit 11bb753de457cfce719e1edbe4509739f557cbbc. Riproduci il binding Node su macOS con un dispositivo che esegue il polling a più di 125Hz, quindi analizza il compromesso tra la latenza del callback HID e la reattività di JavaScript. Il lavoro è completato quando i callback arrivano tempestivamente senza bloccare l'applicazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
With libpointing's new nodejs binding on macOS, devices with high polling rate (i.e. > 125Hz) "lag": the js client receives the reports much later than it should, creating a very high latency.
After some digging, it seems to be related to the cohabitation of the Cocoa's event loop with Node's main loop. Long story short: Node does not process all macOS events in its main loop and therefore HID callbacks are never called. libpointing solves this problem by processing macOS events every tick for Xms (see https://github.com/INRIA/libpointing/blob/master/bindings/Node/libpointing/pointing/pointing.cc#L30, the time given to macOS event processing was recently reduced in 11bb753de457cfce719e1edbe4509739f557cbbc). This solution is basically a trade-off: if we give more time to process macOS events, then JS events are not treated as quickly and the app freezes, but if we prioritize the JS event loop, then the HID callbacks are not called as quickly. I experimented with different values to find a better trade-off, but nothing seemed ideal. The current value seems fine for devices with low poll rates (<125Hz).
Related StackOverflow issue (no answer): https://stackoverflow.com/questions/33599653/c-callbacks-are-not-called-for-node-bindings
It seems that this problem could also be solved from the js code, by re-writing node's main loop to process macOS events, but it is pretty involved and require the use of platform dependent APIs in JS: https://github.com/TooTallNate/NodObjC/issues/2
Tested on macOS Catalina.
- Lingua principale
- C++
- Stelle
- 54
- Fork
- 14
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di INRIA/libpointing
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
INRIA/libpointing#40 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 38/100
INRIA/libpointing#26 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
INRIA/libpointing#22 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 28/100
INRIA/libpointing#17 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 20/100
INRIA/libpointing#10 ·
Tutte le issue di INRIA/libpointing
Issue simili
-
Mac mini M6 (16 GB): Q2_0 streaming works - measured 11.7->27.2 tok/s + arena fix for sub-32 GB MacsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
champion good first issue remake source/qq
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
metasequoiaime/msime-windows#1025 ·
I maintainer di solito rispondono entro 1 giorno
-
backlog bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
EchoTools/nevr-runtime#653 ·
I maintainer di solito rispondono entro 1 giorno
-
`--fail-require-skip` never fires: run_tests.py searches stdout, but the unittest binary writes the skip summary to stderrForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
InfiniTimeOrg/InfiniTime#2492 ·