Commit dcec8fef authored by Igor Demin's avatar Igor Demin

Ability to disable vsync

parent 812ea5a5
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="SkijaInjectSample (without vsync)" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$/samples/SkijaInjectSample" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="-Dskiko.vsync.enabled=false" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="run" />
</list>
</option>
<option name="vmOptions" value="" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>
\ No newline at end of file
......@@ -2,6 +2,8 @@ package org.jetbrains.skiko
@Suppress("SameParameterValue")
internal object SkikoProperties {
val vsyncEnabled: Boolean by property("skiko.vsync.enabled", default = true)
val fpsEnabled: Boolean by property("skiko.fps.enabled", default = false)
val fpsCount: Int by property("skiko.fps.count", default = 300)
val fpsProbability: Double by property("skiko.fps.probability", default = 0.97)
......
......@@ -8,6 +8,7 @@ import kotlinx.coroutines.withContext
import org.jetbrains.skiko.FrameDispatcher
import org.jetbrains.skiko.HardwareLayer
import org.jetbrains.skiko.OpenGLApi
import org.jetbrains.skiko.SkikoProperties
internal class LinuxRedrawer(
private val layer: HardwareLayer
......@@ -15,7 +16,7 @@ internal class LinuxRedrawer(
private val context = layer.lockDrawingSurface {
val context = it.createContext()
it.makeCurrent(context)
it.setSwapInterval(1)
it.setSwapInterval(if (SkikoProperties.vsyncEnabled) 1 else 0)
context
}
private var isDisposed = false
......
......@@ -6,6 +6,7 @@ import kotlinx.coroutines.swing.Swing
import org.jetbrains.skiko.FrameDispatcher
import org.jetbrains.skiko.HardwareLayer
import org.jetbrains.skiko.OpenGLApi
import org.jetbrains.skiko.SkikoProperties
import javax.swing.SwingUtilities.convertPoint
import javax.swing.SwingUtilities.getRootPane
......@@ -76,7 +77,9 @@ internal class MacOsRedrawer(
private val frameDispatcher = FrameDispatcher(Dispatchers.Swing) {
layer.update(System.nanoTime())
drawLayer.setNeedsDisplay()
vsyncLayer.sync()
if (SkikoProperties.vsyncEnabled) {
vsyncLayer.sync()
}
}
override fun dispose() = synchronized(drawLock) {
......
......@@ -8,6 +8,7 @@ import kotlinx.coroutines.withContext
import org.jetbrains.skiko.FrameDispatcher
import org.jetbrains.skiko.HardwareLayer
import org.jetbrains.skiko.OpenGLApi
import org.jetbrains.skiko.SkikoProperties
internal class WindowsRedrawer(
private val layer: HardwareLayer
......@@ -86,8 +87,10 @@ internal class WindowsRedrawer(
OpenGLApi.instance.glFinish()
}
withContext(Dispatchers.IO) {
dwmFlush() // wait for vsync
if (SkikoProperties.vsyncEnabled) {
withContext(Dispatchers.IO) {
dwmFlush() // wait for vsync
}
}
}
}
......
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