1. 20 Oct, 2023 1 commit
    • Igor Demin's avatar
      Make dispatcherToBlockOn dispatcher based on daemon threads. (#814) · 1cbde7b1
      Igor Demin authored
      After https://github.com/JetBrains/skiko/pull/798, we changed Dispatcher.IO to custom dispatcher.
      
      Dispatcher.IO is based on daemon threads (thread that receives InterruptException on application exit).
      
      Our new dispatcher isn't. The proof:
      ```
      import java.util.concurrent.Executors
      import kotlinx.coroutines.Dispatchers
      import kotlinx.coroutines.asCoroutineDispatcher
      import kotlinx.coroutines.runBlocking
      
      fun main() {
          runBlocking(Dispatchers.IO) {
              println(Thread.currentThread().isDaemon) // prints true
          }
          runBlocking(Executors.newCachedThreadPool().asCoroutineDispatcher()) {
              println(Thread.currentThread().isDaemon) // prints false
          }
          val defaultFactory = Executors.defaultThreadFactory()
          runBlocking(Executors.newCachedThreadPool {
              defaultFactory.newThread(it).apply {
                  isDaemon = true
              }
          }.asCoroutineDispatcher()) {
              println(Thread.currentThread().isDaemon) // prints true
          }
      }
      ```
      
      This PR makes threads daemon.
      
      Reported in [Kotlin Slack](https://kotlinlang.slack.com/archives/C01D6HTPATV/p1697400320739369) - applications exits too long.
      1cbde7b1
  2. 12 Oct, 2023 2 commits
  3. 09 Oct, 2023 2 commits
    • Igor Demin's avatar
      Fix crash on Windows machines without OpenGL (#811) · 2fac6861
      Igor Demin authored
      * Fix crash on Windows machines without OpenGL
      
      Some Windows CI machines don't contain OpenGL, so Skiko/Compose will crash on them. It shouldn't crash, it should fallback to Software rendering
      
      To properly fallback, we need to load opengl32.dll dynamically in runtime.
      
      Fixes https://github.com/JetBrains/compose-multiplatform/issues/3243
      
      # Test 1
      - `gradlew publishToMavenLocal` is successful (if we use functions directly, it fails with "error LNK2019: unresolved external symbol")
      - `SkiaLayerTest` is successful (it tests OpenGL as well)
      
      # Test 2
      1. Remove `C:\Windows\System32\opengl32.dll`
      2. `SkiaLayerTest` still should be successful, but logs should contain that it fallbacks to Software rendering.
      
      # Test 3
      1. Compile local skiko
      2. Run Compose run1 and tests
      
      * Refactor
      
      * Discussions
      
      * Discussions
      
      * Split throwJavaRenderException
      
      It isn't valid to use FormatMessage for code from GetLastError
      2fac6861
    • Oleksandr Karpovich's avatar
      Add more ptr checks in AWT.kt (#810) · bd47a99a
      Oleksandr Karpovich authored
      * Add more checks
      
      * Update skiko/src/awtMain/kotlin/org/jetbrains/skiko/redrawer/WindowsOpenGLRedrawer.kt
      
      * Update skiko/src/awtMain/kotlin/org/jetbrains/skiko/AWT.kt
      Co-authored-by: 's avatarIgor Demin <igordmn@users.noreply.github.com>
      
      * Update skiko/src/awtMain/kotlin/org/jetbrains/skiko/redrawer/WindowsOpenGLRedrawer.kt
      Co-authored-by: 's avatarIgor Demin <igordmn@users.noreply.github.com>
      
      ---------
      Co-authored-by: 's avatarIgor Demin <igordmn@users.noreply.github.com>
      bd47a99a
  4. 04 Oct, 2023 1 commit
  5. 28 Sep, 2023 1 commit
  6. 27 Sep, 2023 2 commits
  7. 26 Sep, 2023 1 commit
  8. 15 Sep, 2023 1 commit
    • Pavel's avatar
      Set kotlinx.coroutines to 1.7.3; Use limited parallelism instead of `Dispatchers.IO` (#798) · ea067413
      Pavel authored
      * set `kotlinx.coroutines` to `1.7.3`
      
      * update tests after coroutines.tests update
      
      * use `limitedParallelism` instead of bare `Dispatchers.IO`
      
      rename
      
      * use virtual time aware dispatchers in tests that use `runTest`
      
      * better naming
      
      * remove usages of experimental coroutines api
      
      * remove usages of experimental time api
      
      * use dispatcher from `coroutineScope` in `FrameLimiter`
      
      `FrameLimiter` must cancel waiting when its scope canceled
      
      * extract the `dispatcherToBlockOn` into separate file
      
      * use dispatcher from `coroutineScope` in `FrameLimiter`
      
      * Fix FrameLimiterTest
      
      ---------
      Co-authored-by: 's avatarIgor Demin <igor.demin@jetbrains.com>
      ea067413
  9. 11 Sep, 2023 1 commit
  10. 04 Sep, 2023 1 commit
  11. 22 Aug, 2023 1 commit
  12. 15 Aug, 2023 1 commit
  13. 14 Aug, 2023 1 commit
  14. 11 Aug, 2023 1 commit
  15. 08 Aug, 2023 1 commit
  16. 07 Aug, 2023 3 commits
    • Elijah Semyonov's avatar
      Update RELEASE.md (#785) · 38090dc7
      Elijah Semyonov authored
      * Update RELEASE.md
      
      * Update skiko/RELEASE.md
      Co-authored-by: 's avatardima.avdeev <dima.avdeev@jetbrains.com>
      
      ---------
      Co-authored-by: 's avatardima.avdeev <dima.avdeev@jetbrains.com>
      38090dc7
    • dima.avdeev's avatar
      Remove old TODO comment (#782) · e35c9362
      dima.avdeev authored
      e35c9362
    • Elijah Semyonov's avatar
      Fix MetalRedrawer being a source of leak (#771) · ee58078e
      Elijah Semyonov authored
      * Break strong cycle
      
      * Add test proving it
      
      * Remove dead code
      
      * Explain test
      
      * Add remark about two passes
      
      * Add temporary ignore on test
      
      * Use assertTrue instead of assertEquals
      
      * Update test to ignore CI failure on Metal not supported
      
      * Update test
      
      * Refactor to reflect insight about memory model
      
      * Add contract comment.
      
      * Break strong reference from CADisplayLink -> MetalRedrawer
      
      * Bind logical lifetime of MetalRedrawer to caDisplayLink
      
      * Bind logical lifetime of MetalRedrawer to caDisplayLink
      
      * Close skia context on MetalRedrawer dispose.
      
      * Use `check`
      
      * Fix tests on iOS with Metal on GitHub Actions (#783)
      
      * iOS simulator warmup
      
      * comment redundant for now
      
      * sim ID
      
      * iPhone 8
      
      * iPhone 14
      
      * env.IOS_SIM_UUID
      
      * remove redundant
      
      * one line cmd
      
      * one line cmd
      
      * device
      
      * device
      
      * property
      
      * retry 3 times
      
      * retry 3 times
      
      * retry 5 times
      
      * retry 10 times
      
      * testMetalIosX64
      
      * test test fails
      
      * kotlin 1.8.20
      
      * success test
      
      * success test
      
      * temp fail
      
      * success test
      
      * simplify
      
      * simplify
      
      * simplify
      
      * Added iOS Metal tests only on MacOS
      
      * Gradle, check targets before adding iosX64TestWithMetal task
      
      ---------
      Co-authored-by: 's avatardima.avdeev <dima.avdeev@jetbrains.com>
      ee58078e
  17. 03 Aug, 2023 1 commit
    • Elijah Semyonov's avatar
      Refactoring pass for iOS counterpart of Skiko (#781) · 163aec11
      Elijah Semyonov authored
      * Refactor SkikoUIView and Metal interaction
      
      * Move load logic to init
      
      * Remove dead code
      
      * Use contentScaleFactor for calculating drawable size
      
      * Move UITouch.isPressed to filescope
      
      * Add trace logs for anomaly situations
      163aec11
  18. 31 Jul, 2023 3 commits
  19. 26 Jul, 2023 1 commit
  20. 24 Jul, 2023 1 commit
    • Elijah Semyonov's avatar
      Prevent needRedraw reentry on iOS (#769) · 68677fd5
      Elijah Semyonov authored
      * Move flush to `finally` block.
      
      * Prevent reentry when scene is invalidated within draw.
      
      * Revert "Move flush to `finally` block."
      
      This reverts commit 25b04b811c2425c27a04b7508dbd7de70b8ef735.
      
      * Prevent within frameListener as well.
      68677fd5
  21. 21 Jul, 2023 2 commits
  22. 19 Jul, 2023 1 commit
  23. 18 Jul, 2023 2 commits
  24. 10 Jul, 2023 1 commit
  25. 07 Jul, 2023 1 commit
  26. 06 Jul, 2023 4 commits
  27. 05 Jul, 2023 2 commits