Skip to content

Restore Liquid Glass accent UIID bindings#5373

Open
shai-almog wants to merge 4 commits into
masterfrom
fix-liquid-glass-accent-uiids
Open

Restore Liquid Glass accent UIID bindings#5373
shai-almog wants to merge 4 commits into
masterfrom
fix-liquid-glass-accent-uiids

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

What changed

  • Restored primary, pressed, disabled, and on-accent palette bindings for Liquid Glass Button and RaisedButton UIIDs in light and dark appearances while preserving the new glass surfaces.
  • Regenerated the shipped iOS Modern theme resources.
  • Made PaletteOverrideThemeScreenshotTest reinstall its overrides after capture retries and the HTML5 Material-to-iOS theme switch.
  • Added runtime screenshot assertions and expanded the native-theme binding unit coverage.

Why

PR #5274 replaced several palette-backed Liquid Glass colors with hard-coded fidelity colors. This broke application accent overrides: the palette screenshot's Raised/Text/Disabled controls rendered with default blue/black/grey instead of magenta/teal. The screenshot test could also silently lose its override after a retry or theme reload and accept those default colors as new goldens.

This restores the established theming contract without removing the Liquid Glass geometry, borders, blur, or materials.

Validation

  • Java 8 targeted core test: NativeThemeBindingsTest (2 tests passed)
  • Screenshot app compilation and Codename One bytecode-compliance check
  • git diff --check

The currently committed blue palette screenshots are expected to be flagged by the next platform screenshot runs and replaced from their real device renders.

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

Native fidelity (Android, Material 3)

54 pairs compared -- median 95.6%, worst 91.3% (FlatButton_pressed_dark), 25th pct 94.9%, mean 95.7%.

Distribution -- >=99%: 2 | 95-99%: 37 | 90-95%: 15 | <90%: 0

Component State Appearance Material Fidelity SSIM mean delta vs base Geometry
FlatButton pressed dark normal 91.3% 0.899 3.10 0.0 ok
Tabs normal light normal 92.3% 0.914 3.05 0.0 ok
Button pressed dark normal 92.6% 0.949 4.32 0.0 ok
FlatButton normal dark normal 93.2% 0.938 2.69 0.0 ok
Button disabled dark normal 93.3% 0.928 2.20 0.0 ok
Button pressed light normal 93.3% 0.952 3.68 0.0 ok
FlatButton normal light normal 93.7% 0.941 2.29 0.0 ok
FlatButton pressed light normal 93.8% 0.942 2.56 0.0 ok
FloatingActionButton pressed light normal 94.4% 0.927 2.82 0.0 OFF (h 0.88)
RadioButton normal dark normal 94.5% 0.963 2.19 0.0 ok
RadioButton normal light normal 94.7% 0.964 1.85 0.0 ok
CheckBox selected dark normal 94.7% 0.950 2.60 0.0 ok
RadioButton selected dark normal 94.8% 0.963 2.42 0.0 ok
Button normal dark normal 94.9% 0.949 3.16 0.0 ok
CheckBox normal dark normal 94.9% 0.952 2.69 0.0 ok
CheckBox normal light normal 95.0% 0.953 2.30 0.0 ok
Toolbar normal dark normal 95.1% 0.906 1.60 0.0 ok
RaisedButton pressed dark normal 95.2% 0.950 2.39 0.0 ok
CheckBox disabled dark normal 95.2% 0.954 1.47 0.0 ok
CheckBox disabled light normal 95.2% 0.956 1.34 0.0 ok
Tabs normal dark normal 95.2% 0.913 3.65 0.0 ok
RadioButton disabled dark normal 95.3% 0.963 1.18 0.0 ok
RadioButton selected light normal 95.3% 0.964 1.84 0.0 ok
CheckBox selected light normal 95.4% 0.952 2.06 0.0 ok
Switch selected light normal 95.4% 0.966 1.59 0.0 ok
Switch selected dark normal 95.5% 0.966 1.86 0.0 ok
RadioButton disabled light normal 95.5% 0.966 1.08 0.0 ok
Switch disabled dark normal 95.6% 0.961 0.85 0.0 ok
Dialog normal light normal 95.7% 0.930 2.30 0.0 ok
RaisedButton pressed light normal 95.8% 0.958 2.16 0.0 ok
Button normal light normal 95.8% 0.953 2.46 0.0 ok
Dialog normal dark normal 95.8% 0.932 2.30 0.0 ok
Switch normal light normal 96.0% 0.961 1.45 0.0 ok
FloatingActionButton normal light normal 96.1% 0.937 1.14 0.0 ok
FloatingActionButton pressed dark normal 96.2% 0.951 2.45 0.0 ok
Switch normal dark normal 96.2% 0.962 1.39 0.0 ok
TextField disabled dark normal 96.2% 0.965 0.76 0.0 ok
RaisedButton normal dark normal 96.4% 0.952 1.78 0.0 ok
Switch disabled light normal 96.4% 0.970 0.61 0.0 ok
Button disabled light normal 96.8% 0.960 1.06 0.0 ok
ProgressBar normal dark normal 96.9% 0.967 2.03 0.0 OFF (h 1.50)
RaisedButton disabled dark normal 97.0% 0.955 0.89 0.0 ok
FloatingActionButton normal dark normal 97.1% 0.952 1.43 0.0 ok
ProgressBar normal light normal 97.3% 0.974 1.53 0.0 OFF (h 1.50)
RaisedButton disabled light normal 97.3% 0.961 0.79 0.0 ok
TextField disabled light normal 97.3% 0.965 0.79 0.0 ok
RaisedButton normal light normal 97.3% 0.961 1.40 0.0 ok
TextField normal dark normal 97.6% 0.958 1.83 0.0 ok
TextField normal light normal 97.6% 0.958 1.63 0.0 ok
Slider normal dark normal 98.4% 0.990 0.87 0.0 ok
Toolbar normal light normal 98.7% 0.974 1.28 0.0 ok
Slider normal light normal 99.0% 0.991 0.47 0.0 ok
Slider disabled dark normal 99.6% 0.993 0.22 0.0 ok
Slider disabled light normal 99.6% 0.993 0.18 0.0 ok
Geometry vs native (bbox offset / size ratio / center offset / corner radius) -- gated separately from the visual score
Component State Appearance bbox dx,dy (px) w ratio h ratio center off (px) radius native->cn1 (px)
FloatingActionButton pressed light +0,+0 0.929 0.881 4.0 -
FloatingActionButton normal light +0,+0 0.946 0.912 2.9 -
Button pressed dark +0,+0 0.947 0.975 2.6 -
Button disabled dark +0,+0 0.947 0.975 2.6 -
Button pressed light +0,+0 0.947 0.975 2.6 -
Button normal dark +0,+0 0.947 0.975 2.6 -
RaisedButton pressed dark +0,+0 0.945 0.975 2.6 -
RaisedButton pressed light +0,+0 0.945 0.975 2.6 -
Button normal light +0,+0 0.947 0.975 2.6 -
RaisedButton normal dark +0,+0 0.945 0.975 2.6 -
Button disabled light +0,+0 0.947 0.975 2.6 -
RaisedButton disabled dark +0,+0 0.945 0.975 2.6 -
RaisedButton disabled light +0,+0 0.945 0.975 2.6 -
RaisedButton normal light +0,+0 0.945 0.975 2.6 -
RadioButton normal dark +1,+1 1.029 1.000 2.2 -
RadioButton normal light +1,+1 1.029 1.000 2.2 -
RadioButton selected dark +1,+1 1.029 1.000 2.2 -
RadioButton disabled dark +1,+1 1.029 1.000 2.2 -
RadioButton selected light +1,+1 1.029 1.000 2.2 -
Switch selected light +0,+0 1.080 1.063 2.2 -
RadioButton disabled light +1,+1 1.029 1.000 2.2 -
CheckBox selected dark +1,+1 1.013 1.000 1.8 -
CheckBox normal dark +1,+1 1.013 1.000 1.8 -
CheckBox normal light +1,+1 1.013 1.000 1.8 -
CheckBox disabled dark +1,+1 1.013 1.000 1.8 -
CheckBox disabled light +1,+1 1.013 1.000 1.8 -
CheckBox selected light +1,+1 1.013 1.000 1.8 -
Switch selected dark +0,+0 1.060 1.031 1.6 -
Switch disabled dark +0,-1 1.060 1.031 1.6 -
Dialog normal light +0,+0 1.007 0.982 1.6 -
Dialog normal dark +0,+0 1.007 0.982 1.6 -
Switch normal light +0,-1 1.060 1.031 1.6 -
Switch normal dark +0,-1 1.060 1.031 1.6 -
Switch disabled light +0,-1 1.060 1.031 1.6 -
FloatingActionButton pressed dark +0,+0 0.963 0.963 1.4 -
FloatingActionButton normal dark +0,+0 0.963 0.963 1.4 -
Toolbar normal light -1,+1 1.000 1.000 1.4 -
FlatButton pressed dark +0,+0 0.977 0.975 1.1 -
FlatButton normal dark +0,+0 0.977 0.975 1.1 -
FlatButton normal light +0,+0 0.977 0.975 1.1 -
FlatButton pressed light +0,+0 0.977 0.975 1.1 -
TextField normal dark +0,+0 1.015 1.036 1.1 -
TextField normal light +0,+0 1.015 1.036 1.1 -
Toolbar normal dark +0,+0 1.000 1.032 1.0 -
ProgressBar normal dark +0,+0 1.000 1.500 1.0 -
ProgressBar normal light +0,+0 1.000 1.500 1.0 -
TextField disabled dark +0,+0 1.015 1.018 0.7 -
TextField disabled light +0,+0 1.015 1.018 0.7 -
Tabs normal light +0,+1 1.000 0.984 0.5 -
Slider normal dark +1,+0 0.996 1.000 0.5 -
Slider normal light +1,+0 0.996 1.000 0.5 -
Tabs normal dark +0,+0 1.000 1.000 0.0 -
Slider disabled dark +0,+0 1.000 1.000 0.0 -
Slider disabled light +0,+0 1.000 1.000 0.0 -

Side-by-side comparisons (worst first)

  • FlatButton_pressed_dark -- 91.25% fidelity (SSIM 0.8985) (no change)

    native FlatButton_pressed_dark cn1 FlatButton_pressed_dark
    Left: native widget. Right: Codename One render.

  • Tabs_normal_light -- 92.28% fidelity (SSIM 0.9140) (no change)

    native Tabs_normal_light cn1 Tabs_normal_light
    Left: native widget. Right: Codename One render.

  • Button_pressed_dark -- 92.61% fidelity (SSIM 0.9485) (no change)

    native Button_pressed_dark cn1 Button_pressed_dark
    Left: native widget. Right: Codename One render.

  • FlatButton_normal_dark -- 93.24% fidelity (SSIM 0.9381) (no change)

    native FlatButton_normal_dark cn1 FlatButton_normal_dark
    Left: native widget. Right: Codename One render.

  • Button_disabled_dark -- 93.26% fidelity (SSIM 0.9278) (no change)

    native Button_disabled_dark cn1 Button_disabled_dark
    Left: native widget. Right: Codename One render.

  • Button_pressed_light -- 93.34% fidelity (SSIM 0.9521) (no change)

    native Button_pressed_light cn1 Button_pressed_light
    Left: native widget. Right: Codename One render.

  • FlatButton_normal_light -- 93.72% fidelity (SSIM 0.9410) (no change)

    native FlatButton_normal_light cn1 FlatButton_normal_light
    Left: native widget. Right: Codename One render.

  • FlatButton_pressed_light -- 93.77% fidelity (SSIM 0.9424) (no change)

    native FlatButton_pressed_light cn1 FlatButton_pressed_light
    Left: native widget. Right: Codename One render.

  • FloatingActionButton_pressed_light -- 94.44% fidelity (SSIM 0.9273) (no change)

    native FloatingActionButton_pressed_light cn1 FloatingActionButton_pressed_light
    Left: native widget. Right: Codename One render.

  • RadioButton_normal_dark -- 94.46% fidelity (SSIM 0.9630) (no change)

    native RadioButton_normal_dark cn1 RadioButton_normal_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_normal_light -- 94.69% fidelity (SSIM 0.9643) (no change)

    native RadioButton_normal_light cn1 RadioButton_normal_light
    Left: native widget. Right: Codename One render.

  • CheckBox_selected_dark -- 94.71% fidelity (SSIM 0.9502) (no change)

    native CheckBox_selected_dark cn1 CheckBox_selected_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_selected_dark -- 94.79% fidelity (SSIM 0.9630) (no change)

    native RadioButton_selected_dark cn1 RadioButton_selected_dark
    Left: native widget. Right: Codename One render.

  • Button_normal_dark -- 94.93% fidelity (SSIM 0.9491) (-0.01 vs baseline)

    native Button_normal_dark cn1 Button_normal_dark
    Left: native widget. Right: Codename One render.

  • CheckBox_normal_dark -- 94.93% fidelity (SSIM 0.9516) (no change)

    native CheckBox_normal_dark cn1 CheckBox_normal_dark
    Left: native widget. Right: Codename One render.

  • CheckBox_normal_light -- 95.03% fidelity (SSIM 0.9531) (no change)

    native CheckBox_normal_light cn1 CheckBox_normal_light
    Left: native widget. Right: Codename One render.

  • Toolbar_normal_dark -- 95.07% fidelity (SSIM 0.9059) (no change)

    native Toolbar_normal_dark cn1 Toolbar_normal_dark
    Left: native widget. Right: Codename One render.

  • RaisedButton_pressed_dark -- 95.19% fidelity (SSIM 0.9501) (no change)

    native RaisedButton_pressed_dark cn1 RaisedButton_pressed_dark
    Left: native widget. Right: Codename One render.

  • CheckBox_disabled_dark -- 95.20% fidelity (SSIM 0.9538) (no change)

    native CheckBox_disabled_dark cn1 CheckBox_disabled_dark
    Left: native widget. Right: Codename One render.

  • CheckBox_disabled_light -- 95.21% fidelity (SSIM 0.9562) (no change)

    native CheckBox_disabled_light cn1 CheckBox_disabled_light
    Left: native widget. Right: Codename One render.

  • Tabs_normal_dark -- 95.23% fidelity (SSIM 0.9125) (no change)

    native Tabs_normal_dark cn1 Tabs_normal_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_disabled_dark -- 95.29% fidelity (SSIM 0.9630) (no change)

    native RadioButton_disabled_dark cn1 RadioButton_disabled_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_selected_light -- 95.33% fidelity (SSIM 0.9642) (no change)

    native RadioButton_selected_light cn1 RadioButton_selected_light
    Left: native widget. Right: Codename One render.

  • CheckBox_selected_light -- 95.37% fidelity (SSIM 0.9524) (no change)

    native CheckBox_selected_light cn1 CheckBox_selected_light
    Left: native widget. Right: Codename One render.

  • Switch_selected_light -- 95.37% fidelity (SSIM 0.9658) (no change)

    native Switch_selected_light cn1 Switch_selected_light
    Left: native widget. Right: Codename One render.

  • Switch_selected_dark -- 95.45% fidelity (SSIM 0.9656) (no change)

    native Switch_selected_dark cn1 Switch_selected_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_disabled_light -- 95.46% fidelity (SSIM 0.9657) (no change)

    native RadioButton_disabled_light cn1 RadioButton_disabled_light
    Left: native widget. Right: Codename One render.

  • Switch_disabled_dark -- 95.57% fidelity (SSIM 0.9613) (no change)

    native Switch_disabled_dark cn1 Switch_disabled_dark
    Left: native widget. Right: Codename One render.

  • Dialog_normal_light -- 95.65% fidelity (SSIM 0.9300) (no change)

    native Dialog_normal_light cn1 Dialog_normal_light
    Left: native widget. Right: Codename One render.

  • RaisedButton_pressed_light -- 95.78% fidelity (SSIM 0.9578) (no change)

    native RaisedButton_pressed_light cn1 RaisedButton_pressed_light
    Left: native widget. Right: Codename One render.

  • Button_normal_light -- 95.79% fidelity (SSIM 0.9528) (no change)

    native Button_normal_light cn1 Button_normal_light
    Left: native widget. Right: Codename One render.

  • Dialog_normal_dark -- 95.79% fidelity (SSIM 0.9322) (no change)

    native Dialog_normal_dark cn1 Dialog_normal_dark
    Left: native widget. Right: Codename One render.

  • Switch_normal_light -- 95.97% fidelity (SSIM 0.9612) (no change)

    native Switch_normal_light cn1 Switch_normal_light
    Left: native widget. Right: Codename One render.

  • FloatingActionButton_normal_light -- 96.09% fidelity (SSIM 0.9367) (no change)

    native FloatingActionButton_normal_light cn1 FloatingActionButton_normal_light
    Left: native widget. Right: Codename One render.

  • FloatingActionButton_pressed_dark -- 96.16% fidelity (SSIM 0.9513) (no change)

    native FloatingActionButton_pressed_dark cn1 FloatingActionButton_pressed_dark
    Left: native widget. Right: Codename One render.

  • Switch_normal_dark -- 96.17% fidelity (SSIM 0.9616) (no change)

    native Switch_normal_dark cn1 Switch_normal_dark
    Left: native widget. Right: Codename One render.

  • TextField_disabled_dark -- 96.21% fidelity (SSIM 0.9648) (no change)

    native TextField_disabled_dark cn1 TextField_disabled_dark
    Left: native widget. Right: Codename One render.

  • RaisedButton_normal_dark -- 96.41% fidelity (SSIM 0.9516) (no change)

    native RaisedButton_normal_dark cn1 RaisedButton_normal_dark
    Left: native widget. Right: Codename One render.

  • Switch_disabled_light -- 96.43% fidelity (SSIM 0.9698) (no change)

    native Switch_disabled_light cn1 Switch_disabled_light
    Left: native widget. Right: Codename One render.

  • Button_disabled_light -- 96.80% fidelity (SSIM 0.9596) (no change)

    native Button_disabled_light cn1 Button_disabled_light
    Left: native widget. Right: Codename One render.

  • ProgressBar_normal_dark -- 96.91% fidelity (SSIM 0.9669) (no change)

    native ProgressBar_normal_dark cn1 ProgressBar_normal_dark
    Left: native widget. Right: Codename One render.

  • RaisedButton_disabled_dark -- 97.02% fidelity (SSIM 0.9549) (no change)

    native RaisedButton_disabled_dark cn1 RaisedButton_disabled_dark
    Left: native widget. Right: Codename One render.

  • FloatingActionButton_normal_dark -- 97.07% fidelity (SSIM 0.9521) (no change)

    native FloatingActionButton_normal_dark cn1 FloatingActionButton_normal_dark
    Left: native widget. Right: Codename One render.

  • ProgressBar_normal_light -- 97.26% fidelity (SSIM 0.9739) (no change)

    native ProgressBar_normal_light cn1 ProgressBar_normal_light
    Left: native widget. Right: Codename One render.

  • RaisedButton_disabled_light -- 97.26% fidelity (SSIM 0.9611) (no change)

    native RaisedButton_disabled_light cn1 RaisedButton_disabled_light
    Left: native widget. Right: Codename One render.

  • TextField_disabled_light -- 97.29% fidelity (SSIM 0.9649) (no change)

    native TextField_disabled_light cn1 TextField_disabled_light
    Left: native widget. Right: Codename One render.

  • RaisedButton_normal_light -- 97.32% fidelity (SSIM 0.9613) (no change)

    native RaisedButton_normal_light cn1 RaisedButton_normal_light
    Left: native widget. Right: Codename One render.

  • TextField_normal_dark -- 97.61% fidelity (SSIM 0.9583) (no change)

    native TextField_normal_dark cn1 TextField_normal_dark
    Left: native widget. Right: Codename One render.

  • TextField_normal_light -- 97.62% fidelity (SSIM 0.9582) (no change)

    native TextField_normal_light cn1 TextField_normal_light
    Left: native widget. Right: Codename One render.

  • Slider_normal_dark -- 98.39% fidelity (SSIM 0.9900) (no change)

    native Slider_normal_dark cn1 Slider_normal_dark
    Left: native widget. Right: Codename One render.

  • Toolbar_normal_light -- 98.69% fidelity (SSIM 0.9739) (no change)

    native Toolbar_normal_light cn1 Toolbar_normal_light
    Left: native widget. Right: Codename One render.

  • Slider_normal_light -- 98.95% fidelity (SSIM 0.9908) (no change)

    native Slider_normal_light cn1 Slider_normal_light
    Left: native widget. Right: Codename One render.

  • Slider_disabled_dark -- 99.56% fidelity (SSIM 0.9927) (no change)

    native Slider_disabled_dark cn1 Slider_disabled_dark
    Left: native widget. Right: Codename One render.

  • Slider_disabled_light -- 99.59% fidelity (SSIM 0.9932) (no change)

    native Slider_disabled_light cn1 Slider_disabled_light
    Left: native widget. Right: Codename One render.

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

Android screenshot updates

Compared 144 screenshots: 140 matched, 4 updated.

  • ChatInput_dark — updated screenshot. Screenshot differs (320x640 px, bit depth 8).

    ChatInput_dark
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as ChatInput_dark.png in workflow artifacts.

  • ChatInput_light — updated screenshot. Screenshot differs (320x640 px, bit depth 8).

    ChatInput_light
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as ChatInput_light.png in workflow artifacts.

  • PaletteOverrideTheme_dark — updated screenshot. Screenshot differs (320x640 px, bit depth 8).

    PaletteOverrideTheme_dark
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_dark.png in workflow artifacts.

  • PaletteOverrideTheme_light — updated screenshot. Screenshot differs (320x640 px, bit depth 8).

    PaletteOverrideTheme_light
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_light.png in workflow artifacts.

Native Android coverage

  • 📊 Line coverage: 10.20% (10415/102143 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 9.00% (51052/567102), branch 4.55% (2352/51722), complexity 4.52% (2467/54622), method 6.84% (1936/28300), class 10.89% (438/4021)
    • 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 234ms / native 212ms = 1.1x speedup
SIMD float-mul (64K x300) java 161ms / native 168ms = 0.9x 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 156.000 ms
Base64 CN1 decode 169.000 ms
Base64 native encode 819.000 ms
Base64 encode ratio (CN1/native) 0.190x (81.0% faster)
Base64 native decode 1606.000 ms
Base64 decode ratio (CN1/native) 0.105x (89.5% faster)
Image encode benchmark status skipped (SIMD unsupported)

@github-actions

github-actions Bot commented Jul 12, 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.

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

JavaScript port screenshot updates

Compared 167 screenshots: 163 matched, 4 updated.

  • PaletteOverrideTheme_dark — updated screenshot. Screenshot differs (375x667 px, bit depth 8).

    PaletteOverrideTheme_dark
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_dark.png in workflow artifacts.

  • PaletteOverrideTheme_ios_dark — updated screenshot. Screenshot differs (375x667 px, bit depth 8).

    PaletteOverrideTheme_ios_dark
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_ios_dark.png in workflow artifacts.

  • PaletteOverrideTheme_ios_light — updated screenshot. Screenshot differs (375x667 px, bit depth 8).

    PaletteOverrideTheme_ios_light
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_ios_light.png in workflow artifacts.

  • PaletteOverrideTheme_light — updated screenshot. Screenshot differs (375x667 px, bit depth 8).

    PaletteOverrideTheme_light
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_light.png in workflow artifacts.

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

Native Linux port (x64)

Compared 141 screenshots: 130 matched, 11 updated.

  • AdsScreen — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    AdsScreen
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as AdsScreen.png in workflow artifacts.

  • CoverHorizontalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    CoverHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as CoverHorizontalTransitionTest.png in workflow artifacts.

  • FadeTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    FadeTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as FadeTransitionTest.png in workflow artifacts.

  • FlipTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    FlipTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as FlipTransitionTest.png in workflow artifacts.

  • PaletteOverrideTheme_dark — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    PaletteOverrideTheme_dark
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_dark.png in workflow artifacts.

  • PaletteOverrideTheme_light — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    PaletteOverrideTheme_light
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_light.png in workflow artifacts.

  • SlideFadeTitleTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideFadeTitleTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideFadeTitleTransitionTest.png in workflow artifacts.

  • SlideHorizontalBackTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideHorizontalBackTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideHorizontalBackTransitionTest.png in workflow artifacts.

  • SlideHorizontalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideHorizontalTransitionTest.png in workflow artifacts.

  • SlideVerticalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideVerticalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideVerticalTransitionTest.png in workflow artifacts.

  • UncoverHorizontalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    UncoverHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as UncoverHorizontalTransitionTest.png in workflow artifacts.

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

Native Linux port (arm64)

Compared 141 screenshots: 130 matched, 11 updated.

  • AdsScreen — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    AdsScreen
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as AdsScreen.png in workflow artifacts.

  • CoverHorizontalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    CoverHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as CoverHorizontalTransitionTest.png in workflow artifacts.

  • FadeTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    FadeTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as FadeTransitionTest.png in workflow artifacts.

  • FlipTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    FlipTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as FlipTransitionTest.png in workflow artifacts.

  • PaletteOverrideTheme_dark — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    PaletteOverrideTheme_dark
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_dark.png in workflow artifacts.

  • PaletteOverrideTheme_light — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    PaletteOverrideTheme_light
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_light.png in workflow artifacts.

  • SlideFadeTitleTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideFadeTitleTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideFadeTitleTransitionTest.png in workflow artifacts.

  • SlideHorizontalBackTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideHorizontalBackTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideHorizontalBackTransitionTest.png in workflow artifacts.

  • SlideHorizontalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideHorizontalTransitionTest.png in workflow artifacts.

  • SlideVerticalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    SlideVerticalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideVerticalTransitionTest.png in workflow artifacts.

  • UncoverHorizontalTransitionTest — updated screenshot. Screenshot differs (800x600 px, bit depth 8).

    UncoverHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as UncoverHorizontalTransitionTest.png in workflow artifacts.

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

Native Windows port (cross-compiled)

Compared 140 screenshots: 129 matched, 11 updated.

  • AdsScreen — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    AdsScreen
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as AdsScreen.png in workflow artifacts.

  • CoverHorizontalTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    CoverHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as CoverHorizontalTransitionTest.png in workflow artifacts.

  • FadeTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    FadeTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as FadeTransitionTest.png in workflow artifacts.

  • FlipTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    FlipTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as FlipTransitionTest.png in workflow artifacts.

  • PaletteOverrideTheme_dark — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    PaletteOverrideTheme_dark
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_dark.png in workflow artifacts.

  • PaletteOverrideTheme_light — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    PaletteOverrideTheme_light
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as PaletteOverrideTheme_light.png in workflow artifacts.

  • SlideFadeTitleTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    SlideFadeTitleTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideFadeTitleTransitionTest.png in workflow artifacts.

  • SlideHorizontalBackTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    SlideHorizontalBackTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideHorizontalBackTransitionTest.png in workflow artifacts.

  • SlideHorizontalTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    SlideHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideHorizontalTransitionTest.png in workflow artifacts.

  • SlideVerticalTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    SlideVerticalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as SlideVerticalTransitionTest.png in workflow artifacts.

  • UncoverHorizontalTransitionTest — updated screenshot. Screenshot differs (784x561 px, bit depth 8).

    UncoverHorizontalTransitionTest
    Preview info: JPEG preview quality 70; JPEG preview quality 70.
    Full-resolution PNG saved as UncoverHorizontalTransitionTest.png in workflow artifacts.

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 64ms / native 4ms = 16.0x speedup
SIMD float-mul (64K x300) java 63ms / native 5ms = 12.6x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 native bridge unavailable (CN1 + SIMD + image benchmarks only)
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 198.000 ms
Base64 CN1 decode 126.000 ms
Base64 SIMD encode 101.000 ms
Base64 encode ratio (SIMD/CN1) 0.510x (49.0% faster)
Base64 SIMD decode 93.000 ms
Base64 decode ratio (SIMD/CN1) 0.738x (26.2% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 18.000 ms
Image createMask (SIMD on) 12.000 ms
Image createMask ratio (SIMD on/off) 0.667x (33.3% faster)
Image applyMask (SIMD off) 35.000 ms
Image applyMask (SIMD on) 28.000 ms
Image applyMask ratio (SIMD on/off) 0.800x (20.0% faster)
Image modifyAlpha (SIMD off) 24.000 ms
Image modifyAlpha (SIMD on) 20.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.833x (16.7% faster)
Image modifyAlpha removeColor (SIMD off) 26.000 ms
Image modifyAlpha removeColor (SIMD on) 21.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.808x (19.2% faster)

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

Native fidelity (iOS Modern, Metal)

68 pairs compared -- median 94.4%, worst 74.3% (Button_normal_dark), 25th pct 90.4%, mean 92.8%.

Distribution -- >=99%: 0 | 95-99%: 32 | 90-95%: 20 | <90%: 16

Component State Appearance Material Fidelity SSIM mean delta vs base Geometry
Button normal dark glass 74.3% 0.932 8.78 0.0 OFF (off 11px)
Button pressed dark glass 76.0% 0.931 8.20 0.0 OFF (off 11px)
Button disabled light glass 77.9% 0.938 7.96 0.0 OFF (off 11px)
Tabs normal dark glass 83.5% 0.884 11.66 0.0 ok
RaisedButton disabled dark glass 84.4% 0.959 5.76 0.0 OFF (off 12px, w 1.11)
Button disabled dark glass 85.9% 0.942 5.14 0.0 OFF (off 11px)
Tabs normal light glass 86.4% 0.896 8.01 0.0 ok
Toolbar normal light glass 87.6% 0.951 4.24 0.0 ok
Toolbar normal dark glass 87.7% 0.950 3.69 0.0 ok
FlatButton pressed dark glass 87.8% 0.966 3.09 0.0 ok
RaisedButton disabled light glass 87.9% 0.946 4.43 0.0 OFF (off 11px, w 1.10)
FlatButton normal dark glass 87.9% 0.968 3.12 0.0 ok
FlatButton normal light glass 88.2% 0.970 3.28 0.0 ok
FlatButton pressed light glass 88.4% 0.968 3.09 0.0 ok
RaisedButton normal light glass 89.7% 0.956 4.03 0.0 OFF (off 11px, w 1.10)
Button normal light glass 89.9% 0.949 3.95 0.0 OFF (off 11px)
RaisedButton pressed light glass 90.2% 0.958 3.85 0.0 OFF (off 11px, w 1.10)
TextField normal light normal 90.4% 0.961 2.70 0.0 ok
RaisedButton normal dark glass 90.9% 0.962 3.53 0.0 OFF (off 11px, w 1.10)
Button pressed light glass 91.2% 0.949 3.32 0.0 OFF (off 11px)
RaisedButton pressed dark glass 91.4% 0.964 3.36 0.0 OFF (off 11px, w 1.10)
TextField disabled light normal 91.4% 0.965 2.20 0.0 ok
Spinner normal dark normal 91.5% 0.893 3.25 0.0 ok
Spinner normal light normal 91.8% 0.914 4.28 0.0 ok
Switch selected light normal 92.1% 0.981 1.47 0.0 ok
CheckBox normal light normal 92.2% 0.994 0.68 0.0 ok
RadioButton normal light normal 92.2% 0.994 0.68 0.0 ok
Slider disabled dark normal 92.4% 0.945 2.27 0.0 ok
CheckBox disabled light normal 92.7% 0.995 0.50 0.0 ok
RadioButton disabled light normal 92.7% 0.995 0.50 0.0 ok
Slider normal dark normal 92.7% 0.946 2.48 0.0 ok
TabsGeom normal dark normal 93.0% 0.892 8.76 0.0 ok
TabsGeom normal light normal 93.0% 0.886 7.10 0.0 ok
Slider disabled light normal 94.0% 0.963 1.74 0.0 OFF (h 4.50)
ProgressBar normal dark normal 94.4% 0.979 1.55 0.0 OFF (h 1.20)
RadioButton selected light normal 94.8% 0.992 0.86 0.0 ok
Slider normal light normal 95.1% 0.958 1.58 0.0 ok
ProgressBar normal light normal 95.4% 0.984 1.37 0.0 OFF (h 1.20)
Switch normal light normal 95.5% 0.986 0.70 0.0 ok
Switch disabled dark normal 95.5% 0.978 0.90 0.0 ok
TabOne normal light normal 95.6% 0.946 8.63 0.0 OFF (off 40px, w 0.75, h 0.54)
CheckBox disabled dark normal 95.8% 0.993 0.25 0.0 ok
RadioButton disabled dark normal 95.8% 0.993 0.25 0.0 ok
CheckBox selected light normal 95.8% 0.994 0.67 0.0 ok
Switch selected dark normal 95.9% 0.985 1.02 0.0 ok
TabOne normal dark normal 96.0% 0.945 6.14 0.0 OFF (off 40px, w 0.75, h 0.54)
GlassPanelPhoto normal light glass 96.1% 0.970 8.35 0.0 ok
GlassPanelPhoto normal dark glass 96.2% 0.972 9.12 0.0 ok
Switch disabled light normal 96.3% 0.991 0.52 0.0 OFF (off 7px)
CheckBox normal dark normal 96.5% 0.993 0.35 0.0 ok
RadioButton normal dark normal 96.5% 0.993 0.35 0.0 ok
Switch normal dark normal 96.8% 0.986 0.82 0.0 ok
RadioButton selected dark normal 96.8% 0.991 0.57 0.0 ok
Dialog normal dark normal 97.0% 0.948 2.20 0.0 ok
TextField normal dark normal 97.1% 0.953 3.23 0.0 ok
Dialog normal light normal 97.1% 0.951 2.24 0.0 ok
TextField disabled dark normal 97.3% 0.956 2.34 0.0 ok
CheckBox selected dark normal 97.8% 0.993 0.38 0.0 ok
GlassPanelGrad normal light normal 98.2% 0.982 4.87 0.0 ok
GlassPanelGrey normal light normal 98.4% 0.982 3.78 0.0 ok
GlassPanelGrey normal dark normal 98.4% 0.982 3.62 0.0 ok
GlassPanelGrad normal dark normal 98.4% 0.983 4.11 0.0 ok
GlassPanelRed normal light normal 98.4% 0.982 3.96 0.0 ok
GlassPanelRed normal dark normal 98.6% 0.983 3.48 0.0 ok
GlassIcon normal dark normal 98.6% 0.984 3.55 0.0 ok
GlassText normal dark normal 98.6% 0.984 3.52 0.0 ok
GlassIcon normal light normal 98.7% 0.986 3.54 0.0 ok
GlassText normal light normal 98.7% 0.986 3.58 0.0 ok
Geometry vs native (bbox offset / size ratio / center offset / corner radius) -- gated separately from the visual score
Component State Appearance bbox dx,dy (px) w ratio h ratio center off (px) radius native->cn1 (px)
TabOne normal light +35,+0 0.747 0.543 39.5 79.1 -> 46.7
TabOne normal dark +35,+0 0.747 0.543 39.5 80.3 -> 47.2
RaisedButton disabled dark +0,+0 1.110 0.968 11.6 49.8 -> 44.3
Button normal dark +0,+0 1.100 0.968 11.1 45.8 -> 88.2
Button pressed dark +0,+0 1.100 0.968 11.1 45.4 -> 89.2
Button disabled light +0,+0 1.100 0.968 11.1 44.0 -> 87.8
Button disabled dark +0,+0 1.100 0.968 11.1 45.1 -> 45.6
RaisedButton disabled light +0,+0 1.104 0.968 11.1 54.1 -> 46.1
RaisedButton normal light +0,+0 1.104 0.968 11.1 44.5 -> 44.3
Button normal light +0,+0 1.100 0.968 11.1 44.5 -> 45.6
RaisedButton pressed light +0,+0 1.104 0.968 11.1 44.7 -> 44.3
RaisedButton normal dark +0,+0 1.104 0.968 11.1 44.4 -> 44.3
Button pressed light +0,+0 1.100 0.968 11.1 48.1 -> 55.6
RaisedButton pressed dark +0,+0 1.104 0.968 11.1 44.5 -> 44.3
Switch disabled light +10,+0 0.960 1.000 6.5 -
FlatButton pressed dark +0,+0 1.062 0.968 4.7 95.3 -> 48.2
FlatButton normal dark +0,+0 1.062 0.968 4.7 91.8 -> 44.5
FlatButton normal light +0,+0 1.062 0.968 4.7 91.9 -> 44.5
FlatButton pressed light +0,+0 1.062 0.968 4.7 95.4 -> 48.2
Toolbar normal light +4,+7 0.987 0.926 3.5 62.5 -> 56.1
Toolbar normal dark +4,+7 0.987 0.919 3.2 60.5 -> 55.5
Switch selected light +0,+0 1.028 1.026 2.7 -
Slider disabled light +0,-29 1.000 4.500 2.5 -
CheckBox disabled light +1,-3 1.000 1.023 2.2 -
RadioButton disabled light +1,-3 1.000 1.023 2.2 -
CheckBox disabled dark +1,-3 1.000 1.023 2.2 -
RadioButton disabled dark +1,-3 1.000 1.023 2.2 -
Switch normal light +0,+0 1.023 1.013 2.1 -
Switch disabled dark +0,+0 1.023 1.013 2.1 -
Switch normal dark +0,+0 1.023 1.013 2.1 -
CheckBox normal dark +0,-2 1.000 1.000 2.0 -
RadioButton normal dark +0,-2 1.000 1.000 2.0 -
RadioButton selected dark +0,-2 1.000 1.000 2.0 -
CheckBox selected dark +0,-2 1.000 1.000 2.0 -
Tabs normal dark +9,+0 0.973 1.012 1.8 79.7 -> 80.7
Tabs normal light +9,+0 0.973 1.012 1.8 79.2 -> 80.3
TabsGeom normal dark +9,+0 0.973 1.012 1.8 80.5 -> 80.9
TabsGeom normal light +9,+0 0.973 1.012 1.8 79.3 -> 80.6
Switch selected dark +0,+0 1.017 1.013 1.6 -
CheckBox normal light +0,-2 1.000 1.011 1.5 -
RadioButton normal light +0,-2 1.000 1.011 1.5 -
RadioButton selected light +0,-2 1.000 1.011 1.5 -
CheckBox selected light +0,-2 1.000 1.011 1.5 -
GlassIcon normal dark +0,+1 0.999 1.000 1.1 92.1 -> 91.5
GlassText normal dark +0,+1 0.999 1.000 1.1 92.1 -> 91.5
Spinner normal dark -23,-14 1.044 1.082 1.0 -
ProgressBar normal dark +0,+0 1.000 1.200 1.0 -
ProgressBar normal light +0,+0 1.000 1.200 1.0 -
GlassPanelGrey normal dark +1,+1 0.998 1.000 1.0 26.4 -> 49.4
Spinner normal light -24,-15 1.045 1.085 0.7 -
Slider disabled dark +0,-1 1.000 1.015 0.5 -
Slider normal light +0,+1 1.000 0.964 0.5 -
GlassPanelPhoto normal light +0,+0 1.000 1.005 0.5 25.6 -> 55.3
GlassPanelPhoto normal dark +0,+0 1.000 1.005 0.5 23.0 -> 52.5
GlassPanelGrad normal light +0,+0 1.000 1.005 0.5 22.3 -> 51.9
GlassPanelGrey normal light +0,+0 1.000 1.005 0.5 22.4 -> 51.9
GlassPanelGrad normal dark +1,+1 0.998 0.995 0.5 25.7 -> 48.4
GlassPanelRed normal light +0,+0 1.000 1.005 0.5 22.1 -> 51.9
GlassPanelRed normal dark +1,+1 0.998 0.995 0.5 26.6 -> 48.9
GlassIcon normal light +0,+0 1.000 1.005 0.5 91.6 -> 92.3
GlassText normal light +0,+0 1.000 1.005 0.5 91.6 -> 92.3
TextField normal light +0,+0 1.000 1.000 0.0 -
TextField disabled light +0,+0 1.000 1.000 0.0 -
Slider normal dark +0,+0 1.000 1.000 0.0 -
Dialog normal dark +0,+0 1.000 1.000 0.0 -
TextField normal dark +0,+0 1.000 1.000 0.0 -
Dialog normal light +0,+0 1.000 1.000 0.0 -
TextField disabled dark +0,+0 1.000 1.000 0.0 -

Side-by-side comparisons (worst first)

  • Button_normal_dark -- 74.34% fidelity (SSIM 0.9318) (no change)

    native Button_normal_dark cn1 Button_normal_dark
    Left: native widget. Right: Codename One render.

  • Button_pressed_dark -- 76.01% fidelity (SSIM 0.9307) (no change)

    native Button_pressed_dark cn1 Button_pressed_dark
    Left: native widget. Right: Codename One render.

  • Button_disabled_light -- 77.85% fidelity (SSIM 0.9384) (no change)

    native Button_disabled_light cn1 Button_disabled_light
    Left: native widget. Right: Codename One render.

  • Tabs_normal_dark -- 83.45% fidelity (SSIM 0.8842) (no change)

    native Tabs_normal_dark cn1 Tabs_normal_dark
    Left: native widget. Right: Codename One render.

  • RaisedButton_disabled_dark -- 84.40% fidelity (SSIM 0.9589) (no change)

    native RaisedButton_disabled_dark cn1 RaisedButton_disabled_dark
    Left: native widget. Right: Codename One render.

  • Button_disabled_dark -- 85.85% fidelity (SSIM 0.9416) (no change)

    native Button_disabled_dark cn1 Button_disabled_dark
    Left: native widget. Right: Codename One render.

  • Tabs_normal_light -- 86.44% fidelity (SSIM 0.8961) (no change)

    native Tabs_normal_light cn1 Tabs_normal_light
    Left: native widget. Right: Codename One render.

  • Toolbar_normal_light -- 87.64% fidelity (SSIM 0.9511) (no change)

    native Toolbar_normal_light cn1 Toolbar_normal_light
    Left: native widget. Right: Codename One render.

  • Toolbar_normal_dark -- 87.70% fidelity (SSIM 0.9495) (no change)

    native Toolbar_normal_dark cn1 Toolbar_normal_dark
    Left: native widget. Right: Codename One render.

  • FlatButton_pressed_dark -- 87.79% fidelity (SSIM 0.9664) (no change)

    native FlatButton_pressed_dark cn1 FlatButton_pressed_dark
    Left: native widget. Right: Codename One render.

  • RaisedButton_disabled_light -- 87.85% fidelity (SSIM 0.9455) (no change)

    native RaisedButton_disabled_light cn1 RaisedButton_disabled_light
    Left: native widget. Right: Codename One render.

  • FlatButton_normal_dark -- 87.88% fidelity (SSIM 0.9677) (no change)

    native FlatButton_normal_dark cn1 FlatButton_normal_dark
    Left: native widget. Right: Codename One render.

  • FlatButton_normal_light -- 88.16% fidelity (SSIM 0.9696) (no change)

    native FlatButton_normal_light cn1 FlatButton_normal_light
    Left: native widget. Right: Codename One render.

  • FlatButton_pressed_light -- 88.40% fidelity (SSIM 0.9676) (no change)

    native FlatButton_pressed_light cn1 FlatButton_pressed_light
    Left: native widget. Right: Codename One render.

  • RaisedButton_normal_light -- 89.72% fidelity (SSIM 0.9558) (no change)

    native RaisedButton_normal_light cn1 RaisedButton_normal_light
    Left: native widget. Right: Codename One render.

  • Button_normal_light -- 89.85% fidelity (SSIM 0.9486) (no change)

    native Button_normal_light cn1 Button_normal_light
    Left: native widget. Right: Codename One render.

  • RaisedButton_pressed_light -- 90.22% fidelity (SSIM 0.9578) (no change)

    native RaisedButton_pressed_light cn1 RaisedButton_pressed_light
    Left: native widget. Right: Codename One render.

  • TextField_normal_light -- 90.40% fidelity (SSIM 0.9614) (no change)

    native TextField_normal_light cn1 TextField_normal_light
    Left: native widget. Right: Codename One render.

  • RaisedButton_normal_dark -- 90.88% fidelity (SSIM 0.9621) (no change)

    native RaisedButton_normal_dark cn1 RaisedButton_normal_dark
    Left: native widget. Right: Codename One render.

  • Button_pressed_light -- 91.18% fidelity (SSIM 0.9492) (no change)

    native Button_pressed_light cn1 Button_pressed_light
    Left: native widget. Right: Codename One render.

  • RaisedButton_pressed_dark -- 91.35% fidelity (SSIM 0.9635) (no change)

    native RaisedButton_pressed_dark cn1 RaisedButton_pressed_dark
    Left: native widget. Right: Codename One render.

  • TextField_disabled_light -- 91.35% fidelity (SSIM 0.9651) (no change)

    native TextField_disabled_light cn1 TextField_disabled_light
    Left: native widget. Right: Codename One render.

  • Spinner_normal_dark -- 91.47% fidelity (SSIM 0.8933) (no change)

    native Spinner_normal_dark cn1 Spinner_normal_dark
    Left: native widget. Right: Codename One render.

  • Spinner_normal_light -- 91.79% fidelity (SSIM 0.9141) (no change)

    native Spinner_normal_light cn1 Spinner_normal_light
    Left: native widget. Right: Codename One render.

  • Switch_selected_light -- 92.13% fidelity (SSIM 0.9806) (no change)

    native Switch_selected_light cn1 Switch_selected_light
    Left: native widget. Right: Codename One render.

  • CheckBox_normal_light -- 92.16% fidelity (SSIM 0.9938) (no change)

    native CheckBox_normal_light cn1 CheckBox_normal_light
    Left: native widget. Right: Codename One render.

  • RadioButton_normal_light -- 92.16% fidelity (SSIM 0.9938) (no change)

    native RadioButton_normal_light cn1 RadioButton_normal_light
    Left: native widget. Right: Codename One render.

  • Slider_disabled_dark -- 92.44% fidelity (SSIM 0.9448) (no change)

    native Slider_disabled_dark cn1 Slider_disabled_dark
    Left: native widget. Right: Codename One render.

  • CheckBox_disabled_light -- 92.71% fidelity (SSIM 0.9953) (no change)

    native CheckBox_disabled_light cn1 CheckBox_disabled_light
    Left: native widget. Right: Codename One render.

  • RadioButton_disabled_light -- 92.71% fidelity (SSIM 0.9953) (no change)

    native RadioButton_disabled_light cn1 RadioButton_disabled_light
    Left: native widget. Right: Codename One render.

  • Slider_normal_dark -- 92.74% fidelity (SSIM 0.9458) (no change)

    native Slider_normal_dark cn1 Slider_normal_dark
    Left: native widget. Right: Codename One render.

  • TabsGeom_normal_dark -- 93.01% fidelity (SSIM 0.8920) (no change)

    native TabsGeom_normal_dark cn1 TabsGeom_normal_dark
    Left: native widget. Right: Codename One render.

  • TabsGeom_normal_light -- 93.02% fidelity (SSIM 0.8861) (no change)

    native TabsGeom_normal_light cn1 TabsGeom_normal_light
    Left: native widget. Right: Codename One render.

  • Slider_disabled_light -- 94.01% fidelity (SSIM 0.9626) (no change)

    native Slider_disabled_light cn1 Slider_disabled_light
    Left: native widget. Right: Codename One render.

  • ProgressBar_normal_dark -- 94.44% fidelity (SSIM 0.9788) (no change)

    native ProgressBar_normal_dark cn1 ProgressBar_normal_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_selected_light -- 94.84% fidelity (SSIM 0.9916) (no change)

    native RadioButton_selected_light cn1 RadioButton_selected_light
    Left: native widget. Right: Codename One render.

  • Slider_normal_light -- 95.13% fidelity (SSIM 0.9583) (no change)

    native Slider_normal_light cn1 Slider_normal_light
    Left: native widget. Right: Codename One render.

  • ProgressBar_normal_light -- 95.41% fidelity (SSIM 0.9836) (no change)

    native ProgressBar_normal_light cn1 ProgressBar_normal_light
    Left: native widget. Right: Codename One render.

  • Switch_normal_light -- 95.51% fidelity (SSIM 0.9863) (no change)

    native Switch_normal_light cn1 Switch_normal_light
    Left: native widget. Right: Codename One render.

  • Switch_disabled_dark -- 95.53% fidelity (SSIM 0.9778) (no change)

    native Switch_disabled_dark cn1 Switch_disabled_dark
    Left: native widget. Right: Codename One render.

  • TabOne_normal_light -- 95.62% fidelity (SSIM 0.9463) (no change)

    native TabOne_normal_light cn1 TabOne_normal_light
    Left: native widget. Right: Codename One render.

  • CheckBox_disabled_dark -- 95.76% fidelity (SSIM 0.9928) (no change)

    native CheckBox_disabled_dark cn1 CheckBox_disabled_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_disabled_dark -- 95.76% fidelity (SSIM 0.9928) (no change)

    native RadioButton_disabled_dark cn1 RadioButton_disabled_dark
    Left: native widget. Right: Codename One render.

  • CheckBox_selected_light -- 95.80% fidelity (SSIM 0.9938) (no change)

    native CheckBox_selected_light cn1 CheckBox_selected_light
    Left: native widget. Right: Codename One render.

  • Switch_selected_dark -- 95.90% fidelity (SSIM 0.9850) (no change)

    native Switch_selected_dark cn1 Switch_selected_dark
    Left: native widget. Right: Codename One render.

  • TabOne_normal_dark -- 96.04% fidelity (SSIM 0.9449) (no change)

    native TabOne_normal_dark cn1 TabOne_normal_dark
    Left: native widget. Right: Codename One render.

  • GlassPanelPhoto_normal_light -- 96.08% fidelity (SSIM 0.9696) (no change)

    native GlassPanelPhoto_normal_light cn1 GlassPanelPhoto_normal_light
    Left: native widget. Right: Codename One render.

  • GlassPanelPhoto_normal_dark -- 96.17% fidelity (SSIM 0.9724) (no change)

    native GlassPanelPhoto_normal_dark cn1 GlassPanelPhoto_normal_dark
    Left: native widget. Right: Codename One render.

  • Switch_disabled_light -- 96.31% fidelity (SSIM 0.9909) (no change)

    native Switch_disabled_light cn1 Switch_disabled_light
    Left: native widget. Right: Codename One render.

  • CheckBox_normal_dark -- 96.52% fidelity (SSIM 0.9927) (no change)

    native CheckBox_normal_dark cn1 CheckBox_normal_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_normal_dark -- 96.52% fidelity (SSIM 0.9927) (no change)

    native RadioButton_normal_dark cn1 RadioButton_normal_dark
    Left: native widget. Right: Codename One render.

  • Switch_normal_dark -- 96.80% fidelity (SSIM 0.9855) (no change)

    native Switch_normal_dark cn1 Switch_normal_dark
    Left: native widget. Right: Codename One render.

  • RadioButton_selected_dark -- 96.81% fidelity (SSIM 0.9908) (no change)

    native RadioButton_selected_dark cn1 RadioButton_selected_dark
    Left: native widget. Right: Codename One render.

  • Dialog_normal_dark -- 96.97% fidelity (SSIM 0.9479) (no change)

    native Dialog_normal_dark cn1 Dialog_normal_dark
    Left: native widget. Right: Codename One render.

  • TextField_normal_dark -- 97.08% fidelity (SSIM 0.9528) (no change)

    native TextField_normal_dark cn1 TextField_normal_dark
    Left: native widget. Right: Codename One render.

  • Dialog_normal_light -- 97.09% fidelity (SSIM 0.9505) (no change)

    native Dialog_normal_light cn1 Dialog_normal_light
    Left: native widget. Right: Codename One render.

  • TextField_disabled_dark -- 97.34% fidelity (SSIM 0.9555) (no change)

    native TextField_disabled_dark cn1 TextField_disabled_dark
    Left: native widget. Right: Codename One render.

  • CheckBox_selected_dark -- 97.79% fidelity (SSIM 0.9932) (no change)

    native CheckBox_selected_dark cn1 CheckBox_selected_dark
    Left: native widget. Right: Codename One render.

  • GlassPanelGrad_normal_light -- 98.24% fidelity (SSIM 0.9819) (no change)

    native GlassPanelGrad_normal_light cn1 GlassPanelGrad_normal_light
    Left: native widget. Right: Codename One render.

  • GlassPanelGrey_normal_light -- 98.38% fidelity (SSIM 0.9819) (no change)

    native GlassPanelGrey_normal_light cn1 GlassPanelGrey_normal_light
    Left: native widget. Right: Codename One render.

  • GlassPanelGrey_normal_dark -- 98.42% fidelity (SSIM 0.9816) (no change)

    native GlassPanelGrey_normal_dark cn1 GlassPanelGrey_normal_dark
    Left: native widget. Right: Codename One render.

  • GlassPanelGrad_normal_dark -- 98.43% fidelity (SSIM 0.9829) (no change)

    native GlassPanelGrad_normal_dark cn1 GlassPanelGrad_normal_dark
    Left: native widget. Right: Codename One render.

  • GlassPanelRed_normal_light -- 98.43% fidelity (SSIM 0.9823) (no change)

    native GlassPanelRed_normal_light cn1 GlassPanelRed_normal_light
    Left: native widget. Right: Codename One render.

  • GlassPanelRed_normal_dark -- 98.57% fidelity (SSIM 0.9832) (no change)

    native GlassPanelRed_normal_dark cn1 GlassPanelRed_normal_dark
    Left: native widget. Right: Codename One render.

  • GlassIcon_normal_dark -- 98.59% fidelity (SSIM 0.9841) (no change)

    native GlassIcon_normal_dark cn1 GlassIcon_normal_dark
    Left: native widget. Right: Codename One render.

  • GlassText_normal_dark -- 98.59% fidelity (SSIM 0.9837) (no change)

    native GlassText_normal_dark cn1 GlassText_normal_dark
    Left: native widget. Right: Codename One render.

  • GlassIcon_normal_light -- 98.67% fidelity (SSIM 0.9860) (no change)

    native GlassIcon_normal_light cn1 GlassIcon_normal_light
    Left: native widget. Right: Codename One render.

  • GlassText_normal_light -- 98.69% fidelity (SSIM 0.9862) (no change)

    native GlassText_normal_light cn1 GlassText_normal_light
    Left: native widget. Right: Codename One render.

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

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

Benchmark Results

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

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 52ms / native 3ms = 17.3x speedup
SIMD float-mul (64K x300) java 53ms / native 2ms = 26.5x 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 180.000 ms
Base64 CN1 decode 120.000 ms
Base64 native encode 881.000 ms
Base64 encode ratio (CN1/native) 0.204x (79.6% faster)
Base64 native decode 321.000 ms
Base64 decode ratio (CN1/native) 0.374x (62.6% faster)
Base64 SIMD encode 60.000 ms
Base64 encode ratio (SIMD/CN1) 0.333x (66.7% faster)
Base64 SIMD decode 46.000 ms
Base64 decode ratio (SIMD/CN1) 0.383x (61.7% faster)
Base64 encode ratio (SIMD/native) 0.068x (93.2% faster)
Base64 decode ratio (SIMD/native) 0.143x (85.7% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 7.000 ms
Image createMask (SIMD on) 1.000 ms
Image createMask ratio (SIMD on/off) 0.143x (85.7% faster)
Image applyMask (SIMD off) 49.000 ms
Image applyMask (SIMD on) 44.000 ms
Image applyMask ratio (SIMD on/off) 0.898x (10.2% faster)
Image modifyAlpha (SIMD off) 45.000 ms
Image modifyAlpha (SIMD on) 42.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.933x (6.7% faster)
Image modifyAlpha removeColor (SIMD off) 123.000 ms
Image modifyAlpha removeColor (SIMD on) 175.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 1.423x (42.3% slower)

@shai-almog

shai-almog commented Jul 12, 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 12, 2026

Copy link
Copy Markdown
Collaborator Author

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

Benchmark Results

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

Build and Run Timing

Metric Duration
Simulator Boot 66000 ms
Simulator Boot (Run) 0 ms
App Install 12000 ms
App Launch 2000 ms
Test Execution 370000 ms

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 69ms / native 4ms = 17.2x speedup
SIMD float-mul (64K x300) java 98ms / native 3ms = 32.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 178.000 ms
Base64 CN1 decode 122.000 ms
Base64 native encode 15436.000 ms
Base64 encode ratio (CN1/native) 0.012x (98.8% faster)
Base64 native decode 272.000 ms
Base64 decode ratio (CN1/native) 0.449x (55.1% faster)
Base64 SIMD encode 51.000 ms
Base64 encode ratio (SIMD/CN1) 0.287x (71.3% faster)
Base64 SIMD decode 52.000 ms
Base64 decode ratio (SIMD/CN1) 0.426x (57.4% faster)
Base64 encode ratio (SIMD/native) 0.003x (99.7% faster)
Base64 decode ratio (SIMD/native) 0.191x (80.9% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 7.000 ms
Image createMask (SIMD on) 2.000 ms
Image createMask ratio (SIMD on/off) 0.286x (71.4% faster)
Image applyMask (SIMD off) 45.000 ms
Image applyMask (SIMD on) 354.000 ms
Image applyMask ratio (SIMD on/off) 7.867x (686.7% slower)
Image modifyAlpha (SIMD off) 148.000 ms
Image modifyAlpha (SIMD on) 123.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.831x (16.9% faster)
Image modifyAlpha removeColor (SIMD off) 112.000 ms
Image modifyAlpha removeColor (SIMD on) 98.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.875x (12.5% faster)

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

Compared 137 screenshots: 137 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

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

Build and Run Timing

Metric Duration
Simulator Boot 91000 ms
Simulator Boot (Run) 1000 ms
App Install 26000 ms
App Launch 5000 ms
Test Execution 704000 ms

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 72ms / native 4ms = 18.0x speedup
SIMD float-mul (64K x300) java 90ms / native 3ms = 30.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 631.000 ms
Base64 CN1 decode 418.000 ms
Base64 native encode 1130.000 ms
Base64 encode ratio (CN1/native) 0.558x (44.2% faster)
Base64 native decode 529.000 ms
Base64 decode ratio (CN1/native) 0.790x (21.0% faster)
Base64 SIMD encode 72.000 ms
Base64 encode ratio (SIMD/CN1) 0.114x (88.6% faster)
Base64 SIMD decode 84.000 ms
Base64 decode ratio (SIMD/CN1) 0.201x (79.9% faster)
Base64 encode ratio (SIMD/native) 0.064x (93.6% faster)
Base64 decode ratio (SIMD/native) 0.159x (84.1% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 23.000 ms
Image createMask (SIMD on) 8.000 ms
Image createMask ratio (SIMD on/off) 0.348x (65.2% faster)
Image applyMask (SIMD off) 86.000 ms
Image applyMask (SIMD on) 233.000 ms
Image applyMask ratio (SIMD on/off) 2.709x (170.9% slower)
Image modifyAlpha (SIMD off) 108.000 ms
Image modifyAlpha (SIMD on) 282.000 ms
Image modifyAlpha ratio (SIMD on/off) 2.611x (161.1% slower)
Image modifyAlpha removeColor (SIMD off) 129.000 ms
Image modifyAlpha removeColor (SIMD on) 193.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 1.496x (49.6% slower)

@shai-almog

shai-almog commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator Author

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

@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

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.

1 participant