From 92101d860ccc9cdf390c457728f3608f00f6fb08 Mon Sep 17 00:00:00 2001 From: "Tom A. Wagner" Date: Sun, 6 Jun 2021 09:36:57 +0200 Subject: [PATCH] Update ARCHITECTURE.md to reflect state having moved to the pipewire thread --- docs/architecture.md | 46 ++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 65bd4b1..f1bde9d 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -14,41 +14,37 @@ Helvum uses an architecture with the components laid out like this: │ View │ └────┬─┘ Λ ┆ - │<───── updates view - │ ┆ - │ ┆<─ notifies of user input - │ ┆ (using signals) - │ ┆ - │ ┆ - │ V notifies of remote changes -┌┴────────────┐ via messages ┌───────────────────┐ + │<───── updates view ┌───────┐ + │ ┆ │ State │ + │ ┆<─ notifies of user input └───────┘ + │ ┆ (using signals) Λ + │ ┆ │ + │ ┆ │<─── updates/reads state + │ V notifies of remote changes │ +┌┴────────────┐ via messages ┌─────────┴─────────┐ │ Application │<╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ Seperate │ │ Object ├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌>│ Pipewire Thread │ -└┬────────────┘ request changes to remote └───────────────────┘ - │ via messages Λ - │ ║ - │<─── updates/reads state ║ - │ ║ - V ║ -┌───────┐ V -│ State │ [ Remote Pipewire Server ] -└───────┘ +└─────────────┘ request changes to remote └───────────────────┘ + via messages Λ + ║ + ║ + V + [ Remote Pipewire Server ] ``` -The program is split between two threads, with most stuff happening inside the GTK thread. -The GTK thread will sit in a GTK event processing loop, while the pipewire thread will sit in a -pipewire event processing loop. +The program is split between two cooperating threads. +The GTK thread (displayed on the left side) will sit in a GTK event processing loop, while the pipewire thread (displayed on the right side) will sit in a pipewire event processing loop. -The `Application` object inside the GTK thread is the centerpiece of this architecture. -It communicates with the pipewire thread using two channels, +The `Application` object inside the GTK thread communicates with the pipewire thread using two channels, where each message sent by one thread will trigger the loop of the other thread to invoke a callback with the received message. -For each change on the remote pipewire server, the `Application` in the GTK thread is notified by the pipewire thread -and updates the view to reflect those changes, and additionally memorizes anything it might need later in the state. +For each change on the remote pipewire server, the pipewire thread updates the state and notifies +the `Application` in the GTK thread if changes are needed. +The `Application` then updates the view to reflect those changes. Additionally, a user may also make changes using the view. For each change, the view notifies the `Application` by emitting a matching signal. -The `Application` will then request the pipewire thread to make those changes on the remote. \ +The `Application` will then ask the pipewire thread to make those changes on the remote. \ These changes will then be applied to the view like any other remote changes as explained above. # View Architecture