1. 02 Jul, 2026 1 commit
  2. 26 Jun, 2026 1 commit
  3. 22 Jun, 2026 1 commit
  4. 19 Jun, 2026 2 commits
  5. 17 Jun, 2026 1 commit
  6. 16 Jun, 2026 1 commit
  7. 10 Jun, 2026 5 commits
    • Hubert Błaszczyk's avatar
      Control Skia symbols visibility across platforms (#1208) · a2fefe03
      Hubert Błaszczyk authored
      To extract Skottie and other extensions from Skiko core, we need to
      expose certain private symbols from skia. This requires creating tasks
      to control the visibility of Skia symbols.
      
      To control visibility of symbols the following things were applied:
      
      ### JVM
      We are generating a lists of symbols that we want to export. To obtain
      the symbols we're doing the following:
      
      1. Collecting all globally defined symbols from the core Skiko/Skia
      inputs: Skia static libraries plus core object files.
      2. Collecting all undefined symbols from extension/module inputs. These
      represent symbols that extension modules need the core library to
      provide.
      3. Adding JNI infrastructure symbols from the core exports, such as
      `Java_`, `JNI`, and `jvm`, so the JVM can still find the native entry
      points.
      4. Intersecting the extension imports with the core exports. The result
      is the list of core symbols that should stay exported.
      
      Generated symbol list it then passed to the linker which hide symbols we
      don't need to have visible.
      
      ### Native 
      For Native targets, Skia is linked into the final produced binary rather
      than exposed as a shared "core" library that extension modules link
      against. Because of that, Skia symbols do not need to remain externally
      visible for other Skiko modules to resolve against them.
      Since we are going to build Skia from our fork with Skia symbols public
      by default we need to hide them on native.
      
      ### WASM
      This PR does not include wasm parser as we don't need it. We can first
      create the wasm binary for extension functions and then provide them
      when compiling the core. This will allow to export only symbols that are
      needed by the extension modules automatically. This will be introduced
      in the PR with Skottie extraction.
      
      Closes [SKIKO-1142](https://youtrack.jetbrains.com/issue/SKIKO-1142)
      a2fefe03
    • Ivan Matkov's avatar
      Update gradle wrapper to match updated version (9.5.0) (#1212) · f532abfc
      Ivan Matkov authored
      Missing part after #1196
      
      Updated automatically via run of
      `./gradlew wrapper --gradle-version 9.5.0`
      f532abfc
    • Hubert Błaszczyk's avatar
      Fix BreakIterator.setText Android crash (#1211) · 9d804ff3
      Hubert Błaszczyk authored
      Fixes:
      ```
      03:57:36.872  A  java_vm_ext.cc:598] JNI DETECTED ERROR IN APPLICATION: incompatible array type short[] expected char[]: 0x7fd297fa00
                       java_vm_ext.cc:598]     in call to GetCharArrayRegion
                       java_vm_ext.cc:598]     from long org.jetbrains.skia.BreakIteratorKt._nSetText(long, java.lang.Object, int, java.lang.Object)
      ```
      9d804ff3
    • Ivan Matkov's avatar
      AGP 9 migration: upgrade wrappers to Gradle 9.5 and fix sample runtime flows (#1196) · cb5f4865
      Ivan Matkov authored
      - Upgrade Gradle wrappers to `9.5.0` across root and sample projects.
      - Migrate Android build logic to AGP 9-compatible APIs (including KMP
      Android integration updates).
      - Fix `SkiaMultiplatformSample` iOS simulator run flow:
        - remove `applePlugin` usage
      - replace invalid simctl spawn `--standalone <kexe>` with app bundle
      install + launch
        - add `-Pskiko.iosSimulatorDevice=<device>` for simulator targeting
        - fix `IosClocks` renderApi reference typo
      - Disable Kotlin JS Yarn lock generation in JS-enabled projects
      cb5f4865
    • Vladimir Mazunin's avatar
  8. 09 Jun, 2026 1 commit
    • Kartikey Garasiya's avatar
      Set render-target usage on the Metal Swing offscreen texture (#1207) · 6bcc77c4
      Kartikey Garasiya authored
      Fixes a crash in offscreen Metal Swing rendering (`SkiaSwingLayer`) when
      running against a Skia build with Metal API validation enabled.
      
      `MetalSwingRedrawer.mm` (`makeMetalTexture`) creates the offscreen
      texture with `texture2DDescriptorWithPixelFormat:...`, which defaults
      `.usage` to `MTLTextureUsageShaderRead`. The same texture is then
      wrapped as a `GrBackendRenderTarget` and rendered into, so on a debug
      Skia `GrMtlGpu::onWrapBackendRenderTarget` asserts:
      
      ```
      check(MTLTextureUsageRenderTarget & mtlTexture.usage)
      ```
      
      and the process SIGTRAPs on the first paint. On a release Skia the
      assert is compiled out and Metal tolerates the missing flag, so the bug
      is latent there (and CI, which builds against release Skia, never sees
      it). Present since `MetalSwingRedrawer` was added (v0.144.6), unchanged
      on current `master`.
      
      The fix sets the usage bits explicitly — `RenderTarget` because Skia
      renders into the texture, `ShaderRead` because it is then sampled when
      blitted back to `Graphics2D`:
      
      ```objc
      textureDescriptor.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead;
      ```
      
      Repro (stock skiko + the published Debug Skia):
      
      ```
      git clone --depth 1 --branch v0.144.6 https://github.com/JetBrains/skiko.git
      ./gradlew :skiko:publishToMavenLocal -Pskiko.debug=true
      # paint any offscreen SkiaSwingLayer on macOS -> SIGTRAP on first paint
      ```
      
      Validated: `:skiko:awtTest` green; a 2400-frame `SkiaSwingLayer` soak on
      the debug Skia runs leak-free (median frame 2.4 ms, RSS flat) where it
      previously crashed on frame 1. No behavior change on release builds —
      the change is descriptor-time only.
      
      Release Notes - Fixes a crash in offscreen Metal Swing rendering
      (`SkiaSwingLayer`) when running against a Skia build with Metal API
      validation enabled.
      
      Fixes [SKIKO-1144](https://youtrack.jetbrains.com/issue/SKIKO-1144)
      6bcc77c4
  9. 05 Jun, 2026 1 commit
  10. 04 Jun, 2026 1 commit
  11. 02 Jun, 2026 1 commit
  12. 01 Jun, 2026 1 commit
  13. 27 May, 2026 3 commits
  14. 18 May, 2026 2 commits
  15. 04 May, 2026 1 commit
  16. 27 Apr, 2026 1 commit
  17. 24 Apr, 2026 1 commit
    • Bogdan Mitrović's avatar
      Fix PathSegment.hashCode() not handling PathVerb.CLOSE (#1194) · 9b179119
      Bogdan Mitrović authored
      PathSegment.hashCode() threw RuntimeException("Unreachable") for
      PathVerb.CLOSE segments when used in hash-based collections such as
      intersect(). Added CLOSE case consistent with what equals() checks for
      CLOSE segments. Also removed the else branch since all PathVerb values
      are now handled. Added a test which fails unless CLOSE is handled in
      hashCode().
      
      ## Testing
      Ran test on awt locally — the new test `closedPathIntersectTest` fails 
      before the fix and passes after.
      
      ## Release Notes
      Fix crash when using closed paths in hash-based collections such as
      `intersect()`
      
      Fixes: [SKIKO-1038](https://youtrack.jetbrains.com/issue/SKIKO-1038)
      9b179119
  18. 23 Apr, 2026 2 commits
  19. 22 Apr, 2026 1 commit
  20. 17 Apr, 2026 1 commit
  21. 09 Apr, 2026 1 commit
  22. 07 Apr, 2026 1 commit
  23. 24 Mar, 2026 1 commit
  24. 23 Mar, 2026 1 commit
  25. 13 Mar, 2026 1 commit
  26. 06 Mar, 2026 1 commit
  27. 05 Mar, 2026 1 commit
  28. 03 Mar, 2026 1 commit
  29. 02 Mar, 2026 1 commit
  30. 26 Feb, 2026 2 commits