Log memory and when system calls App#onTrimMemory()
This commit is contained in:
parent
f188230269
commit
463fc33230
5 changed files with 45 additions and 1 deletions
|
@ -6,6 +6,8 @@
|
|||
package com.stevesoltys.seedvault
|
||||
|
||||
import android.Manifest.permission.INTERACT_ACROSS_USERS_FULL
|
||||
import android.app.ActivityManager
|
||||
import android.app.ActivityManager.RunningAppProcessInfo
|
||||
import android.app.Application
|
||||
import android.app.backup.BackupManager
|
||||
import android.app.backup.BackupManager.PACKAGE_MANAGER_SENTINEL
|
||||
|
@ -17,15 +19,16 @@ import android.os.ServiceManager.getService
|
|||
import android.os.StrictMode
|
||||
import android.os.UserHandle
|
||||
import android.os.UserManager
|
||||
import android.util.Log
|
||||
import androidx.work.ExistingPeriodicWorkPolicy.UPDATE
|
||||
import androidx.work.WorkManager
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import com.stevesoltys.seedvault.MemoryLogger.getMemStr
|
||||
import com.stevesoltys.seedvault.backend.BackendManager
|
||||
import com.stevesoltys.seedvault.backend.saf.storagePluginModuleSaf
|
||||
import com.stevesoltys.seedvault.backend.webdav.storagePluginModuleWebDav
|
||||
import com.stevesoltys.seedvault.crypto.cryptoModule
|
||||
import com.stevesoltys.seedvault.header.headerModule
|
||||
import com.stevesoltys.seedvault.metadata.MetadataManager
|
||||
import com.stevesoltys.seedvault.metadata.metadataModule
|
||||
import com.stevesoltys.seedvault.restore.install.installModule
|
||||
import com.stevesoltys.seedvault.restore.restoreUiModule
|
||||
|
@ -154,6 +157,15 @@ open class App : Application() {
|
|||
private val backendManager: BackendManager by inject()
|
||||
private val backupStateManager: BackupStateManager by inject()
|
||||
|
||||
override fun onTrimMemory(level: Int) {
|
||||
Log.w("Seedvault", "onTrimMemory($level) ${getMemStr()}")
|
||||
val processInfo = RunningAppProcessInfo()
|
||||
ActivityManager.getMyMemoryState(processInfo)
|
||||
Log.w("Seedvault", " lastTrimLevel: ${processInfo.lastTrimLevel}")
|
||||
Log.w("Seedvault", " importance: ${processInfo.importance}")
|
||||
super.onTrimMemory(level)
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables the framework scheduling in favor of our own.
|
||||
* Introduced in the first half of 2024 and can be removed after a suitable migration period.
|
||||
|
|
24
app/src/main/java/com/stevesoltys/seedvault/MemoryLogger.kt
Normal file
24
app/src/main/java/com/stevesoltys/seedvault/MemoryLogger.kt
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2024 The Calyx Institute
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.stevesoltys.seedvault
|
||||
|
||||
import android.util.Log
|
||||
|
||||
object MemoryLogger {
|
||||
|
||||
fun log() {
|
||||
Log.d("MemoryLogger", getMemStr())
|
||||
}
|
||||
|
||||
fun getMemStr(): String {
|
||||
val r = Runtime.getRuntime()
|
||||
val total = r.totalMemory() / 1024 / 1024
|
||||
val free = r.freeMemory() / 1024 / 1024
|
||||
val max = r.maxMemory() / 1024 / 1024
|
||||
val used = total - free
|
||||
return "$free MiB free - $used of $total (max $max)"
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
package com.stevesoltys.seedvault.transport.backup
|
||||
|
||||
import androidx.annotation.WorkerThread
|
||||
import com.stevesoltys.seedvault.MemoryLogger
|
||||
import com.stevesoltys.seedvault.backend.BackendManager
|
||||
import com.stevesoltys.seedvault.crypto.Crypto
|
||||
import com.stevesoltys.seedvault.settings.SettingsManager
|
||||
|
@ -52,6 +53,7 @@ internal class AppBackupManager(
|
|||
|
||||
@WorkerThread
|
||||
suspend fun afterBackupFinished(success: Boolean): com.stevesoltys.seedvault.proto.Snapshot? {
|
||||
MemoryLogger.log()
|
||||
log.info { "After backup finished. Success: $success" }
|
||||
// free up memory by clearing blobs cache
|
||||
blobCache.clear()
|
||||
|
@ -72,6 +74,7 @@ internal class AppBackupManager(
|
|||
null
|
||||
} finally {
|
||||
snapshotCreator = null
|
||||
MemoryLogger.log()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ package com.stevesoltys.seedvault.transport.backup
|
|||
|
||||
import android.content.Context
|
||||
import android.content.Context.MODE_APPEND
|
||||
import com.stevesoltys.seedvault.MemoryLogger
|
||||
import com.stevesoltys.seedvault.proto.Snapshot
|
||||
import com.stevesoltys.seedvault.proto.Snapshot.Blob
|
||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||
|
@ -41,6 +42,7 @@ class BlobCache(
|
|||
fun populateCache(blobs: List<FileInfo>, snapshots: List<Snapshot>) {
|
||||
log.info { "Getting all blobs from backend..." }
|
||||
blobMap.clear()
|
||||
MemoryLogger.log()
|
||||
// create map of blobId to size of blob on backend
|
||||
val blobIds = blobs.associate {
|
||||
Pair(it.fileHandle.name, it.size.toInt())
|
||||
|
@ -51,6 +53,7 @@ class BlobCache(
|
|||
snapshots.forEach { snapshot ->
|
||||
onSnapshotLoaded(snapshot, blobIds)
|
||||
}
|
||||
MemoryLogger.log()
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -8,6 +8,7 @@ package com.stevesoltys.seedvault.transport.backup
|
|||
import androidx.annotation.WorkerThread
|
||||
import com.github.luben.zstd.ZstdOutputStream
|
||||
import com.google.protobuf.ByteString
|
||||
import com.stevesoltys.seedvault.MemoryLogger
|
||||
import com.stevesoltys.seedvault.backend.BackendManager
|
||||
import com.stevesoltys.seedvault.crypto.Crypto
|
||||
import com.stevesoltys.seedvault.header.VERSION
|
||||
|
@ -61,6 +62,7 @@ internal class BlobCreator(
|
|||
// we could just write 0s, but because of defense in depth, we use random bytes
|
||||
cryptoStream.write(crypto.getRandomBytes(paddingSize))
|
||||
}
|
||||
MemoryLogger.log()
|
||||
payloadBuffer.clear()
|
||||
|
||||
// compute hash and save blob
|
||||
|
|
Loading…
Reference in a new issue