Release notes

Here you can find the release notes for Kanzi Monitor.

1.41.1

Compatible with Kanzi 4.1.0.

A maintenance release on the Kanzi 4.1 generation: it corrects what the distribution packages contain, trace and property serialization, main-loop task teardown, and an on-screen rendering defect. No configuration key or command name changed, and the console, JSON, and Web UI command surfaces are unchanged. Two items need attention when you update — a C++ enumerator rename and the chrometrace timestamp format. See Migration guides.

New features

Offline HTML documentation in every package

  • Offline HTML documentation now ships in every platform package, not only the Windows package. Open doc/html/index.html in the package to read it without network access (KZMON-392).

Composition-target render pass in the example application

  • The example scene now includes a composition-target render pass, so the Overwatch render-pass tools (overwatch.renderpasses, overwatch.framebuffers, overwatch.renderpasspreview and their Web UI and MCP equivalents) have a real composition target to inspect out of the box (KZMON-509).

Cubemap in the example application

  • The example scene now uses the cube-mapped material it ships, so resinfo and overwatch.resourceinfo report a real CubeMap and per-face texture preview — in the Web UI Resource Viewer, overwatch.texturepreview, and the MCP get_texture_preview tool — has actual faces to show (KZMON-524).

Changes

Performance watcher comparison enumerators renamed

  • WatcherComparison::Below and WatcherComparison::Above are renamed to BelowThreshold and AboveThreshold, because X11 headers — pulled in by the Kanzi engine on linux_x11#define Below and Above as integer constants and clobbered the old enumerator names. Only C++ code that uses the enum directly is affected; the watcher command, the Overwatch JSON, the Web UI, and the MCP add_watcher tool keep the "below" / "above" strings. See Migration guides (KZMON-504).

Notable fixes

  • Fixed profiling traces being rejected by the Perfetto trace viewer (trace_sorter_negative_timestamp_dropped) on some platforms and uptimes; the chrometrace writer now emits session-relative timestamps, so every trace starts at 0 and loads correctly. See Migration guides (KZMON-505).

  • Fixed sub-microsecond profiling scopes rendering as zero-duration events in the trace viewer; trace ts and dur are now emitted as fractional microseconds. See Migration guides (KZMON-506).

  • Fixed node-property JSON being rejected by the Monitor Web UI when a property held a non-finite float (for example the infinite GridListBoxConcept.CalculatedOffset of a not-yet-scrolled list item); non-finite floats are now serialized as null in Overwatch JSON output. See Using the Overwatch service (KZMON-507).

  • Fixed the “Frames per second” trace counter recording implausible values for zero or near-zero duration frames, typically at startup; a single such sample stretched the trace viewer’s counter auto-scaling and flattened every real FPS sample. Such samples are now skipped (KZMON-304).

  • Fixed the quit command falsely reporting executed successfully on Android, where the platform owns the process lifecycle and ending the Kanzi main loop cannot terminate the application; quit now takes no action on Android and reports that it is not supported. Windows, Linux, and QNX behaviour is unchanged. See Using the Command Processor service (KZMON-508).

  • Fixed the Monitor UI “Colored overlay” screen (basicui 1) painting a flat, near-opaque wash that hid the application scene; it renders as the intended light tint again (KZMON-305).

  • Fixed Kanzi Monitor services leaving their main-loop tasks and timers registered with the MainLoopScheduler after shutdown, and adding a second copy of every task when a service was re-initialized; services now remove exactly the entries they registered, and nothing registered by the host application, another plugin, or the Kanzi Engine is touched. The MainLoopTaskSet helper they use ships in the plugin’s include/ directory for extensions that register their own tasks. See Using the Performance service (KZMON-313, KZMON-314).

  • Corrected the “Adding custom metrics” example in Using the Performance service, which registered a recurring main-loop timer without keeping the token needed to remove it, passed an undeclared profiler value to updateMeasureAndStore(), and did not say that value must outlive the timer sampling it (KZMON-314).

  • Corrected the description of node-property reporting: overwatch.props and the MCP get_node_properties tool return a node’s locally-set property values, not all of a node’s properties. The behaviour is unchanged — the console help text, the reference tables, and the MCP server documentation now state what is actually returned (KZMON-515).

  • Fixed the vendored Perfetto SDK’s LICENSE and attribution files being absent from the distribution packages; the plugin, source-only, platform CPack, and Conan packages now all carry them — under third_party/perfetto/ in the archives, and licenses/perfetto/ in the Conan package (KZMON-319).

  • Fixed the source distribution package omitting the vendored Perfetto SDK sources, which made configuring it with -DKZMONITOR_PERFETTO_PRODUCER=ON fail; the source package now includes third_party/, so the perfetto-producer writer builds from source (KZMON-319).

  • Fixed the Linux and QNX CMake platform packages not shipping the plugin source (src/), although these packages are intended to be source-inclusive; the Windows and source-only packages were unaffected (KZMON-320).

  • Fixed incorrect console configuration key names in the RemoteConsoleClient, SerialConsoleClient, and MCP server READMEs; the documented keys are now RemoteConsoleEnabled, SerialConsoleEnabled, and RemoteConsolePort, each with its actual default value (KZMON-343).

1.41.0

First release of Kanzi Monitor for Kanzi 4.1. Compatible with Kanzi 4.1.0. A source-only distribution package is available for building the plugin from source against any supported Kanzi 4.1.x version.

Features

Kanzi Monitor introspects a stock Kanzi 4.1 application out of the box: it resolves the host scene graph and frame timing through the Kanzi 4.1 Domain (Domain::getScreens() / Domain::getFramesPerSecond()), with no injected Application or host-side registration.

Command Processor Service

  • Local console for interactive command-line access over stdin/stdout, a remote console over TCP sockets, and a serial console over serial ports (UART; Windows COM ports and POSIX serial devices).

  • Built-in commands for application control, scene graph inspection, and diagnostics, plus support for custom application-defined commands. kzinfo reports the build configuration (Debug, Profiling, or Release).

Trace Service

  • Profiling data collection with configurable sample buffers and collection intervals.

  • Output driven by a named writer registry: writers register under a name and are selected through the ActiveWriters configuration key (default chrometrace), switchable at runtime via overwatch.writers / overwatch.activatewriter / overwatch.deactivatewriter. Built-in writers:

    • chrometrace — Chrome Trace Format JSON.

    • perfetto — native Perfetto protobuf (.perfetto-trace): typed counters and debug annotations, the canonical input format for Perfetto UI and Android Performance Analyzer, via a hand-rolled encoder with no external dependency.

    • perfetto-producer — streams events to the platform tracing daemon (Android traced, Linux perfetto) so Kanzi work appears alongside ATrace and SurfaceFlinger in a single system timeline. Requires building with -DKZMONITOR_PERFETTO_PRODUCER=ON (Android binaries ship with it on).

  • 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.

Log Service

  • In-memory log buffer with on-screen presentation; the buffer size is configurable at runtime (overwatch.logconfig).

  • Console access to log entries, category filtering in the Monitor Web UI, and KanziLog trace pipeline diagnostics for troubleshooting missing log entries.

Performance Service

  • Runtime performance statistics and counters with the 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.

  • Resource inspection with CPU/GPU memory usage and metadata, including texture type / cubemap descriptors (type, face count, dimensions, format, mipmap levels) through resinfo and overwatch.resourceinfo.

  • Texture and render-pass output preview, with per-face cubemap preview (overwatch.texturepreview face=<n>); screenshot capture through scheduled framebuffer readback.

  • Font and glyph cache inspection (fontinfo / overwatch.fonts / overwatch.glyphcachepreview): font identity, style, metrics, and a live glyph-atlas preview, plus runtime glyph cache size control (overwatch.setglyphcachesize) for pressure testing.

  • Real-time performance metrics (FPS, frame times, render statistics); DataSource inspection including DataObjectList nodes; log entry access and trace control; graphics backend information; build configuration through overwatch.status.

Platform support

  • Windows (MSVC 2022)

  • Android

  • QNX 710

  • Linux

Tools

  • Monitor Web UI — browser-based GUI for remote inspection and debugging: live scene graph browsing, property editing, resource and texture preview, screen capture, render pass visualization, performance monitoring, and trace capture. This release adds a Fonts tab (font identity/metrics, live glyph-atlas preview, editable glyph cache size), a View in Perfetto button on the Trace tab, a Logs category filter with an editable buffer size, and Screen-tab overlay controls (PerformanceInfo level, Monitor UI visibility, BasicUI screen, font scale). All platform packages include a prebuilt standalone executable.

  • MCP Server — Model Context Protocol server that exposes the Overwatch command set as structured tools for AI assistants such as Claude Code and Claude Desktop. New this release: get_fonts, get_font_glyph_cache_preview, set_glyph_cache_size, get_log_config / set_log_buffer_size, and a face parameter on get_texture_preview.

  • 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.

Example project

  • The example application under examples/monitor_example/ is compatible with, and uses, the application templates from Kanzi 4.1.0. See the Kanzi 4.1.0 SDK documentation for details on the new template structure.

Changes since 1.40.0

A “what changed since the previous minor” recap. This is a notification only — see Migration guides for how to adapt, and the main docs for how to use.

  • Added: font and glyph cache inspection; runtime glyph cache size control; Perfetto trace output (perfetto / perfetto-producer) and an embedded Perfetto UI in the Web UI; cubemap / texture-type resource inspection; build-configuration reporting; Web UI log category filtering; runtime log buffer size control. (See Features above.)

  • Removed: the Application-injection API — setApplication (C++), the setNativeRuntime / setNativeApplication JNI handshakes, the NodeRegisteringScreenEnabled override, and the registerRoot / registerNativeViewRoot view-root hook (the scene graph is now resolved via Domain::getScreens()); the Android Monitor AAR (Kanzi Monitor exposes no Java API); the appfps metric and the appquit command (use fps and quit).

  • Changed: trace output is selected through the ActiveWriters writer registry — the public SampleCollector::registerWriterTask() / clearWriterTasks() symbols are removed (register via TraceWriterRegistry); the app-prefixed commands are retired (appfpsinfofpsinfo).

  • Fixed: the Web UI “Connected” indicator no longer stays green after the application exits; RemoteConsole sets SO_REUSEADDR so port 56000 is reusable immediately after a restart; screenshot-capture timeouts report an actionable hint and take_screenshot completes in a single call; texture-preview GPU readback uses the texture’s native pixel format (fixing corrupted HDR and cubemap previews); Android trace output writes to the app’s internal storage (Context.getFilesDir()) instead of /sdcard/, removing the external-storage permission requirement; the frame-duration trigger key is now spelled WritingOnFrameDurationThreshold (the 1.40.0 misspelling WritingOnFrameDurationTreshold remains a deprecated alias); the non-functional graphics API call logging commands (graphicslog / overwatch.graphicslog and the set_graphics_logging / get_graphics_logging MCP tools) — carried over from the 1.9.x line but dead on Kanzi 4.x, which dropped the underlying engine API — are removed, so they no longer appear available when they cannot work.

See also

Migration guides

Known issues