Unverified Commit b0bcda7b authored by Igor Demin's avatar Igor Demin Committed by GitHub

Merge pull request #87 from JetBrains/fix_test

Fix "open windows stress test"
parents 4c99e1d3 8d9c9693
......@@ -25,12 +25,6 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_RenderTargetsKt_makeGLContextNa
return reinterpret_cast<jlong>(GrDirectContext::MakeGL().release());
}
JNIEXPORT void JNICALL Java_org_jetbrains_skiko_RenderTargetsKt_destroyContext(JNIEnv *env, jobject object, jlong contextPtr)
{
GrDirectContext *context = fromJavaPointer<GrDirectContext*>(contextPtr);
delete context;
}
extern void getMetalDeviceAndQueue(void** device, void** queue);
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_RenderTargetsKt_makeMetalRenderTargetNative(
......
......@@ -24,5 +24,3 @@ external private fun makeGLContextNative(): Long
external private fun makeMetalRenderTargetNative(width: Int, height: Int, sampleCnt: Int): Long
external private fun makeMetalContextNative(): Long
external internal fun destroyContext(context: Long)
package org.jetbrains.skiko
import org.jetbrains.skija.*
import org.jetbrains.skija.Canvas
import org.jetbrains.skija.ClipMode
import org.jetbrains.skija.Picture
import org.jetbrains.skija.PictureRecorder
import org.jetbrains.skija.Rect
import org.jetbrains.skiko.context.ContextHandler
import org.jetbrains.skiko.context.createContextHandler
import org.jetbrains.skiko.redrawer.Redrawer
import java.awt.Graphics
import java.awt.event.*
import java.awt.event.HierarchyEvent
import java.awt.event.InputMethodListener
import java.awt.event.KeyListener
import java.awt.event.MouseListener
import java.awt.event.MouseMotionListener
import java.awt.event.MouseWheelListener
import javax.swing.JPanel
import javax.swing.SwingUtilities.isEventDispatchThread
......@@ -99,7 +108,6 @@ open class SkiaLayer(
if (isInited) {
redrawer?.dispose() // we should dispose redrawer first (to cancel `draw` in rendering thread)
contextHandler?.dispose()
contextHandler?.destroyContext()
picture?.instance?.close()
pictureRecorder.close()
backedLayer.dispose()
......
......@@ -6,11 +6,9 @@ import org.jetbrains.skija.DirectContext
import org.jetbrains.skija.Picture
import org.jetbrains.skija.Surface
import org.jetbrains.skiko.GraphicsApi
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.OS
import org.jetbrains.skiko.SkikoProperties
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.hostOs
import org.jetbrains.skiko.redrawer.Redrawer
internal fun createContextHandler(layer: SkiaLayer, renderApi: GraphicsApi): ContextHandler {
return when (renderApi) {
......@@ -45,9 +43,14 @@ internal abstract class ContextHandler(val layer: SkiaLayer) {
}
fun dispose() {
disposeCanvas()
destroyContext()
}
fun disposeCanvas() {
surface?.close()
renderTarget?.close()
}
open fun destroyContext() = Unit
protected open fun destroyContext() = Unit
}
package org.jetbrains.skiko.context
import java.lang.ref.Reference
import org.jetbrains.skija.ColorSpace
import org.jetbrains.skija.FramebufferFormat
import org.jetbrains.skija.Picture
import org.jetbrains.skija.Surface
import org.jetbrains.skija.SurfaceColorFormat
import org.jetbrains.skija.SurfaceOrigin
import org.jetbrains.skija.impl.Native
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.Direct3DRedrawer
import org.jetbrains.skiko.redrawer.Redrawer
import org.jetbrains.skiko.destroyContext
import java.lang.ref.Reference
internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
val directXRedrawer: Direct3DRedrawer
......@@ -35,7 +31,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer)
}
override fun initCanvas() {
dispose()
disposeCanvas()
val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0)
......@@ -69,6 +65,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer)
}
override fun destroyContext() {
destroyContext(Native.getPtr(context!!))
context?.close()
directXRedrawer.disposeDevice(device)
}
}
......@@ -4,10 +4,9 @@ import org.jetbrains.skija.ColorSpace
import org.jetbrains.skija.Surface
import org.jetbrains.skija.SurfaceColorFormat
import org.jetbrains.skija.SurfaceOrigin
import org.jetbrains.skija.impl.Native
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.MetalRedrawer
import org.jetbrains.skija.impl.Native
import org.jetbrains.skiko.destroyContext
internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
val metalRedrawer: MetalRedrawer
......@@ -26,7 +25,7 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
}
override fun initCanvas() {
dispose()
disposeCanvas()
val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0)
......@@ -52,6 +51,6 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
}
override fun destroyContext() {
destroyContext(Native.getPtr(context!!))
context?.close()
}
}
......@@ -2,15 +2,13 @@ package org.jetbrains.skiko.context
import org.jetbrains.skija.ColorSpace
import org.jetbrains.skija.FramebufferFormat
import org.jetbrains.skija.Picture
import org.jetbrains.skija.Surface
import org.jetbrains.skija.SurfaceColorFormat
import org.jetbrains.skija.SurfaceOrigin
import org.jetbrains.skiko.OpenGLApi
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.makeGLContext
import org.jetbrains.skiko.makeGLRenderTarget
import org.jetbrains.skiko.OpenGLApi
import org.jetbrains.skiko.redrawer.Redrawer
internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
override fun initContext(): Boolean {
......@@ -26,7 +24,7 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
}
override fun initCanvas() {
dispose()
disposeCanvas()
val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0)
......
package org.jetbrains.skiko.context
import java.awt.AlphaComposite
import java.awt.color.ColorSpace
import java.awt.Color
import java.awt.Graphics2D
import org.jetbrains.skija.Bitmap
import org.jetbrains.skija.Canvas
import org.jetbrains.skija.ColorAlphaType
import org.jetbrains.skija.ImageInfo
import org.jetbrains.skija.Picture
import org.jetbrains.skiko.SkiaLayer
import java.awt.Transparency
import java.awt.image.ComponentColorModel
import java.awt.color.ColorSpace
import java.awt.image.BufferedImage
import java.awt.image.ComponentColorModel
import java.awt.image.DataBuffer
import java.awt.image.DataBufferByte
import java.awt.image.WritableRaster
import java.awt.image.Raster
import org.jetbrains.skija.Bitmap
import org.jetbrains.skija.ColorAlphaType
import org.jetbrains.skija.Canvas
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skija.ImageInfo
import org.jetbrains.skija.Picture
import org.jetbrains.skiko.redrawer.Redrawer
import java.awt.image.WritableRaster
internal class SoftwareContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
override val bleachConstant = -1 // it looks like java.awt.Canvas doesn't support transparency
......@@ -40,7 +36,7 @@ internal class SoftwareContextHandler(layer: SkiaLayer) : ContextHandler(layer)
}
override fun initCanvas() {
dispose()
disposeCanvas()
val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0)
......
......@@ -14,7 +14,6 @@ internal class Direct3DRedrawer(
) : Redrawer {
private var isDisposed = false
private var device: Long = 0
private val frameDispatcher = FrameDispatcher(Dispatchers.Swing) {
update(System.nanoTime())
......@@ -23,7 +22,6 @@ internal class Direct3DRedrawer(
override fun dispose() {
frameDispatcher.cancel()
disposeDevice(device)
isDisposed = true
}
......@@ -54,10 +52,7 @@ internal class Direct3DRedrawer(
makeDirectXRenderTarget(device, width, height)
)
fun createDevice(): Long {
device = createDirectXDevice(layer.windowHandle)
return device
}
fun createDevice(): Long = createDirectXDevice(layer.windowHandle)
fun finishFrame(device: Long, context: Long, surface: Long) {
finishFrame(device, context, surface, properties.isVsyncEnabled)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment