From 4519860f6b652ee0d9a742746e658dd2a8db7012 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Wed, 22 Feb 2023 18:29:42 +0200 Subject: [PATCH] 01_Application_Framework: Add an extended version of app startup And activation, that describes in more detail how that is handled. Bug-AGL: SPEC-4700 Signed-off-by: Marius Vlad Change-Id: I5f9a2764d66947c06bf8dc346dfaef72d993733f (cherry picked from commit 440ceea55588e2e59e1defd892d29c094798c47a) Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/documentation/+/28542 Reviewed-by: Jan-Simon Moeller Tested-by: Jan-Simon Moeller --- .../02_Application_Startup.md | 108 ++++++++++++++++++++- .../images/application_switching.msc | 29 ++++++ .../images/application_switching.png | Bin 0 -> 31633 bytes .../images/start_and_activation.msc | 30 ++++++ .../images/start_and_activation.png | Bin 0 -> 36479 bytes 5 files changed, 165 insertions(+), 2 deletions(-) create mode 100755 docs/04_Developer_Guides/images/application_switching.msc create mode 100644 docs/04_Developer_Guides/images/application_switching.png create mode 100755 docs/04_Developer_Guides/images/start_and_activation.msc create mode 100644 docs/04_Developer_Guides/images/start_and_activation.png diff --git a/docs/04_Developer_Guides/01_Application_Framework/02_Application_Startup.md b/docs/04_Developer_Guides/01_Application_Framework/02_Application_Startup.md index 6eeae02..56876a4 100644 --- a/docs/04_Developer_Guides/01_Application_Framework/02_Application_Startup.md +++ b/docs/04_Developer_Guides/01_Application_Framework/02_Application_Startup.md @@ -138,7 +138,111 @@ This can be useful, for example, when switching between graphical applications: - the application switcher doesn't need to track the state of each application; instead, it can simply send a `StartApplication` request to `applaunchd` - every time the user requests to switch to another application + every time the user requests to switch to another application. Obviously, the + client needs to subscribe to get these events and act accordingly. - the shell client then receives the `StatusResponse` with the message `status` string set to "started" indicating it that it should activate the window with - the corresponding `id` string + the corresponding `id` string, or alternatively the string `status` is + set to "terminated" to denote that the application has been terminated, + forcibly or not + +## A deeper look at start-up, activation and application switching + +Application start-up, activation and application switching are sometimes +conflated into a single operation but underneath some of these are distinct +steps, and a bit flaky in some circumstances. +The [AGL compositor](../../06_Component_Documentation/02_agl_compositor/) has +some additional events which one can use when creating an application +start-up & switching scheme in different run-times. + +Start-up of application is handled entirely by `applaunchd` service while +activation -- the window which I want to display, but which has never been +shown, and application switching -- bring forward an application already +shown/displayed in the past, are operations handled entirely by the +AGL compositor. + +The issue stems from the fact that underneath `applaunchd` can't make any +guarantees when the application actually started, as it calls into libsystemd +API to start the specific application systemd unit. + +If `StartApplication` can't start the systemd unit, it returns a false +`status` boolean value and a error message in `StartResponse` message, but if +the application is indeed started we doesn't really know the *moment* when the +application is ready to be displayed. Additionally, the AGL compositor +performed the activation on its own when it detected that a new application +has been started, but that implicit activation can now be handled outside +by the desktop run-time/shell client. + +*Note: Some of the run-times still rely on the compositor to perform activation +as this synchronization part between `applaunchd` has not been implemented. The +plan is to migrate all of remaining run-times to using this approach.* + +### Start-up & activation + +This means that we require some sort of interaction between `StartApplication` +method and the events sent by the AGL compositor in order to correctly handle +start-up & activation of application. + +There are couple of ways of achieving that, either using Wayland native calls, +or using the gRPC proxy interface, which underneath is using the same Wayland +native calls. + +For the first approach, the AGL compositor has an `app_state` Wayland event +which contains the application ID, and an enum `app_state` that will propagate +the following application state events: + +``` + + + + + + +``` + +The `started` event can be used in correlation with the `StartApplication` +method from `applaunchd` such that upon received the `started` even, it can +explicitly activate that particular appid in order for the compositor to +display it. See [AGL compositor](../../06_Component_Documentation/02_agl_compositor/) +about how activation should be handled. + +*Note: These can only be received if by the client shell which binds to the +agl_shell interface*. + +Alternatively, when using the gRPC proxy one can register to receive these +status events similar to the `applaunchd` events, subscribing to +`AppStatusState` method from the grpc-proxy helper application, which has the +following protobuf messages: + +``` +message AppStateRequest { +} +message AppStateResponse { + int32 state = 1; + string app_id = 2; +} +``` + +The integer state maps to the `enum app_state` from the Wayland protocol, so +they are a 1:1 match. + +Here's the state diagram for the Qt homescreen implementation of the +application start-up: + +![Application_start](../images/start_and_activation.png) + +### Application switching + +With the compositor providing application status events, it might seem that the +`applaunchd`'s, `GetStatusEvents` might be redundant, but in fact it is being +used to perform application switching. The run-time/shell client would in fact +subscribe to `GetStatusEvents` and each application wanting to switch to another +application would basically call `StartApplication`. That would eventually reach +the run-time/shell-client and have a handler that would ultimately activate the +application ID. + +![Application_switching](../images/application_switching.png) + +*Note: In practice, the run-time/shell-client would subscribe to both `applaunchd` +and to the AGL compositor, either Wayland native events, or using the gPRC-proxy +helper client, although the diagrams show them partly decoupled*. diff --git a/docs/04_Developer_Guides/images/application_switching.msc b/docs/04_Developer_Guides/images/application_switching.msc new file mode 100755 index 0000000..ceeab7c --- /dev/null +++ b/docs/04_Developer_Guides/images/application_switching.msc @@ -0,0 +1,29 @@ +#!/usr/bin/mscgen -Tpng + +msc { + hscale="1.5"; + + u [label = "touch/pointer event" ], + l [label = "launcher app" ], + s [label = "runtime/shell-client"], + a [label = "applaunchd" ], + g [label = "gRPC-proxy" ], + c [label = "compositor" ], + d [label = "libsystemd"]; + + |||; + + --- [label = "initial phase - subscribe for signal/status events, assume app_id already started" ]; + + s >> a [label = "subscribe for applaunchd GetStatusEvents"]; + + --- [label = "handling of application switching" ]; + + u => l [label = "tapShortCut(appid)" ]; + l => a [label = "StartApplication(appid)"]; + a => d [label = "start application's systemd unit"]; + d => a [label = "return status from starting systemd unit"]; + a => s [label = "StartResponse(status = TRUE)"]; + a => s [label = "StatusResponse(app_id, 'started')"]; + s => c [label = "activate_app(app_id)"]; +} diff --git a/docs/04_Developer_Guides/images/application_switching.png b/docs/04_Developer_Guides/images/application_switching.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5584aa88d228a09cce33fd0695a13cf7437bde GIT binary patch literal 31633 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 g [label = "subscribe for AGL compositor AppStatusState"]; + g >> c [label = "listen for app_state Wayland events"]; + + --- [label = "handling start-up & activation" ]; + + u => s [label = "tapShortCut(appid)" ]; + s => a [label = "StartApplication(appid)"]; + a => d [label = "start application's systemd unit"]; + d => a [label = "return status from starting systemd unit"]; + a => s [label = "StartResponse(status = TRUE)"]; + c => g [label = "app_state(app_state = APP_STARTED)"]; + g => s [label = "AppStatusResponse(app_id, APP_STARTED)"]; + s => c [label = "activate_app(app_id)"]; +} diff --git a/docs/04_Developer_Guides/images/start_and_activation.png b/docs/04_Developer_Guides/images/start_and_activation.png new file mode 100644 index 0000000000000000000000000000000000000000..593fc0e83e2e06f94f73e6b0647e3bf75a2bce3e GIT binary patch literal 36479 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