Skip to content

Stream on-device-debug symbols from the device (fix cloud/Windows iOS debugging)#5341

Merged
shai-almog merged 1 commit into
masterfrom
ios-ondevice-dynamic-symbols
Jul 7, 2026
Merged

Stream on-device-debug symbols from the device (fix cloud/Windows iOS debugging)#5341
shai-almog merged 1 commit into
masterfrom
ios-ondevice-dynamic-symbols

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Problem (issue #5333)

iOS on-device debugging (cn1:ios-on-device-debugging) only worked for local Mac builds. The translator wrote cn1-symbols.txt into the build output; for a cloud build that file is produced server-side and never reaches the developer's target/, so the proxy's autodetect always failed:

No cn1-symbols.txt found under ...\target. The translator only emits it when
-Dcodename1.arg.ios.onDeviceDebug=true is set.

The reporter is on Windows, where a cloud build is the only option — so the feature was simply unusable for them. As a secondary symptom, because the proxy never started, the device's connect retry timed out after ~10s and booted the app anyway, so waitForAttach appeared to do nothing.

Fix

Symbols are now downloaded from the device over the wire — never a local file.

  • The translator embeds the symbol table (gzip-compressed) as a generated cn1_debug_symbols.c that links into the app binary.
  • The device serves it via a new CMD_GET_SYMBOLS / EVT_SYMBOLS wire pair (chunked, 256 KB).
  • The proxy fetches, inflates, and builds its SymbolTable on connect (EVT_HELLO).

This works identically for cloud builds on Windows/Linux — the symbols travel inside the app, so wherever the app runs, the proxy can get them.

waitForAttach blocking now never times out. The device retries the connect forever (and reconnects if the proxy drops before the IDE attaches) when waitForAttach is set; the bounded ~10s give-up applies only when not waiting.

How the blob reaches the binary

Parser.writeOutput(srcRoot) writes cn1_debug_symbols.c alongside the translated per-class .c files. ByteCodeTranslator then globs srcRoot (srcRoot.list(...), run after writeOutput) to build the pbxproj source list, so the file is added to the PBXSourcesBuildPhase and compiled/linked like any other translated source. Its strong cn1_debug_symbols_data()/_length() symbols satisfy the weak externs in cn1_debugger.m.

Changes

  • WireProtocol / cn1_debugger: CMD_GET_SYMBOLS 0x11, EVT_SYMBOLS 0x90 (chunked).
  • Parser: emit gzipped cn1_debug_symbols.c (blob + accessors) instead of the .txt sidecar; #include "cn1_globals.h" so the CN1_ON_DEVICE_DEBUG guard sees the macro (it's a header #define, not a project macro).
  • cn1_debugger.m: serve the blob; weak-import the accessors; never-timeout / reconnecting listener.
  • Proxy: SymbolTable.load(InputStream); DeviceConnection fetches+inflates on HELLO then fires onSymbolsonHello; JdwpServer late-binds symbols and gates VM_START on their arrival (JDWP clients wait for VM_START before enumerating classes, so no null table); sendVmStart made idempotent per session; --symbols flag removed.
  • IosOnDeviceDebuggingMojo: drop the cn1-symbols.txt autodetect.

Docs are intentionally unchanged (they never referenced the sidecar file).

Verification

  • cn1-debug-proxy, codenameone-maven-plugin, and ByteCodeTranslator all compile.
  • gzip ↔ SymbolTable.load round-trip passes.
  • The emitted C compiles with clang (with the header guard) and gunzips back to the exact original payload.
  • Not verified: a real on-device build (requires a cloud build or Xcode).

Deployment note

Cloud rollout requires the bundled ByteCodeTranslator.jar in the build server to be rebuilt from this translator change; the BuildDaemon itself needs no source edit (it already passes -Dcn1.onDeviceDebug=true and compiles the whole translated dir).

🤖 Generated with Claude Code

…ugging)

iOS on-device debugging (cn1:ios-on-device-debugging) only worked for local
Mac builds. The translator wrote cn1-symbols.txt into the build output, which
for a cloud build is produced server-side and never reaches the developer's
target/ — so the proxy's autodetect always failed with "No cn1-symbols.txt
found" (issue #5333). And because the proxy never started, the device's
connect retry timed out after ~10s and booted the app anyway, so the
waitForAttach block appeared to do nothing.

Fix: the proxy now downloads the symbol table from the device over the wire —
no local file. The translator embeds the table (gzip-compressed) as a
generated C source that links into the app; the device serves it via a new
CMD_GET_SYMBOLS / EVT_SYMBOLS wire pair; the proxy fetches, inflates, and
builds its SymbolTable on connect. This works identically for cloud builds on
Windows/Linux.

Also make waitForAttach blocking never time out: the device retries the
connect forever (and reconnects if the proxy drops before the IDE attaches)
when waitForAttach is set; the bounded ~10s give-up now applies only when not
waiting.

- WireProtocol/cn1_debugger: CMD_GET_SYMBOLS 0x11, EVT_SYMBOLS 0x90 (chunked)
- Parser: emit cn1_debug_symbols.c (gzipped blob + accessors) instead of the
  .txt sidecar; #include "cn1_globals.h" so the CN1_ON_DEVICE_DEBUG guard sees
  the macro. Picked up by the pbxproj source glob and compiled into the binary
- cn1_debugger: serve the blob; weak-import the accessors; never-timeout connect
- Proxy: SymbolTable.load(InputStream); DeviceConnection fetches+inflates on
  HELLO then fires onSymbols->onHello; JdwpServer late-binds symbols and gates
  VM_START on their arrival; sendVmStart made idempotent; --symbols flag removed
- IosOnDeviceDebuggingMojo: drop the cn1-symbols.txt autodetect

Verified: proxy, plugin and translator compile; gzip<->SymbolTable round-trip
and clang-compiled C-blob gunzip round-trip both pass. Not verified: a real
on-device build (needs cloud/Xcode). Cloud rollout needs the bundled
ByteCodeTranslator.jar rebuilt from this change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

✅ ByteCodeTranslator Quality Report

Test & Coverage

  • Tests: 395 total, 0 failed, 14 skipped

Benchmark Results

  • Execution Time: 17948 ms

  • Hotspots (Top 20 sampled methods):

    • 24.43% com.codename1.tools.translator.Parser.addToConstantPool (389 samples)
    • 15.89% java.util.ArrayList.indexOf (253 samples)
    • 3.33% java.lang.StringBuilder.append (53 samples)
    • 3.20% com.codename1.tools.translator.ByteCodeClass.fillVirtualMethodTable (51 samples)
    • 2.45% com.codename1.tools.translator.BytecodeMethod.equals (39 samples)
    • 2.39% org.objectweb.asm.tree.analysis.Analyzer.findSubroutine (38 samples)
    • 2.26% org.objectweb.asm.tree.analysis.Analyzer.analyze (36 samples)
    • 2.01% com.codename1.tools.translator.Parser.classIndex (32 samples)
    • 1.44% org.objectweb.asm.ClassReader.readCode (23 samples)
    • 1.38% com.codename1.tools.translator.BytecodeMethod.optimize (22 samples)
    • 1.32% com.codename1.tools.translator.BytecodeMethod.appendCMethodPrefix (21 samples)
    • 1.26% java.lang.Object.hashCode (20 samples)
    • 1.19% java.util.HashMap.hash (19 samples)
    • 1.13% java.util.TreeMap.getEntry (18 samples)
    • 1.07% java.lang.System.identityHashCode (17 samples)
    • 0.94% java.util.IdentityHashMap$KeySet.toArray (15 samples)
    • 0.94% com.codename1.tools.translator.BytecodeMethod.addInstruction (15 samples)
    • 0.88% java.lang.String.equals (14 samples)
    • 0.88% sun.nio.fs.UnixNativeDispatcher.open0 (14 samples)
    • 0.88% java.io.UnixFileSystem.getBooleanAttributes0 (14 samples)
  • ⚠️ Coverage report not generated.

Static Analysis

  • ✅ SpotBugs: no findings (report was not generated by the build).
  • ⚠️ PMD report not generated.
  • ⚠️ Checkstyle report not generated.

Generated automatically by the PR CI workflow.

@shai-almog shai-almog linked an issue Jul 6, 2026 that may be closed by this pull request
@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 139 screenshots: 139 matched.
Native Linux port (x64), GTK3/Cairo/Pango, ParparVM bytecode-to-C (no JVM): the hellocodenameone screenshot suite rendered by a native ELF built + run on the GitHub x64 runner. Baseline: scripts/linux/screenshots.

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 139 screenshots: 139 matched.
Native Linux port (arm64), GTK3/Cairo/Pango, ParparVM bytecode-to-C (no JVM): the hellocodenameone screenshot suite rendered by a native ELF built + run on the GitHub arm64 runner. Baseline: scripts/linux/screenshots-arm.

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 138 screenshots: 138 matched.
Native Windows port, REAL shipping pipeline: the hellocodenameone screenshot suite rendered by a binary CROSS-COMPILED on Linux (clang-cl + xwin, WebView2 linked) and RUN on a Windows x64 runner. Compared against the in-repo baseline in scripts/windows/screenshots.

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 70ms / native 4ms = 17.5x speedup
SIMD float-mul (64K x300) java 72ms / native 5ms = 14.4x speedup
SIMD kernel correctness PASS (native result == scalar reference)

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 138 screenshots: 138 matched.
Native Windows port (x64 / Intel-AMD): full hellocodenameone screenshot suite rendered offscreen with Direct2D/DirectWrite, plus the real benchmarks (base64 native/CN1/SIMD, image createMask/applyMask/modifyAlpha/PNG/JPEG, SSE2 SIMD kernels). Compared against the in-repo baseline in scripts/windows/screenshots.

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 68ms / native 2ms = 34.0x speedup
SIMD float-mul (64K x300) java 78ms / native 2ms = 39.0x speedup
SIMD kernel correctness PASS (native result == scalar reference)

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 142 screenshots: 142 matched.

Native Android coverage

  • 📊 Line coverage: 9.95% (10036/100849 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.79% (49352/561477), branch 4.33% (2216/51128), complexity 4.37% (2366/54176), method 6.63% (1867/28151), class 10.63% (425/3999)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.95% (10036/100849 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.79% (49352/561477), branch 4.33% (2216/51128), complexity 4.37% (2366/54176), method 6.63% (1867/28151), class 10.63% (425/3999)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend scalar fallback (no native SIMD)
SIMD int-add (64K x300) java 224ms / native 279ms = 0.8x speedup
SIMD float-mul (64K x300) java 160ms / native 110ms = 1.4x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path gated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode 224.000 ms
Base64 CN1 decode 348.000 ms
Base64 native encode 844.000 ms
Base64 encode ratio (CN1/native) 0.265x (73.5% faster)
Base64 native decode 734.000 ms
Base64 decode ratio (CN1/native) 0.474x (52.6% faster)
Image encode benchmark status skipped (SIMD unsupported)

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs [Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 133 screenshots: 133 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 138 screenshots: 138 matched.
Native Windows port (arm64 / Apple Silicon - Arm): full hellocodenameone screenshot suite rendered offscreen with Direct2D/DirectWrite, plus the real benchmarks (base64 native/CN1/SIMD, image createMask/applyMask/modifyAlpha/PNG/JPEG, NEON SIMD kernels). Compared against the in-repo baseline in scripts/windows/screenshots.

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 61ms / native 3ms = 20.3x speedup
SIMD float-mul (64K x300) java 60ms / native 3ms = 20.0x speedup
SIMD kernel correctness PASS (native result == scalar reference)

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 216 screenshots: 216 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 140 screenshots: 140 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 231 seconds

Build and Run Timing

Metric Duration
Simulator Boot 62000 ms
Simulator Boot (Run) 0 ms
App Install 12000 ms
App Launch 3000 ms
Test Execution 1517000 ms

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 237ms / native 4ms = 59.2x speedup
SIMD float-mul (64K x300) java 410ms / native 3ms = 136.6x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path active (NEON-accelerated)
Base64 CN1 encode 1647.000 ms
Base64 CN1 decode 1450.000 ms
Base64 native encode 3855.000 ms
Base64 encode ratio (CN1/native) 0.427x (57.3% faster)
Base64 native decode 2147.000 ms
Base64 decode ratio (CN1/native) 0.675x (32.5% faster)
Base64 SIMD encode 404.000 ms
Base64 encode ratio (SIMD/CN1) 0.245x (75.5% faster)
Base64 SIMD decode 214.000 ms
Base64 decode ratio (SIMD/CN1) 0.148x (85.2% faster)
Base64 encode ratio (SIMD/native) 0.105x (89.5% faster)
Base64 decode ratio (SIMD/native) 0.100x (90.0% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 45.000 ms
Image createMask (SIMD on) 28.000 ms
Image createMask ratio (SIMD on/off) 0.622x (37.8% faster)
Image applyMask (SIMD off) 179.000 ms
Image applyMask (SIMD on) 170.000 ms
Image applyMask ratio (SIMD on/off) 0.950x (5.0% faster)
Image modifyAlpha (SIMD off) 684.000 ms
Image modifyAlpha (SIMD on) 523.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.765x (23.5% faster)
Image modifyAlpha removeColor (SIMD off) 605.000 ms
Image modifyAlpha removeColor (SIMD on) 250.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.413x (58.7% faster)

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

iOS screenshot updates

Compared 137 screenshots: 136 matched, 1 missing actual.

  • GoogleWebMap — missing actual screenshot. Actual screenshot missing (test did not produce output).

    No preview available for this screenshot.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 457 seconds

Build and Run Timing

Metric Duration
Simulator Boot 72000 ms
Simulator Boot (Run) 2000 ms
App Install 16000 ms
App Launch 7000 ms
Test Execution 717000 ms

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 321ms / native 11ms = 29.1x speedup
SIMD float-mul (64K x300) java 92ms / native 6ms = 15.3x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path active (NEON-accelerated)
Base64 CN1 encode 702.000 ms
Base64 CN1 decode 445.000 ms
Base64 native encode 1633.000 ms
Base64 encode ratio (CN1/native) 0.430x (57.0% faster)
Base64 native decode 694.000 ms
Base64 decode ratio (CN1/native) 0.641x (35.9% faster)
Base64 SIMD encode 166.000 ms
Base64 encode ratio (SIMD/CN1) 0.236x (76.4% faster)
Base64 SIMD decode 235.000 ms
Base64 decode ratio (SIMD/CN1) 0.528x (47.2% faster)
Base64 encode ratio (SIMD/native) 0.102x (89.8% faster)
Base64 decode ratio (SIMD/native) 0.339x (66.1% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 55.000 ms
Image createMask (SIMD on) 1.000 ms
Image createMask ratio (SIMD on/off) 0.018x (98.2% faster)
Image applyMask (SIMD off) 333.000 ms
Image applyMask (SIMD on) 230.000 ms
Image applyMask ratio (SIMD on/off) 0.691x (30.9% faster)
Image modifyAlpha (SIMD off) 207.000 ms
Image modifyAlpha (SIMD on) 215.000 ms
Image modifyAlpha ratio (SIMD on/off) 1.039x (3.9% slower)
Image modifyAlpha removeColor (SIMD off) 446.000 ms
Image modifyAlpha removeColor (SIMD on) 316.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.709x (29.1% faster)

@shai-almog

shai-almog commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 138 screenshots: 138 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator Author

Mac native screenshot updates

Compared 140 screenshots: 139 matched, 1 missing actual.

  • Gpu3DTexturedCube — missing actual screenshot. Actual screenshot missing (test did not produce output).

    No preview available for this screenshot.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 140 seconds

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 53ms / native 3ms = 17.6x speedup
SIMD float-mul (64K x300) java 54ms / native 3ms = 18.0x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path active (NEON-accelerated)
Base64 CN1 encode 281.000 ms
Base64 CN1 decode 199.000 ms
Base64 native encode 964.000 ms
Base64 encode ratio (CN1/native) 0.291x (70.9% faster)
Base64 native decode 647.000 ms
Base64 decode ratio (CN1/native) 0.308x (69.2% faster)
Base64 SIMD encode 54.000 ms
Base64 encode ratio (SIMD/CN1) 0.192x (80.8% faster)
Base64 SIMD decode 47.000 ms
Base64 decode ratio (SIMD/CN1) 0.236x (76.4% faster)
Base64 encode ratio (SIMD/native) 0.056x (94.4% faster)
Base64 decode ratio (SIMD/native) 0.073x (92.7% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 27.000 ms
Image createMask (SIMD on) 23.000 ms
Image createMask ratio (SIMD on/off) 0.852x (14.8% faster)
Image applyMask (SIMD off) 210.000 ms
Image applyMask (SIMD on) 229.000 ms
Image applyMask ratio (SIMD on/off) 1.090x (9.0% slower)
Image modifyAlpha (SIMD off) 208.000 ms
Image modifyAlpha (SIMD on) 183.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.880x (12.0% faster)
Image modifyAlpha removeColor (SIMD off) 211.000 ms
Image modifyAlpha removeColor (SIMD on) 160.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.758x (24.2% faster)

@shai-almog shai-almog merged commit 1634298 into master Jul 7, 2026
52 of 53 checks passed
@shai-almog shai-almog deleted the ios-ondevice-dynamic-symbols branch July 7, 2026 02:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Problems debugging in ios side

1 participant