Skip to content

iOS preflight: fail fast when CN1Widgets has no provisioning profile (#6008) - #6113

Merged
shai-almog merged 3 commits into
masterfrom
ios-widgets-profile-preflight-6008
Oct 27, 2026
Merged

shai-almog merged 3 commits into
masterfrom
ios-widgets-profile-preflight-6008

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fixes #6008.

  • IOSProvisioningPreflight.checkGeneratedExtensions now covers the generated CN1Widgets target: when the staged classes reference com.codename1.surfaces (constant-pool scan: class names and descriptors, not string literals), ios.surfaces.extension is not false, and no CN1Widgets profile is configured, the build is refused locally with the App ID to create (<package>.CN1Widgets + App Groups), the setting/hint that supply the profile, the Certificate Wizard and the opt-out. A path-valued widget profile for the wrong App ID is refused too.
  • Automatic signing / ios-source / simulator are untouched (appliesTo).
  • Builder backstop for older clients: codenameone/BuildDaemon branch widgets-profile-preflight-6008.

Tests: IOSAppExtensionSigningPreflightTest (36 pass), scanner checked against all 4308 core classes.

🤖 Generated with Claude Code

shai-almog and others added 3 commits October 26, 2026 16:59
…anual signing (#6008)

An app that names com.codename1.surfaces gets a generated CN1Widgets
target that needs its own App ID (with App Groups) and profile. With only
the app's profile the cloud build ran until xcodebuild failed on the
bundle-ID mismatch. The preflight now scans the staged jar for the same
signal IPhoneBuilder uses and reports the App ID, the setting/hint that
supply the profile and the Certificate Wizard before a build is spent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed widget profile's App ID

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ualified one is not a file

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

shai-almog commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 191 screenshots: 191 matched.

Native Android coverage

  • 📊 Line coverage: 18.90% (48250/255341 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 17.64% (229182/1299035), branch 12.04% (16819/139675), complexity 9.67% (12912/133466), method 14.57% (9122/62628), class 25.16% (1774/7052)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • com.codename1.androidcompat.rt.com.codename1.androidcompat.rt.TextXmlPullParser – 0.00% (0/623 lines covered)
      • com.codename1.androidcompat.androidx.constraintlayout.core.widgets.com.codename1.androidcompat.androidx.constraintlayout.core.widgets.Flow – 0.00% (0/576 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 18.90% (48250/255341 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 17.64% (229182/1299035), branch 12.04% (16819/139675), complexity 9.67% (12912/133466), method 14.57% (9122/62628), class 25.16% (1774/7052)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • com.codename1.androidcompat.rt.com.codename1.androidcompat.rt.TextXmlPullParser – 0.00% (0/623 lines covered)
      • com.codename1.androidcompat.androidx.constraintlayout.core.widgets.com.codename1.androidcompat.androidx.constraintlayout.core.widgets.Flow – 0.00% (0/576 lines covered)

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend scalar fallback (no native SIMD)
SIMD int-add (64K x300) java 81ms / native 43ms = 1.8x speedup
SIMD float-mul (64K x300) java 96ms / native 42ms = 2.2x 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 52.000 ms
Base64 CN1 decode 53.000 ms
Base64 native encode 420.000 ms
Base64 encode ratio (CN1/native) 0.124x (87.6% faster)
Base64 native decode 224.000 ms
Base64 decode ratio (CN1/native) 0.237x (76.3% faster)
Image encode benchmark status skipped (SIMD unsupported)

@shai-almog

shai-almog commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator Author

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

@github-actions

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)
    • ✅ android-compat: 0 findings (no issues)
    • ✅ android-res-compiler: 0 findings (no issues)
    • ✅ backend: 0 findings (no issues)
    • ✅ backend-test: 0 findings (no issues)
    • ✅ build-engine: 0 findings (no issues)
    • ✅ build-hint-catalog: 0 findings (no issues)
    • ✅ build-hint-tools: 0 findings (no issues)
    • ✅ codenameone-gradle-plugin: 0 findings (no issues)
    • ✅ codenameone-maven-plugin: 0 findings (no issues)
    • ✅ core-unittests: 0 findings (no issues)
    • ✅ desktop-compat-runtime: 0 findings (no issues)
    • ✅ fxml-compiler: 0 findings (no issues)
    • ✅ ios: 0 findings (no issues)
    • ✅ javac: 0 findings (no issues)
    • ✅ javafx-compat: 0 findings (no issues)
    • ✅ project-model: 0 findings (no issues)
    • ✅ swing-compat: 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

Copy link
Copy Markdown
Contributor

✅ ByteCodeTranslator Quality Report

Test & Coverage

  • ✅ Tests: 881 total, 0 failed, 55 skipped

Benchmark Results

  • Execution Time: 8191 ms

  • Hotspots (Top 20 sampled methods):

    • 8.69% com.codename1.tools.translator.IteratorEscape.mangle (106 samples)
    • 7.62% java.lang.Object.hashCode (93 samples)
    • 6.89% java.util.ArrayList.indexOf (84 samples)
    • 5.82% java.lang.System.identityHashCode (71 samples)
    • 5.00% com.codename1.tools.translator.BytecodeMethod.updateInlinableFieldDependencies (61 samples)
    • 4.75% com.codename1.tools.translator.BytecodeMethod.equals (58 samples)
    • 3.61% com.codename1.tools.translator.classfile.analysis.Frame.execute (44 samples)
    • 3.20% java.lang.StringBuilder.append (39 samples)
    • 2.30% java.lang.String.equals (28 samples)
    • 1.80% com.codename1.tools.translator.JavascriptReachability.enqueueResolved (22 samples)
    • 1.72% com.codename1.tools.translator.IteratorEscape.ctorOnlyStoresParamsIntoThis (21 samples)
    • 1.72% java.util.HashMap.hash (21 samples)
    • 1.56% com.codename1.tools.translator.Parser.cullMethods (19 samples)
    • 1.23% java.io.FileOutputStream.open0 (15 samples)
    • 1.07% java.io.FileOutputStream.writeBytes (13 samples)
    • 1.07% java.util.AbstractCollection.containsAll (13 samples)
    • 1.07% com.codename1.tools.translator.bytecodes.Invoke.findMethodUp (13 samples)
    • 0.98% com.codename1.tools.translator.ByteCodeClass.hasDeclaredMethod (12 samples)
    • 0.90% com.codename1.tools.translator.BytecodeMethod.appendMethodC (11 samples)
    • 0.90% com.codename1.tools.translator.BytecodeMethod.isFramelessEligibleImpl (11 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.

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Flutter vs Codename One

Same application, built both ways: Flutter's AOT compile of the gallery, and the identical Dart source transpiled to Java on Codename One. Lower is better for every metric, so a ratio above 1.00x means Codename One is ahead by that factor.

android

9 interleaved rounds; host load 0.4, 1.69, 1.48

Metric Codename One Flutter Ratio Winner
Installed size 78.2 MB 95.8 MB 1.22x Codename One
Executable code 4.7 MB 20.6 MB 4.41x Codename One
Download size (zipped) 78.2 MB 95.8 MB 1.22x Codename One
Cold start to first frame on screen 400 ms 1597 ms 3.66x Codename One
Memory at rest 45.6 MB 78.5 MB 1.72x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 9 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 95 ms 188 ms 1.98x
longArithmetic 57 ms 59 ms 1.03x
mathTranscendental 226 ms 351 ms 1.55x
arraySequential 26 ms 36 ms 1.39x
arrayRandom 324 ms 481 ms 1.49x
objectAllocation 67 ms 49 ms 0.73x
valueEscape 7 ms 7 ms 1.00x
hashMapChurn 139 ms 295 ms 2.12x
stringBuilding 95 ms 134 ms 1.41x
recursion 81 ms 275 ms 3.40x
quicksortBench 128 ms 153 ms 1.20x
Geometric mean 1.45x

Gate: within tolerance against scripts/flutter-bench/baseline.

Android sizes are for the arm64-v8a slice a phone is delivered, on both sides; Flutter's release apk carries three ABIs and would otherwise count its engine about three times.
Android start-up and memory come from an x86_64 emulator with a software GPU. They compare the two runtimes on one machine; they are not phone timings, and a renderer that leans on the GPU is penalised more there.
This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

ios

9 interleaved rounds; host load 26.78, 30.29, 26.98

Metric Codename One Flutter Ratio Winner
Installed size 108.2 MB 110.5 MB 1.02x Codename One
Executable code 17.2 MB 19.1 MB 1.11x Codename One
Download size (zipped) 80.0 MB 81.9 MB 1.02x Codename One
Cold start to first frame on screen -- -- -- not measured
Memory at rest -- -- -- not measured

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Not measured: iOS compute is not measured: a device build needs signed hardware, and on the simulator Flutter runs its JIT debug engine rather than AOT code. The macOS row runs the same ParparVM and Dart AOT compilers on the same Apple silicon.

Gate: within tolerance against scripts/flutter-bench/baseline. Smaller than its baseline, which does not fail the gate: Executable code -7.25% -- rebaseline to tighten. To accept the move, download this platform's baseline-<platform>.json artifact and run python3 scripts/flutter-bench/flutter_baseline.py calibrate --pr 6113 --reason "<why these moved>" baseline-ios.json, then commit the overlay it writes.

iOS start-up and memory are not measured here: Flutter cannot AOT-compile for the simulator, so a simulator run would time a JIT debug build against a release build. Sizes come from release device bundles; timings need signed hardware.
This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

javascript

9 interleaved rounds; host load 2.41, 1.41, 0.6

Metric Codename One Flutter Ratio Winner
Installed size 104.0 MB 122.5 MB 1.18x Codename One
Executable code 12.9 MB 25.2 MB 1.95x Codename One
Download size (zipped) 76.3 MB 84.1 MB 1.10x Codename One
Cold start to first frame on screen -- -- -- not measured
Memory at rest -- -- -- not measured

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 646 ms wrong result Flutter: wrong result
longArithmetic 5079 ms did not run Flutter: did not run
mathTranscendental 570 ms did not run Flutter: did not run
arraySequential 237 ms 82 ms 0.35x
arrayRandom 970 ms wrong result Flutter: wrong result
objectAllocation 38 ms 28 ms 0.74x
valueEscape 154 ms 7 ms 0.04x
hashMapChurn 1141 ms 240 ms 0.21x
stringBuilding 507 ms 108 ms 0.21x
recursion 508 ms 493 ms 0.97x
quicksortBench 419 ms wrong result Flutter: wrong result
Geometric mean 0.28x

Gate: within tolerance against scripts/flutter-bench/baseline; BEHIND FLUTTER on Compute (geomean of the VM workloads) (reported, not gated: a loss to Flutter on the web is currently accepted).

the JavaScript adapter needs a Chrome DevTools driver; sizes are reported and timings are not
This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

linux

9 interleaved rounds; host load 0.18, 2.74, 2.37

Metric Codename One Flutter Ratio Winner
Installed size 111.5 MB 143.8 MB 1.29x Codename One
Executable code 14.1 MB 16.1 MB 1.15x Codename One
Download size (zipped) 80.9 MB 92.9 MB 1.15x Codename One
Cold start to first frame on screen 155 ms 244 ms 1.57x Codename One
Memory at rest 85.3 MB 225.9 MB 2.66x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 9 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 74 ms 184 ms 2.49x
longArithmetic 56 ms 56 ms 1.00x
mathTranscendental 253 ms 276 ms 1.09x
arraySequential 16 ms 35 ms 2.19x
arrayRandom 312 ms 267 ms 0.86x
objectAllocation 24 ms 37 ms 1.54x
valueEscape 5 ms 7 ms 1.40x
hashMapChurn 50 ms 329 ms 6.58x
stringBuilding 32 ms 109 ms 3.41x
recursion 87 ms 258 ms 2.97x
quicksortBench 138 ms 149 ms 1.08x
Geometric mean 1.83x

Gate: within tolerance against scripts/flutter-bench/baseline.

This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

macos

9 interleaved rounds; host load 7.97, 29.52, 30.95

Metric Codename One Flutter Ratio Winner
Installed size 124.2 MB 139.4 MB 1.12x Codename One
Executable code 33.1 MB 47.9 MB 1.45x Codename One
Download size (zipped) 85.5 MB 93.3 MB 1.09x Codename One
Cold start to first frame on screen 568 ms 684 ms 1.33x Codename One
Memory at rest 36.4 MB 56.4 MB 1.54x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 7 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 130 ms 282 ms 2.17x
longArithmetic 84 ms 75 ms 0.89x
mathTranscendental 339 ms 333 ms 0.98x
arraySequential 13 ms 41 ms 3.15x
arrayRandom 324 ms 367 ms 1.13x
objectAllocation 96 ms 29 ms 0.30x
valueEscape 6 ms 13 ms 2.17x
hashMapChurn 46 ms 209 ms 4.54x
stringBuilding 38 ms 117 ms 3.08x
recursion 147 ms 289 ms 1.97x
quicksortBench 142 ms 138 ms 0.97x
Geometric mean 1.54x

Gate: within tolerance against scripts/flutter-bench/baseline. Smaller than its baseline, which does not fail the gate: Executable code -6.26% -- rebaseline to tighten. To accept the move, download this platform's baseline-<platform>.json artifact and run python3 scripts/flutter-bench/flutter_baseline.py calibrate --pr 6113 --reason "<why these moved>" baseline-macos.json, then commit the overlay it writes.

This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

windows

9 interleaved rounds

Metric Codename One Flutter Ratio Winner
Installed size 107.8 MB 121.1 MB 1.12x Codename One
Executable code 11.4 MB 14.1 MB 1.25x Codename One
Download size (zipped) 77.9 MB 86.4 MB 1.11x Codename One
Cold start to first frame on screen 158 ms 271 ms 1.58x Codename One
Memory at rest 58.5 MB 92.9 MB 1.59x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 9 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 80 ms 183 ms 2.29x
longArithmetic 64 ms 57 ms 0.89x
mathTranscendental 198 ms 266 ms 1.34x
arraySequential 13 ms 35 ms 2.69x
arrayRandom 280 ms 286 ms 1.02x
objectAllocation 24 ms 40 ms 1.67x
valueEscape 1 ms 7 ms 7.00x
hashMapChurn 48 ms 325 ms 6.77x
stringBuilding 36 ms 121 ms 3.36x
recursion 194 ms 265 ms 1.37x
quicksortBench 138 ms 146 ms 1.06x
Geometric mean 2.06x

Gate: within tolerance against scripts/flutter-bench/baseline. Smaller than its baseline, which does not fail the gate: Executable code -10.64%; Download size (zipped) -0.77% -- rebaseline to tighten. To accept the move, download this platform's baseline-<platform>.json artifact and run python3 scripts/flutter-bench/flutter_baseline.py calibrate --pr 6113 --reason "<why these moved>" baseline-windows.json, then commit the overlay it writes.

This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

Codename One wins 26 of 26 measured metrics across 6 platform(s).

@shai-almog

shai-almog commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator Author

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

@shai-almog

shai-almog commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator Author

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

Benchmark Results

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

Build and Run Timing

Metric Duration
Simulator Boot 88000 ms
Simulator Boot (Run) 1000 ms
App Install 19000 ms
App Launch 2000 ms
Test Execution 510000 ms

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 261ms / native 6ms = 43.5x speedup
SIMD float-mul (64K x300) java 187ms / native 7ms = 26.7x 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 92.000 ms
Base64 CN1 decode 101.000 ms
Base64 native encode 2095.000 ms
Base64 encode ratio (CN1/native) 0.044x (95.6% faster)
Base64 native decode 1561.000 ms
Base64 decode ratio (CN1/native) 0.065x (93.5% faster)
Base64 SIMD encode 138.000 ms
Base64 encode ratio (SIMD/CN1) 1.500x (50.0% slower)
Base64 SIMD decode 80.000 ms
Base64 decode ratio (SIMD/CN1) 0.792x (20.8% faster)
Base64 encode ratio (SIMD/native) 0.066x (93.4% faster)
Base64 decode ratio (SIMD/native) 0.051x (94.9% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 8.000 ms
Image createMask (SIMD on) 6.000 ms
Image createMask ratio (SIMD on/off) 0.750x (25.0% faster)
Image applyMask (SIMD off) 505.000 ms
Image applyMask (SIMD on) 630.000 ms
Image applyMask ratio (SIMD on/off) 1.248x (24.8% slower)
Image modifyAlpha (SIMD off) 463.000 ms
Image modifyAlpha (SIMD on) 60.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.130x (87.0% faster)
Image modifyAlpha removeColor (SIMD off) 109.000 ms
Image modifyAlpha removeColor (SIMD on) 49.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.450x (55.0% faster)

@shai-almog

shai-almog commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 188 screenshots: 188 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

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

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 55ms / native 3ms = 18.3x speedup
SIMD float-mul (64K x300) java 57ms / native 3ms = 19.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 53.000 ms
Base64 CN1 decode 54.000 ms
Base64 native encode 535.000 ms
Base64 encode ratio (CN1/native) 0.099x (90.1% faster)
Base64 native decode 248.000 ms
Base64 decode ratio (CN1/native) 0.218x (78.2% faster)
Base64 SIMD encode 51.000 ms
Base64 encode ratio (SIMD/CN1) 0.962x (3.8% faster)
Base64 SIMD decode 46.000 ms
Base64 decode ratio (SIMD/CN1) 0.852x (14.8% faster)
Base64 encode ratio (SIMD/native) 0.095x (90.5% faster)
Base64 decode ratio (SIMD/native) 0.185x (81.5% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 4.000 ms
Image createMask (SIMD on) 2.000 ms
Image createMask ratio (SIMD on/off) 0.500x (50.0% faster)
Image applyMask (SIMD off) 30.000 ms
Image applyMask (SIMD on) 23.000 ms
Image applyMask ratio (SIMD on/off) 0.767x (23.3% faster)
Image modifyAlpha (SIMD off) 25.000 ms
Image modifyAlpha (SIMD on) 20.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.800x (20.0% faster)
Image modifyAlpha removeColor (SIMD off) 27.000 ms
Image modifyAlpha removeColor (SIMD on) 21.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.778x (22.2% faster)

@shai-almog
shai-almog merged commit 3985748 into master Oct 27, 2026
119 of 127 checks passed
@shai-almog
shai-almog deleted the ios-widgets-profile-preflight-6008 branch October 27, 2026 02:53
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.

iOS: fail fast when CN1Widgets (external surfaces) has no provisioning profile under manual signing

1 participant