RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
Table of Contents |
---|
This page illustrates sequence diagrams to be implemented by RDK App Infrastructure Thunder plugins.
References
Repository: https://github.com/rdkcentral/entservices-infra
Firebolt Lifecycle 2.0: Simplified Lifecycle 2.0
draw.io Diagram | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Sequence diagrams are designed to adhere to the Single Responsibility Principle (SRP), ensuring each diagram focuses on a unique feature.
By numbering each step, the flow remains clear and easy to follow, enhancing both readability and analysis.
...
PlantUML Macro |
---|
@startuml
autonumber "[0]"
'hide footbox
title Setup Listeners for AI 2.0
participant ":SystemApp" as SystemApp
participant ":Package Manager" as PM
participant ":App Manager" as AM
participant ":Lifecycle Manager" as LM
participant ":Runtime Manager" as RM
participant ":Window Manager" as WM
participant ":Ripple" as Ripple
SystemApp -> AM: Listen for \nonAppLifecycleStateChanged()
AM -> LM: Listen for\nonAppLifecycleStateChanged()
AM -> PM: Listen for\nonAppInstallationStatus()
Ripple -> LM: Listen for\nonAppLifecycleStateChanged()
LM -> WM: Listen for\n onReady()
LM -> WM: Listen for\n onVisible()
LM -> RM: Listen for\n onStateChanged()
@enduml |
...
PlantUML Macro |
---|
@startuml autonumber 87 "[0]" 'hide footbox title General Package Handling participant ":SystemApp" as SystemApp participant ":Package Manager" as PM participant ":App Manager" as AM participant ":Lifecycle Manager" as LM SystemApp -> AM: launchApp/preloadApp AM -> LM: isAppLoaded( appId ) LM -->> AM: false AM -> AM: Check Package loaded AM -> PM: lock( packageId ) opt For Browser/Cobalt apps with runtime note right of PM: Package is already locked so replies faster PM -> PM: lock( runtimePackageId ) end PM -->> AM: 1. Unpacked path \n2. Configuration Object\n3. App Metadata @enduml |
...
PlantUML Macro |
---|
@startuml autonumber 1514 "[0]" 'hide footbox title Spawning participant ":SystemApp" as SystemApp participant ":App Manager" as AM participant ":Lifecycle Manager" as LM participant ":Ripple" as Ripple AM -> LM: spawnApp( appId, targetLifecycleState X ) note right of AM: Target lifecycle state could be ACTIVE/PAUSED/SUSPEND AM --> SystemApp: return true activate LM LM -> LM: allocate appInstanceId LM -> LM: newAppLifecycleState = LOADING LM ->> AM: onAppLifecycleStateChanged LOADING AM ->> SystemApp: onAppLifecycleStateChanged LOADING note left LM: Need to pass appId - for SecureStorage integration LM ->> Ripple: onAppLifecycleStateChanged\nLOADING Ripple -> Ripple: createSession note right of Ripple: Use appInstanceId for Session LM -> LM: Add environment variable\n for FIREBOLT_ENDPOINT and \npreload target state deactivate LM @enduml |
...
PlantUML Macro |
---|
@startuml autonumber 2423 "[0]" 'hide footbox title Container Launch participant ":App Manager" as AM participant ":Lifecycle Manager" as LM participant ":Runtime Manager" as RM participant ":Window Manager" as WM participant ":OCI" as OCI participant ":Ripple" as Ripple LM -> RM: run( appId, env ) activate RM RM ->> LM: onStateChanged(Starting) RM -> RM: Create Dobby Spec\n from Config Object RM -> RM: Create User Id Note left of RM: Add Storage Manager.get using user Id RM -> WM: createDisplay(appInstanceId) WM --> RM: Wayland env variable display name using user Id RM -> RM WM: Update display namecreateDisplay(appInstanceId) RM -> OCI: startContainer(spec) OCI -> App: exec() OCI ->> RM: onStarted RM ->> LM : onStateChanged(Running) LM -> LM: newAppLifecycleState = INITIALIZING LM ->> AM: onAppLifecycleStateChanged\nINITIALIZING LM ->> Ripple: onAppLifecycleStateChanged\n INITIALIZING Ripple ->> Ripple: Update app state deactivate RM @enduml |
...
PlantUML Macro |
---|
@startuml autonumber 3936 "[0]" 'hide footbox title Launch for an Active Interactive App participant ":SystemApp" as SystemApp participant ":App Manager" as AM participant ":Lifecycle Manager" as LM participant ":Runtime Manager" as RM participant ":Window Manager" as WM participant ":Ripple" as Ripple participant ":Firebolt App" as App note right of SystemApp: Launch with target lifecycle state of ACTIVE == 1. App Lifecycle Start up == activate App note right of Ripple: url = getenv( "FIREBOLT_ENDPOINT" ) activate Ripple App -> Ripple: Setup Lifecycle Listeners App -> Ripple: Lifecycle.ready Ripple -> LM: appReady() [JQ] LM -> LM: newAppLifecycleState = PAUSED LM ->> AM: onAppLifecycleStateChanged\nPAUSED LM ->> Ripple: onAppLifecycleStateChanged\n PAUSED Ripple ->> App: onStart() opt If frame is already rendered LM -> WM: renderReady() WM --> LM: true end opt else note right of WM: Render first frame App ->> WM: Wayland event WM ->> LM: onReady(appInstanceId) end LM -> LM: newAppLifecycleState = ACTIVE LM ->> Ripple : onAppLifecycleStateChanged\nACTIVE Ripple ->> App: onActivate() LM ->> AM: onAppLifecycleStateChanged\nACTIVE AM ->> SystemApp: onAppLifecycleStateChanged\nACTIVE opt SystemApp handling visibility and focus SystemApp -> WM: wayland set_properties(appInstanceId,visible) WM ->> LM: onVisible(appInstanceId) SystemApp -> WM: wayland set_client_focus(appInstanceId) end deactivate Ripple deactivate App @enduml |
...
PlantUML Macro |
---|
@startuml autonumber 3936 "[0]" 'hide footbox title Launch for an Suspended Interactive App participant ":SystemApp" as SystemApp participant ":App Manager" as AM participant ":Lifecycle Manager" as LM participant ":Runtime Manager" as RM participant ":Window Manager" as WM participant ":Ripple" as Ripple participant ":Firebolt App" as App note right of SystemApp: Preloaded with target lifecycle state of SUSPENDED activate App note right of Ripple: url = getenv( "FIREBOLT_ENDPOINT" ) activate Ripple App -> Ripple: Setup Lifecycle Listeners App -> Ripple: Lifecycle.ready Ripple -> LM: appReady() [JQ] LM -> LM: newAppLifecycleState = SUSPENDED LM -> RM: suspend(appInstanceId) LM -> WM: enableDisplayRender(appInstanceId, false) RM -> OCI: LM ->> AM: onAppLifecycleStateChanged\nSUSPENDED LM ->> Ripple: onAppLifecycleStateChanged\n SUSPENDED Ripple ->> App: onStartSuspend deactivate Ripple deactivate App @enduml |
...
PlantUML Macro |
---|
@startuml autonumber 5854 "[0]" 'hide footbox title Launch for an Suspended Interactive App participant ":SystemApp" as SystemApp participant ":App Manager" as AM participant ":Lifecycle Manager" as LM participant ":Window Manager" as WM participant ":Ripple" as Ripple participant ":Firebolt App" as App note right of SystemApp: Contd from Step 4A note right of SystemApp: If contd from Step 4b its 66 SystemApp -> AM: closeApp AM -> LM: setTargetAppState(PAUSED) LM -> LM: newAppLifecycleState = PAUSED LM ->> Ripple: onAppLifecycleStateChanged\n PAUSED Ripple ->> App: onPause LM ->> AM: onAppLifecycleStateChanged\nPAUSED note right of AM ->> SystemApp: onAppLifecycleStateChanged\nPAUSED opt Termination SystemApp -> AM: terminateApp: check for InstallBlocked/UninstallBlocked and move the app to terminate AM ->> SystemApp: onAppLifecycleStateChanged\nPAUSED AM -> LM: unloadApp LM -> LM: newAppLifecycleState = TERMINATING LM ->> Ripple: onAppLifecycleStateChanged\n TERMINATING note right of Ripple: No guarantee for this dispatch Ripple -> Ripple: Cleanup Ripple ->> App: onDestroy LM -> LM: Cleanup end LM -> RM: terminate RM -> OCI: stopContainer @enduml |
...
PlantUML Macro |
---|
@startuml autonumber 6566 "[0]" 'hide footbox title Launch for an Suspended Interactive App participant ":SystemApp" as SystemApp participant ":App Manager" as AM participant ":Lifecycle Manager" as LM participant ":Runtime Manager" as RM participant ":Window Manager" as WM participant ":Ripple" as Ripple participant ":Firebolt App" as App note right of SystemApp: Contd from Step 4B contd SystemApp -> AM: closeApp AM -> LM: setTargetAppState(PAUSED) LM -> LM: newAppLifecycleState = PAUSED LM ->> Ripple: onAppLifecycleStateChanged\n PAUSED Ripple ->> App: onPause LM ->> AM: onAppLifecycleStateChanged\nPAUSED note right of AM: check for InstallBlocked/UninstallBlocked and move the app to terminate AM ->> SystemApp: onAppLifecycleStateChanged\nPAUSED note right of AM: Based on Suspension Policy note right of AM: Need some methods in App Manager to support this TBD AM -> LM: setAppTargetState(SUSPENDED) LM -> LM: newAppLifecycleState = SUSPENDED LM -> RM: suspend(appInstanceId) LM ->> Ripple: onAppLifecycleStateChanged\n SUSPENDED Ripple ->> App: onSuspend opt If App is enabled for Hibernation note right of AM: Based on Hibernation Policy note right of AM: Need some methods in App Manager to support this TBD AM -> LM: setAppTargetState(HIBERNATED) LM -> LM: newAppLifecycleState = HIBERNATED LM -> RM: hibernate(appInstanceId) end opt Termination SystemApp -> AM: terminateApp AM -> LM: unloadApp opt Given current state is HIBERNATED LM -> LM: newAppLifecycleState = SUSPENDED LM -> RM: wake(appInstanceId,suspended) LM -> LM: newAppLifecycleState = SUSPENDED LM ->> Ripple: onAppLifecycleStateChanged\n SUSPENDED Ripple ->> App: onRestore end LM -> LM: newAppLifecycleState = TERMINATING LM ->> Ripple: onAppLifecycleStateChanged\n TERMINATING note right of Ripple: No guarantee for this dispatch Ripple -> Ripple: Cleanup Ripple ->> App: onDestroy LM -> LM: Cleanup end @enduml |
...