Release notes¶
Here you can find the release notes for Kanzi Monitor.
1.41.0¶
First release of Kanzi Monitor for Kanzi 4.1. Compatible with Kanzi 4.1.0.
New features¶
Font and glyph cache inspection¶
The
fontinfocommand shows all active FontRuntime instances with font identity (family, file), style definition (size, style, weight, layout, rendering), glyph cache state (texture dimensions, GPU memory, generation), and which nodes use each font.The Overwatch service exposes font data through two new commands:
overwatch.fontsreturns all active FontRuntimes as JSON with style, glyph cache, metrics, and node info.overwatch.glyphcachepreviewreturns a base64-encoded RGBA preview of a glyph cache texture.
The Monitor Web UI adds a Fonts tab for browsing active fonts, viewing font identity and style details, font metrics (line height, ascender, descender), glyph cache memory, and live glyph atlas texture preview.
The MCP server adds
get_fontsandget_font_glyph_cache_previewtools for AI-assisted font inspection.When the node tree is not available, all font inspection interfaces show an informational message instead of empty results.
Runtime glyph cache size control¶
overwatch.setglyphcachesize <width> <height>sets the glyph cache texture size for newly created caches at runtime, enabling glyph cache pressure testing without recompiling the application.The command is gated behind the
OverwatchPropertyChangeEnabledconfiguration flag. A warning is logged when the cache size is set below 128x128.overwatch.fontsincludes aconfiguredGlyphCacheSizefield when the size has been overridden, and auniqueCacheCountfield showing the number of distinct glyph cache textures. GPU memory totals are deduplicated when multiple fonts share the same cache.The Monitor Web UI Fonts tab shows the current glyph cache size as editable inputs, with visual feedback on change.
The MCP server adds a
set_glyph_cache_sizetool.
Build configuration and diagnostics reporting¶
The
kzinfocommand now reports the build configuration (Debug, Profiling, or Release).The
overwatch.statusJSON response includes abuildConfigfield for programmatic access. The Monitor Web UI uses it to surface build context.
Log category filtering¶
The Monitor Web UI Logs tab adds a category filter dropdown to show or hide log entries by category (e.g.
generic,debug). Filters apply to both the on-screen display and the downloaded .txt file.
Embedded Perfetto UI in the Monitor Web UI Trace tab¶
The Monitor Web UI Trace tab adds a View in Perfetto button that opens the most recently fetched trace directly in Perfetto UI (new browser tab) via Perfetto’s official postMessage embedding protocol. Closes the capture → analyze loop without leaving the Monitor Web UI: capture a chrometrace JSON or a
.perfetto-trace(via Fetch .perfetto-trace), then click View in Perfetto.Trace bytes stay in the browser —
ui.perfetto.devis a static SPA that parses the trace locally via the WASMtrace_processor. Nothing is uploaded.The button prefers the
.perfetto-tracebinary when both formats are loaded (its typed counters and debug annotations render in Perfetto UI with higher fidelity than the JSON form).
Named, dynamically-controllable trace writers¶
The Trace Service now drives output through a writer registry. Each trace writer registers under a name with a human-readable description; the active set is selected via configuration at startup and can be changed at runtime.
New configuration key
ActiveWriters(comma-separated): lists writers to activate at startup. Default ischrometraceif unset.New built-in writer
chrometrace— Chrome Trace Format JSON, the existing trace output. This replaces the previously-implicit single output mode.New built-in writer
perfetto— native Perfetto protobuf (.perfetto-trace). Smaller on disk thanchrometrace, supports typed counters and debug annotations, and is the canonical input format for Perfetto UI and Android Performance Analyzer. Implemented via a hand-rolled, header-only protobuf encoder — no externallibprotobufor Perfetto SDK dependency. Activate withActiveWriters = perfettoorActiveWriters = chrometrace,perfettoto write both formats simultaneously. Carries the full Monitor sample set, including resource profiling samples.New built-in writer
perfetto-producer— streams events through the in-process Perfetto producer SDK to the platform tracing daemon (Androidtraced, Linuxperfetto). No file on disk; events appear in system traces captured by Android Performance Analyzer or theperfettoCLI alongside ATrace, SurfaceFlinger, and other system producers — giving a single timeline that correlates Kanzi work with the rest of the device. Requires the plugin to be built with-DKZMONITOR_PERFETTO_PRODUCER=ON(the pre-built Android binaries already are; building from source defaults to off). The vendored Perfetto SDK lives underthird_party/perfetto/(Apache 2.0). NewPerfettoProducerCaptureSecondsconfig key drives an in-process Perfetto session at plugin load, useful on Windows and embedded targets where no platform tracing daemon is available. See Using the Profiling Trace service for the fullperfetto-producerworkflow.The example app’s
AndroidManifest.xmldeclares<profileable android:shell="true" />so shell-side profilers (Android Performance Analyzer, theperfettoCLI) can attach to release builds without requiringdebuggable.New Overwatch commands:
overwatch.writerslists registered writers and their active state as JSON;overwatch.activatewriter <name>andoverwatch.deactivatewriter <name>toggle them at runtime.The Trace Service is now agnostic to what specific writers do — adding a new writer (e.g. a Perfetto protobuf writer or a network stream sink) does not require any change to the Trace Service or to the configuration parser.
Migration / API change: the public
SampleCollector::registerWriterTask()andSampleCollector::clearWriterTasks()symbols are removed. Custom writers in downstream integrations now register viaTraceWriterRegistry::registerWriter(name, description, fn)and are activated by name inActiveWritersor at runtime viaoverwatch.activatewriter. See Migration guides for the migration recipe.
Application injection retired¶
Kanzi Monitor now resolves the Kanzi scene graph and main loop entirely through the Kanzi 4.1
Domain: it enumerates the host’s Screens viaDomain::getScreens()and reads frame timing viaDomain::getFramesPerSecond(). No built-in command or service requires an injected Application.A stock single-screen Kanzi 4.1 application — and droidfw’s multiple views — are introspectable out of the box (scene tree, fonts, screenshots, performance metrics, and the on-screen Monitor UI overlay
ui) with nosetApplicationcall and no Startup Prefab registration. The example app no longer callssetApplication.The
app-prefixed commands are retired:appfpsinfobecomesfpsinfo(Domain-based, identical value), andappquitis removed in favor of the existingquitcommand, which stops the same main loop. See Migration guides.Removed: the
setApplication/ native-runtime injection API (the C++ call and thesetNativeRuntime/setNativeApplicationJNI handshakes), theNodeRegisteringScreenEnabledScreen-metaclass override that auto-registered node trees, and theregisterRoot/KanziMonitorPlugin.registerNativeViewRootview-root registration hook (Domain::getScreens()enumerates every host view root — including a programmatically-created one on droidfw — so explicit registration is no longer needed). Theappfpsperformance metric is also removed — it duplicatedfps(both read the same Domain frame-time queue). See Migration guides.
Cubemap and texture type resource inspection¶
The
resinfocommand annotates each texture with a compact descriptor — texture type, face count, dimensions, format, and mipmap levels — making cubemaps distinguishable from 2D textures (for example,[CubeMap 6f 512x512 R8G8B8A8_UNORM mips:10]).overwatch.resourceinfoaddstype,faceCount,sliceCount, andisCubemapfields to itstextureInfoblock. The additions are backward compatible; existing fields are unchanged.The Monitor Web UI resource detail view shows a Type row for every texture, and Faces and Slices rows for cubemap and array textures.
The MCP server
get_resource_infotool surfaces the new fields with no server-side change.overwatch.texturepreviewaccepts an optionalface=<n>argument (0–5) to read an individual cubemap face. The Monitor Web UI shows all six faces of a cubemap as a thumbnail strip in the resource detail view; selecting a face enlarges it below, and downloads are named per face. The MCP serverget_texture_previewtool gains a matchingfaceparameter.
Removed features¶
Graphics API call logging¶
The runtime graphics API call logging feature from Kanzi Monitor 1.9.1 (the
graphicslogandoverwatch.graphicslogcommands, the Monitor Web UI graphics logging controls, and theset_graphics_loggingandget_graphics_loggingMCP server tools) is not available in this release. Kanzi 4.1 removes the underlying engine API. The feature may return in a future Kanzi release.
Bug fixes¶
Monitor Web UI: the “Connected” status indicator no longer stays green after the Kanzi application exits. The indicator now reflects the bridge → Monitor link state (driven by a
monitorConnectedfield the bridge tags on every response) and a 5 soverwatch.statusheartbeat surfaces disconnects without user action.RemoteConsole:
createSocket()now setsSO_REUSEADDRon the listen socket beforebind(). Without it, port 56000 sat in TIME_WAIT for ~60-120 s after the previous instance exited, and the next app launch failed to bind — leaving RemoteConsole dark and breaking reconnect from the Web UI, RemoteConsoleClient, and MCP server.Screenshot capture timeouts are now actionable. When
overwatch.screenshotcannot complete because the render stage never fires (for example, in Studio Preview with Allow preview to update if not in focus disabled), the Monitor Web UI and the MCP server report a hint pointing at that setting instead of a bare timeout. The MCPtake_screenshottool now also polls the two-phase capture protocol internally (up to a 5 s bound), so a single call reliably returns the image instead of surfacing an intermediatependingstatus that required a second call.Texture preview GPU readback now uses the texture’s native pixel format instead of assuming RGBA8. The hardcoded RGBA8 readback buffer was mis-sized for textures with a different pixel stride (for example HDR
R16G16B16A16_SFLOAT, which is 8 bytes per texel), producing corrupted previews and, for cubemaps, aliased faces.overwatch.texturepreviewnow reads back in the source format and converts to RGBA8 for display, matching the CPU host-copy path.
Packaging changes¶
Android: Kanzi Monitor no longer ships an AAR. The plugin exposes no Java API — Monitor discovers the scene graph through
Domain::getScreens()— so there is nothing for an AAR to carry. Buildlibkzmonitor.sointo your APK from yourkanzinativemodule by passing-DKANZI_LINK_KZMONITOR=ONto its CMake configuration; the engine.sofiles come in transitively through your existing Kanzi runtime AAR dependencies. See Integrating Kanzi Monitor as a prebuilt library for the full integration steps.
Example project¶
The example application under
examples/monitor_example/is compatible with, and uses, the application templates from Kanzi 4.1.0 Alpha 2. See the Kanzi 4.1.0 Alpha 2 SDK documentation for details on the new template structure.
See also¶
1.40.0¶
Initial release of Kanzi Monitor for Kanzi 4.0. Compatible with Kanzi 4.0.0. A source-only distribution package is available for building the plugin from source against any supported Kanzi 4.0.x version.
Features¶
Command Processor Service¶
Local console for interactive command-line access over stdin/stdout.
Remote console for command access over TCP sockets.
Serial console for command access over serial ports (UART). Supports Windows COM ports and POSIX serial devices.
Built-in commands for application control, scene graph inspection, and diagnostics.
Support for custom application-defined commands.
Trace Service¶
Profiling data collection with configurable sample buffers and collection intervals.
JSON trace export compatible with the Perfetto trace viewer.
Configurable automatic trace output on exit, on timer, or when frame duration exceeds a threshold.
UI Service¶
On-screen overlay with basic, report, and control screen modes.
Configurable font scaling for high-DPI devices.
Touch and key input support.
Log Service¶
In-memory log buffer with on-screen presentation.
Console access to log entries.
KanziLog trace pipeline diagnostics for troubleshooting missing log entries.
Performance Service¶
Runtime performance statistics and counters with PerformanceInfo profiling category.
Performance metric watchers that trigger commands when thresholds are crossed.
Overwatch Service¶
JSON-based remote introspection of the scene graph, resources, rendering, data sources, and performance.
Scene graph browsing with configurable depth limiting.
Property querying and modification for any node in the scene graph.
Resource inspection with CPU/GPU memory usage and detailed metadata.
Texture preview and render pass output preview.
Screenshot capture with scheduled framebuffer readback. Images are vertically flipped by default to match screen orientation (GPU framebuffer data is bottom-up).
Real-time performance metrics including FPS, frame times, and render statistics.
DataSource inspection including
DataObjectListnodes with item data.Log entry access and trace profiling control.
Graphics backend information including device, API version, driver version, and feature list.
Tools¶
Monitor Web UI — browser-based GUI for remote inspection and debugging of Kanzi applications. Connects over TCP or serial and offers live scene graph browsing, property editing, resource and texture preview, screen capture, render pass visualization, performance monitoring, and trace capture. The Performance tab includes a SuspendWhenIdle status indicator and toggle for controlling the engine main loop scheduling. The Screen tab includes overlay controls for the PerformanceInfo level, Monitor UI visibility (per node tree), BasicUI screen selection, and font scale. Controls auto-detect which commands are available. All platform packages include a prebuilt standalone executable.
MCP Server — Model Context Protocol server that enables AI assistants such as Claude Code and Claude Desktop to inspect and control a running Kanzi application. Connects over TCP or serial and exposes all Overwatch commands as structured tools. Includes
get_idle_suspendandset_idle_suspendtools for controlling the engine main loop SuspendWhenIdle setting. Includes tools for UI overlay control:get_ui_visibility,toggle_ui(with per-node-tree support),get_basicui_screens,set_basicui_screen,get_font_scale, andset_font_scale.RemoteConsoleClient — command-line TCP client for the remote console. Prebuilt for Windows and Linux.
SerialConsoleClient — command-line serial client for the serial console. Prebuilt for Windows and Linux.
Platform support¶
Windows (MSVC 2022)
Android (NDK + AAR)
QNX 710
Linux