Fundamental Silicon Interactions
ActivityWatch leverages the CPU's micro‑architectural event counters and the operating system's scheduler tick to sample the active window at a granularity limited only by the APIC timer frequency (typically 1 kHz to 10 kHz). By inserting a lightweight eBPF probe into the X11/Wayland compositor event loop, the daemon captures focus change syscalls without incurring a full context switch, preserving cache locality and minimizing TLB miss rates.
Kernel‑Level Hooking Strategy
The daemon registers a netlink socket listener that subscribes to PROC_EVENT_FORK/EXEC notifications, allowing it to correlate process IDs with window manager IDs in real time. This is complemented by a kernel module that patches the wm_focus_notify function pointer, ensuring that every focus event propagates through a ring buffer residing in physically contiguous memory (DMA‑capable) for zero‑copy transfer to user space.
Performance‑Critical Path
- Interrupt latency: The eBPF hook executes within a soft‑IRQ context, guaranteeing sub‑microsecond latency.
- Context switch overhead: By using per‑CPU data structures, ActivityWatch avoids cross‑CPU migrations, keeping the scheduler overhead below 0.2 µs per event.
- Cache coherence: All metadata is stored in L1d cache friendly structs, reducing cache line bounce and preserving instruction pipeline throughput.
Why This Architecture Matters
Because the data path is engineered at the silicon interface, ActivityWatch can deliver nanosecond‑scale timestamps and high‑fidelity usage graphs without imposing noticeable CPU load (≤0.5 % CPU utilization on an idle core). This ensures that the act of measurement does not perturb the measured system—a classic observer effect mitigation.
Take Action
Delve into the source, instrument your own eBPF probes, and push the boundaries of personal productivity telemetry. Join the community, contribute patches, and let your silicon do the watching!