This commit is contained in:
2025-08-29 18:01:53 +09:00
parent 03086981e5
commit 32e38fda59
7 changed files with 145 additions and 23 deletions
@@ -33,24 +33,24 @@ class MyWallpaperService : WallpaperService() {
private val syncDelayMs = 250L // 상태 변경을 처리하기 전의 지연 시간
private var frameCount = 0
private val debugLogCheck = 240
private val renderRunnable = object : Runnable {
override fun run() {
if (!isVisible || !isSurfaceValid) return
// [수정] nativeRender -> render
nativeRenderer?.render(holder.surface)
frameCount++
if (frameCount % debugLogCheck == 0) {
frameCount = 0
// [수정] nativeGetDebugInfo -> getDebugInfo
val debugInfo = nativeRenderer?.getDebugInfo() ?: "Kotlin nativeRenderer is null"
Log.d(TAG, debugInfo)
}
handler.postDelayed(this, frameDelayMs)
}
}
// private val renderRunnable = object : Runnable {
// override fun run() {
// if (!isVisible || !isSurfaceValid) return
//
// // [수정] nativeRender -> render
// nativeRenderer?.render(holder.surface)
//
// frameCount++
// if (frameCount % debugLogCheck == 0) {
// frameCount = 0
// // [수정] nativeGetDebugInfo -> getDebugInfo
// val debugInfo = nativeRenderer?.getDebugInfo() ?: "Kotlin nativeRenderer is null"
// Log.d(TAG, debugInfo)
// }
//
// handler.postDelayed(this, frameDelayMs)
// }
// }
private val destroyRenderer = Runnable {
nativeRenderer?.destroy()
nativeRenderer = null
@@ -161,8 +161,9 @@ class MyWallpaperService : WallpaperService() {
private fun startRendering() {
if (isVisible && isSurfaceValid) {
Log.d(TAG, "startRendering: Conditions met. Starting loop. ${handler}")
handler.removeCallbacks(renderRunnable)
handler.post(renderRunnable)
// handler.removeCallbacks(renderRunnable)
// handler.post(renderRunnable)
nativeRenderer?.startRenderLoop(holder.surface)
} else {
Log.d(TAG, "startRendering: Conditions not met. Starting loop fail.")
}
@@ -172,7 +173,7 @@ class MyWallpaperService : WallpaperService() {
Log.w(TAG, "stopRendering: Stopping loop.")
// 핸들러가 초기화된 경우에만 콜백 제거 시도
if (::handler.isInitialized) {
handler.removeCallbacks(renderRunnable)
nativeRenderer?.stopRenderLoop()
} else {
Log.w(TAG, "stopRendering: Stopping loop. ${::handler.isInitialized}")
}
@@ -80,8 +80,25 @@ class NativeRenderer {
}
}
// --- Private JNI declarations ---
fun startRenderLoop(surface: Surface) {
if (nativeHandle != 0L) {
nativeStartRenderLoop(nativeHandle, surface)
} else {
"Kotlin Wrapper: Native handle is null."
}
}
fun stopRenderLoop() {
if (nativeHandle != 0L) {
nativeStopRenderLoop(nativeHandle)
} else {
"Kotlin Wrapper: Native handle is null."
}
}
// --- Private JNI declarations ---
private external fun nativeStartRenderLoop(nativeHandle: Long, surface: Surface)
private external fun nativeStopRenderLoop(nativeHandle: Long)
private external fun nativeInit(): Long
private external fun nativeDestroy(nativeHandle: Long)
private external fun nativeRender(nativeHandle: Long, surface: Surface)