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 ...@@ -25,12 +25,6 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_RenderTargetsKt_makeGLContextNa
return reinterpret_cast<jlong>(GrDirectContext::MakeGL().release()); 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); extern void getMetalDeviceAndQueue(void** device, void** queue);
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_RenderTargetsKt_makeMetalRenderTargetNative( JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_RenderTargetsKt_makeMetalRenderTargetNative(
......
...@@ -24,5 +24,3 @@ external private fun makeGLContextNative(): Long ...@@ -24,5 +24,3 @@ external private fun makeGLContextNative(): Long
external private fun makeMetalRenderTargetNative(width: Int, height: Int, sampleCnt: Int): Long external private fun makeMetalRenderTargetNative(width: Int, height: Int, sampleCnt: Int): Long
external private fun makeMetalContextNative(): Long external private fun makeMetalContextNative(): Long
external internal fun destroyContext(context: Long)
package org.jetbrains.skiko 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.ContextHandler
import org.jetbrains.skiko.context.createContextHandler import org.jetbrains.skiko.context.createContextHandler
import org.jetbrains.skiko.redrawer.Redrawer import org.jetbrains.skiko.redrawer.Redrawer
import java.awt.Graphics 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.JPanel
import javax.swing.SwingUtilities.isEventDispatchThread import javax.swing.SwingUtilities.isEventDispatchThread
...@@ -99,7 +108,6 @@ open class SkiaLayer( ...@@ -99,7 +108,6 @@ open class SkiaLayer(
if (isInited) { if (isInited) {
redrawer?.dispose() // we should dispose redrawer first (to cancel `draw` in rendering thread) redrawer?.dispose() // we should dispose redrawer first (to cancel `draw` in rendering thread)
contextHandler?.dispose() contextHandler?.dispose()
contextHandler?.destroyContext()
picture?.instance?.close() picture?.instance?.close()
pictureRecorder.close() pictureRecorder.close()
backedLayer.dispose() backedLayer.dispose()
......
...@@ -6,11 +6,9 @@ import org.jetbrains.skija.DirectContext ...@@ -6,11 +6,9 @@ import org.jetbrains.skija.DirectContext
import org.jetbrains.skija.Picture import org.jetbrains.skija.Picture
import org.jetbrains.skija.Surface import org.jetbrains.skija.Surface
import org.jetbrains.skiko.GraphicsApi import org.jetbrains.skiko.GraphicsApi
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.OS import org.jetbrains.skiko.OS
import org.jetbrains.skiko.SkikoProperties import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.hostOs import org.jetbrains.skiko.hostOs
import org.jetbrains.skiko.redrawer.Redrawer
internal fun createContextHandler(layer: SkiaLayer, renderApi: GraphicsApi): ContextHandler { internal fun createContextHandler(layer: SkiaLayer, renderApi: GraphicsApi): ContextHandler {
return when (renderApi) { return when (renderApi) {
...@@ -45,9 +43,14 @@ internal abstract class ContextHandler(val layer: SkiaLayer) { ...@@ -45,9 +43,14 @@ internal abstract class ContextHandler(val layer: SkiaLayer) {
} }
fun dispose() { fun dispose() {
disposeCanvas()
destroyContext()
}
fun disposeCanvas() {
surface?.close() surface?.close()
renderTarget?.close() renderTarget?.close()
} }
open fun destroyContext() = Unit protected open fun destroyContext() = Unit
} }
package org.jetbrains.skiko.context package org.jetbrains.skiko.context
import java.lang.ref.Reference
import org.jetbrains.skija.ColorSpace import org.jetbrains.skija.ColorSpace
import org.jetbrains.skija.FramebufferFormat
import org.jetbrains.skija.Picture
import org.jetbrains.skija.Surface import org.jetbrains.skija.Surface
import org.jetbrains.skija.SurfaceColorFormat import org.jetbrains.skija.SurfaceColorFormat
import org.jetbrains.skija.SurfaceOrigin import org.jetbrains.skija.SurfaceOrigin
import org.jetbrains.skija.impl.Native import org.jetbrains.skija.impl.Native
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.Direct3DRedrawer import org.jetbrains.skiko.redrawer.Direct3DRedrawer
import org.jetbrains.skiko.redrawer.Redrawer import java.lang.ref.Reference
import org.jetbrains.skiko.destroyContext
internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer) { internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
val directXRedrawer: Direct3DRedrawer val directXRedrawer: Direct3DRedrawer
...@@ -35,7 +31,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer) ...@@ -35,7 +31,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer)
} }
override fun initCanvas() { override fun initCanvas() {
dispose() disposeCanvas()
val scale = layer.contentScale val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0) val w = (layer.width * scale).toInt().coerceAtLeast(0)
...@@ -69,6 +65,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer) ...@@ -69,6 +65,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer)
} }
override fun destroyContext() { override fun destroyContext() {
destroyContext(Native.getPtr(context!!)) context?.close()
directXRedrawer.disposeDevice(device)
} }
} }
...@@ -4,10 +4,9 @@ import org.jetbrains.skija.ColorSpace ...@@ -4,10 +4,9 @@ import org.jetbrains.skija.ColorSpace
import org.jetbrains.skija.Surface import org.jetbrains.skija.Surface
import org.jetbrains.skija.SurfaceColorFormat import org.jetbrains.skija.SurfaceColorFormat
import org.jetbrains.skija.SurfaceOrigin import org.jetbrains.skija.SurfaceOrigin
import org.jetbrains.skija.impl.Native
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.MetalRedrawer import org.jetbrains.skiko.redrawer.MetalRedrawer
import org.jetbrains.skija.impl.Native
import org.jetbrains.skiko.destroyContext
internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) { internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
val metalRedrawer: MetalRedrawer val metalRedrawer: MetalRedrawer
...@@ -26,7 +25,7 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) { ...@@ -26,7 +25,7 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
} }
override fun initCanvas() { override fun initCanvas() {
dispose() disposeCanvas()
val scale = layer.contentScale val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0) val w = (layer.width * scale).toInt().coerceAtLeast(0)
...@@ -52,6 +51,6 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) { ...@@ -52,6 +51,6 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
} }
override fun destroyContext() { override fun destroyContext() {
destroyContext(Native.getPtr(context!!)) context?.close()
} }
} }
...@@ -2,15 +2,13 @@ package org.jetbrains.skiko.context ...@@ -2,15 +2,13 @@ package org.jetbrains.skiko.context
import org.jetbrains.skija.ColorSpace import org.jetbrains.skija.ColorSpace
import org.jetbrains.skija.FramebufferFormat import org.jetbrains.skija.FramebufferFormat
import org.jetbrains.skija.Picture
import org.jetbrains.skija.Surface import org.jetbrains.skija.Surface
import org.jetbrains.skija.SurfaceColorFormat import org.jetbrains.skija.SurfaceColorFormat
import org.jetbrains.skija.SurfaceOrigin import org.jetbrains.skija.SurfaceOrigin
import org.jetbrains.skiko.OpenGLApi
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.makeGLContext import org.jetbrains.skiko.makeGLContext
import org.jetbrains.skiko.makeGLRenderTarget import org.jetbrains.skiko.makeGLRenderTarget
import org.jetbrains.skiko.OpenGLApi
import org.jetbrains.skiko.redrawer.Redrawer
internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) { internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
override fun initContext(): Boolean { override fun initContext(): Boolean {
...@@ -26,7 +24,7 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) { ...@@ -26,7 +24,7 @@ internal class OpenGLContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
} }
override fun initCanvas() { override fun initCanvas() {
dispose() disposeCanvas()
val scale = layer.contentScale val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0) val w = (layer.width * scale).toInt().coerceAtLeast(0)
......
package org.jetbrains.skiko.context package org.jetbrains.skiko.context
import java.awt.AlphaComposite import org.jetbrains.skija.Bitmap
import java.awt.color.ColorSpace import org.jetbrains.skija.Canvas
import java.awt.Color import org.jetbrains.skija.ColorAlphaType
import java.awt.Graphics2D import org.jetbrains.skija.ImageInfo
import org.jetbrains.skija.Picture
import org.jetbrains.skiko.SkiaLayer
import java.awt.Transparency import java.awt.Transparency
import java.awt.image.ComponentColorModel import java.awt.color.ColorSpace
import java.awt.image.BufferedImage import java.awt.image.BufferedImage
import java.awt.image.ComponentColorModel
import java.awt.image.DataBuffer import java.awt.image.DataBuffer
import java.awt.image.DataBufferByte import java.awt.image.DataBufferByte
import java.awt.image.WritableRaster
import java.awt.image.Raster import java.awt.image.Raster
import org.jetbrains.skija.Bitmap import java.awt.image.WritableRaster
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
internal class SoftwareContextHandler(layer: SkiaLayer) : ContextHandler(layer) { internal class SoftwareContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
override val bleachConstant = -1 // it looks like java.awt.Canvas doesn't support transparency 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) ...@@ -40,7 +36,7 @@ internal class SoftwareContextHandler(layer: SkiaLayer) : ContextHandler(layer)
} }
override fun initCanvas() { override fun initCanvas() {
dispose() disposeCanvas()
val scale = layer.contentScale val scale = layer.contentScale
val w = (layer.width * scale).toInt().coerceAtLeast(0) val w = (layer.width * scale).toInt().coerceAtLeast(0)
......
...@@ -14,7 +14,6 @@ internal class Direct3DRedrawer( ...@@ -14,7 +14,6 @@ internal class Direct3DRedrawer(
) : Redrawer { ) : Redrawer {
private var isDisposed = false private var isDisposed = false
private var device: Long = 0
private val frameDispatcher = FrameDispatcher(Dispatchers.Swing) { private val frameDispatcher = FrameDispatcher(Dispatchers.Swing) {
update(System.nanoTime()) update(System.nanoTime())
...@@ -23,7 +22,6 @@ internal class Direct3DRedrawer( ...@@ -23,7 +22,6 @@ internal class Direct3DRedrawer(
override fun dispose() { override fun dispose() {
frameDispatcher.cancel() frameDispatcher.cancel()
disposeDevice(device)
isDisposed = true isDisposed = true
} }
...@@ -54,10 +52,7 @@ internal class Direct3DRedrawer( ...@@ -54,10 +52,7 @@ internal class Direct3DRedrawer(
makeDirectXRenderTarget(device, width, height) makeDirectXRenderTarget(device, width, height)
) )
fun createDevice(): Long { fun createDevice(): Long = createDirectXDevice(layer.windowHandle)
device = createDirectXDevice(layer.windowHandle)
return device
}
fun finishFrame(device: Long, context: Long, surface: Long) { fun finishFrame(device: Long, context: Long, surface: Long) {
finishFrame(device, context, surface, properties.isVsyncEnabled) 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