Trends Telemetry
Capture native Android Java heap, native heap, RSS, FPS, battery, open-file-handle, JNI-reference, and custom metric telemetry.
Android trends telemetry records numeric samples on metric channels.
Built-In Channels
The native Android runtime can record:
- Java heap
- native heap
- RSS
- FPS through Android frame callbacks
- battery level when enabled
- JNI global-reference count when enabled
- process open-file-handle count when enabled
- app-defined channels and metric streams
Custom Metrics
import ai.ansight.Ansight
import ai.ansight.runtime.AnsightChannel
import ai.ansight.runtime.AnsightRuntime
Ansight.registerMetricChannel(
AnsightChannel(
id = 42,
name = "Queue Depth",
colorHex = "#FF9500",
unit = "items",
type = "queue",
),
)
AnsightRuntime.metric(17, channel = 42)
For sampled values:
import ai.ansight.runtime.AnsightMetricSampler
import ai.ansight.runtime.AnsightMetricStream
Ansight.registerMetricStream(
AnsightMetricStream(
channel = AnsightChannel(43, "Cache Items", unit = "items", type = "cache"),
sampler = AnsightMetricSampler { cache.itemCount.toLong() },
),
)
Reserved channel ids are 0-7 for built-in memory, FPS, lifecycle, battery, JNI reference count, and open file handles, plus 255 for unspecified events. App-defined channels must not reuse them.
Runtime Resource Channels
Both diagnostic channels are off by default:
val options = AnsightOptions.createBuilder()
.withJniReferenceCountTracking()
.withOpenFileHandleTracking()
.build()
withJniReferenceCountTracking() emits channel 6 and is useful for spotting growth in JNI global references. withOpenFileHandleTracking() emits channel 7 from the current process descriptor count. These sampled channels are lightweight trend signals; use JNI Reference Diagnostics or File Descriptor Diagnostics when a point-in-time investigation needs individual roots or descriptors.
Runtime Sampling
AnsightRuntime.captureBuiltInTelemetrySample()
Battery telemetry is opt-in:
val options = AnsightOptions.createBuilder()
.withBatteryLevel()
.build()