debug: heap size
This commit is contained in:
parent
6192dea599
commit
01802f8aaa
4 changed files with 21 additions and 1 deletions
|
@ -14,6 +14,7 @@ import androidx.work.ForegroundInfo
|
|||
import androidx.work.WorkManager
|
||||
import androidx.work.WorkerParameters
|
||||
import app.loup.streams_channel.StreamsChannel
|
||||
import deckers.thibault.aves.channel.calls.DebugHandler
|
||||
import deckers.thibault.aves.channel.calls.DeviceHandler
|
||||
import deckers.thibault.aves.channel.calls.GeocodingHandler
|
||||
import deckers.thibault.aves.channel.calls.MediaStoreHandler
|
||||
|
@ -86,6 +87,7 @@ class AnalysisWorker(context: Context, parameters: WorkerParameters) : Coroutine
|
|||
|
||||
// dart -> platform -> dart
|
||||
// - need Context
|
||||
MethodChannel(messenger, DebugHandler.CHANNEL).setMethodCallHandler(DebugHandler(context))
|
||||
MethodChannel(messenger, DeviceHandler.CHANNEL).setMethodCallHandler(DeviceHandler(context))
|
||||
MethodChannel(messenger, GeocodingHandler.CHANNEL).setMethodCallHandler(GeocodingHandler(context))
|
||||
MethodChannel(messenger, MediaStoreHandler.CHANNEL).setMethodCallHandler(MediaStoreHandler(context))
|
||||
|
|
|
@ -20,6 +20,7 @@ import deckers.thibault.aves.metadata.Mp4ParserHelper.dumpBoxes
|
|||
import deckers.thibault.aves.metadata.metadataextractor.Helper
|
||||
import deckers.thibault.aves.model.FieldMap
|
||||
import deckers.thibault.aves.utils.LogUtils
|
||||
import deckers.thibault.aves.utils.MemoryUtils
|
||||
import deckers.thibault.aves.utils.MimeTypes
|
||||
import deckers.thibault.aves.utils.MimeTypes.canReadWithExifInterface
|
||||
import deckers.thibault.aves.utils.MimeTypes.canReadWithMetadataExtractor
|
||||
|
@ -52,6 +53,7 @@ class DebugHandler(private val context: Context) : MethodCallHandler {
|
|||
"exceptionInCoroutine" -> ioScope.launch { throw TestException() }
|
||||
"safeExceptionInCoroutine" -> ioScope.launch { safe(call, result) { _, _ -> throw TestException() } }
|
||||
|
||||
"getAvailableHeapSize" -> safe(call, result, ::getAvailableHeapSize)
|
||||
"getContextDirs" -> ioScope.launch { safe(call, result, ::getContextDirs) }
|
||||
"getCodecs" -> safe(call, result, ::getCodecs)
|
||||
"getEnv" -> safe(call, result, ::getEnv)
|
||||
|
@ -68,6 +70,10 @@ class DebugHandler(private val context: Context) : MethodCallHandler {
|
|||
}
|
||||
}
|
||||
|
||||
private fun getAvailableHeapSize(@Suppress("unused_parameter") methodCall: MethodCall, result: MethodChannel.Result) {
|
||||
result.success(MemoryUtils.getAvailableHeapSize())
|
||||
}
|
||||
|
||||
private fun getContextDirs(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
|
||||
val dirs = hashMapOf(
|
||||
"cacheDir" to context.cacheDir,
|
||||
|
|
|
@ -7,11 +7,13 @@ object MemoryUtils {
|
|||
|
||||
fun canAllocate(byteSize: Number?): Boolean {
|
||||
byteSize ?: return true
|
||||
val availableHeapSize = Runtime.getRuntime().let { it.maxMemory() - (it.totalMemory() - it.freeMemory()) }
|
||||
val availableHeapSize = getAvailableHeapSize()
|
||||
val danger = byteSize.toLong() > availableHeapSize
|
||||
if (danger) {
|
||||
Log.e(LOG_TAG, "trying to handle $byteSize bytes, with only $availableHeapSize free bytes")
|
||||
}
|
||||
return !danger
|
||||
}
|
||||
|
||||
fun getAvailableHeapSize() = Runtime.getRuntime().let { it.maxMemory() - (it.totalMemory() - it.freeMemory()) }
|
||||
}
|
|
@ -46,6 +46,16 @@ class AndroidDebugService {
|
|||
}
|
||||
}
|
||||
|
||||
static Future<int> getAvailableHeapSize() async {
|
||||
try {
|
||||
final result = await _platform.invokeMethod('getAvailableHeapSize');
|
||||
if (result != null) return result as int;
|
||||
} on PlatformException catch (e, stack) {
|
||||
await reportService.recordError(e, stack);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Future<Map> getContextDirs() async {
|
||||
try {
|
||||
final result = await _platform.invokeMethod('getContextDirs');
|
||||
|
|
Loading…
Reference in a new issue