)]}'
{
  "commit": "1d7e5b26e7011515f6e72bd4998b460f0f88717d",
  "tree": "06aa37d3de2be8874e5c411a7dbe93290aab4ef6",
  "parents": [
    "0a9d51eb11a075b60e201e2f7617b6dccdf0ea64"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Wed Apr 01 09:29:44 2026 +0000"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Wed Apr 01 22:22:07 2026 +0100"
  },
  "message": "perfetto: Add high-performance Java data source and ProtoWriter\n\nAdd a zero-allocation Java data source API for writing custom trace\ndata from performance-critical code paths (e.g., frame rendering).\n\nThe core of this is ProtoWriter, a pure Java protobuf encoder that\nwrites directly to a pre-allocated thread-local byte buffer using\nthe same 4-byte redundant varint trick as C protozero for nested\nmessage length fields. This enables single-pass encoding without\nsize pre-computation.\n\nArchitecture:\n- ProtoWriter: zero-alloc proto encoder (varint, fixed, string,\n  nested messages). ASCII fast path for strings. UTF-8 fallback\n  with pre-allocated scratch buffer.\n- PerfettoDataSource: base class with volatile enabled flag (~1ns\n  disabled check) and ThreadLocal TraceContext.\n- TraceContext: per-thread writer + optional InternPool. Single\n  JNI call (nativeWritePacketToAllInstances) writes encoded bytes\n  to all active tracing session instances via the C SDK stream\n  writer, which handles chunk boundaries and patching.\n- InternPool: optional string interning with lazy incremental\n  state checking (no JNI overhead when interning is unused).\n\nThe JNI layer correctly handles:\n- Multi-instance: iterates all active sessions, writes to each.\n- Enabled flag: uses native enabled_ptr to avoid disabling when\n  other instances remain active.\n- Incremental state: tracks per-instance clear flags for interning.\n- Large packets: delegates to PerfettoStreamWriterAppendBytes\n  which handles cross-chunk writes and size field patching.\n\nBenchmarks (Java program, real JNI, real Perfetto shmem, Linux):\n  Full E2E encode + JNI + shmem (basic):  ~112 ns/op\n  Full E2E encode + JNI + shmem (+ arg):  ~123 ns/op\n  ProtoWriter encode only:                 ~14 ns/op\n  JNI + shmem only (pre-encoded):          ~95 ns/op\nvs C SDK raw data source (same-size pkt):  ~77 ns/op (1.45x)\nvs C SDK track event LL:                  ~192 ns/op\nvs existing Java track event HL:          ~179 ns/op\n\nBug: N/A\nTest: perfetto_integrationtests --gtest_filter\u003d\"JavaDataSourceTest.*\"\nTest: ProtoWriterTest, InternPoolTest, FullTraceE2ETest (JUnit4)\nChange-Id: I0000000000000000000000000000000000000000\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7493b53899eb4feeb9361e255a629eada33bdb40",
      "old_mode": 33188,
      "old_path": "Android.bp",
      "new_id": "912a29251122bc5b2ac20090a3d3f7fadfa35bf4",
      "new_mode": 33188,
      "new_path": "Android.bp"
    },
    {
      "type": "modify",
      "old_id": "7dfdece2b3e4275c0fc4fd73ec005b1a98230c64",
      "old_mode": 33188,
      "old_path": "gn/perfetto_integrationtests.gni",
      "new_id": "0c9d1024731637a4d3161abc4fa5bd4e4c33dbb0",
      "new_mode": 33188,
      "new_path": "gn/perfetto_integrationtests.gni"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1cbb2f9660019c940c2181e12bcce710fff6a1ac",
      "new_mode": 33188,
      "new_path": "src/java_datasource/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "449400c5afcb93ab40b0b8c74b45b8732493db6e",
      "new_mode": 33188,
      "new_path": "src/java_datasource/bench/PerfettoBench.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "66fc85ad6418b6ab74afdfbb89cbcbbadfc91bd6",
      "new_mode": 33188,
      "new_path": "src/java_datasource/bench/perfetto_bench_jni.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ee5c2a8e0b03fd3baa059aa0d1960070c409c857",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/AndroidManifest.xml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2aad09ee8e974c8581ab3b1406e7f36d86ee47b4",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "15704d7ddc595634e61c34d91fb816352d4298b2",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/dev/perfetto/sdk/InternPool.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2c9b2277ef84b609979c0575e31773be130f2fd9",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/dev/perfetto/sdk/PacketBuilder.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "24509da8062f1dd5cd0d5a88724407dbe3295957",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/dev/perfetto/sdk/PerfettoDataSource.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a9e68107472c678142c8fc2aa31f5ca6e4e92fbe",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/dev/perfetto/sdk/ProtoWriter.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6e08d91086000c36a5289c50203516c7a5a9e684",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/dev/perfetto/sdk/TraceContext.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5a0086b54658bf43c5daebfad738e85ae32b0153",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/main/perfetto-datasource-framework-jarjar-rules.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5fa5dcbebadd06a65fa986ba54a7739b54d0195c",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/test/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5c023996ae0316a5b637f9d8b22fc72e4c07126a",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/test/dev/perfetto/sdk/InternPoolTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f7e61843e1d249456a09037bd644a6e7b60d822a",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/test/dev/perfetto/sdk/PacketBuilderTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6ff8d59cdf978a7d5cc85cbb601c28538a39ee90",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/test/dev/perfetto/sdk/ProtoWriterTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ddb9833fa67bd3157c8381f56055ddfaaf2b906e",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java/test/dev/perfetto/sdk/TraceEncodingTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b6202733437ab8a1585ca18c2620843bfafc1f0c",
      "new_mode": 33188,
      "new_path": "src/java_datasource/java_datasource_integrationtest.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "918c916420bf7d2491d0901a0942bbc54cf65fea",
      "new_mode": 33188,
      "new_path": "src/java_datasource/jni/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8309fd56a4a35cecaac3649b821f25998fbdd590",
      "new_mode": 33188,
      "new_path": "src/java_datasource/jni/perfetto_datasource_jni.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ba68fcec36f650a3071d2716ffb7044367b599d4",
      "new_mode": 33188,
      "new_path": "src/java_datasource/jni/perfetto_datasource_jni.h"
    }
  ]
}
