Files
MosisService/ARCHITECTURE.md
2026-01-16 08:15:28 +01:00

3.9 KiB

MosisService Architecture

Overview

MosisService is an Android application that combines Kotlin UI components with native C++ libraries for UI rendering and system interaction. The architecture is built around a service-oriented design using Android's Binder system and integrates with RmlUi for rich UI rendering.

Core Components

1. Service Layer (mosis-service)

  • Purpose: Main Android Binder service implementation
  • Interface: Implements IMosisService.aidl
  • Functionality:
    • Touch event processing (onTouchDown, onTouchMove, onTouchUp)
    • Service initialization and listener management
    • Integration with kernel-based rendering system
    • Asset loading through Android AssetManager

2. Rendering Layer (mosis-test)

  • Purpose: UI rendering and testing infrastructure
  • Interface: Implements IMosisListener.aidl
  • Functionality:
    • OpenGL ES 2.0 rendering pipeline using GLAD
    • Multi-threaded rendering with EGL context management
    • Surface and buffer handling for Android native windows
    • Task queue management for asynchronous rendering operations
    • Hardware buffer management and processing

3. Core Engine (Kernel)

  • Purpose: Central rendering and event processing engine
  • Components:
    • RmlUi-based UI rendering engine
    • EGL context creation and management
    • Render target handling
    • Touch event processing and UI updates
    • Multi-threaded execution using std::thread

4. Supporting Libraries

  • AssetsManager: Asset loading from Android AssetManager
  • Logger: Cross-platform logging system
  • EGL Context: OpenGL ES context management
  • Render Target: Framebuffer and buffer management
  • Shader: OpenGL shader program handling
  • External Texture: Hardware buffer texture creation

System Architecture

Android Binder Integration

  • Uses AIDL (Android Interface Definition Language) for cross-process communication
  • Service exposes IMosisService interface for touch events and initialization
  • Listener pattern with IMosisListener for rendering callbacks
  • Binds to Java/Kotlin components through JNI

Multi-threading Model

  • Service layer runs in main thread for event handling
  • Rendering loop runs in dedicated thread managed by Kernel
  • Async task processing for UI updates
  • Thread-safe communication between components

Rendering Pipeline

  1. Initialization: Service connects to test layer, creates EGL context
  2. Buffer Management: Hardware buffers allocated and shared between layers
  3. Event Processing: Touch events processed and forwarded to Kernel
  4. Rendering Loop: Continuous rendering with frame synchronization
  5. UI Updates: RmlUi engine updates UI based on events and data

Data Flow

User Touch Events → IMosisService.onTouch* → Kernel.process → RmlUi UI Updates
Service Initialized → IMosisListener.onServiceInitialized → Rendering Setup
Buffer Available → IMosisListener.onBufferAvailable → Texture Creation
Frame Available → IMosisListener.onFrameAvailable → Frame Rendering

Key Technologies

  • Android NDK: Native development with C++23
  • CMake: Build system for native libraries
  • RmlUi: UI rendering engine with HTML/CSS-like markup
  • OpenGL ES 2.0: Graphics rendering
  • GLAD: OpenGL loader library
  • AIDL: Inter-process communication
  • Binder: Android's IPC mechanism

File Structure

  • mosis-service.cpp: Main service implementation
  • mosis-test.cpp: Test/rendering implementation
  • kernel.cpp: Core rendering engine and event processing
  • assets_manager.cpp: Asset loading utilities
  • egl_context.cpp: EGL context management
  • render_target.cpp: Framebuffer handling
  • logger.cpp: Cross-platform logging

Code Standards

  • Modern C++23 with smart pointers and RAII
  • Thread-safe operations using std::mutex
  • Resource management with proper cleanup
  • Use of std::span, std::format for modern features
  • Cross-platform compatibility through Android NDK