3.9 KiB
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
IMosisServiceinterface for touch events and initialization - Listener pattern with
IMosisListenerfor 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
- Initialization: Service connects to test layer, creates EGL context
- Buffer Management: Hardware buffers allocated and shared between layers
- Event Processing: Touch events processed and forwarded to Kernel
- Rendering Loop: Continuous rendering with frame synchronization
- 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 implementationmosis-test.cpp: Test/rendering implementationkernel.cpp: Core rendering engine and event processingassets_manager.cpp: Asset loading utilitiesegl_context.cpp: EGL context managementrender_target.cpp: Framebuffer handlinglogger.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