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.WorkManager
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
import app.loup.streams_channel.StreamsChannel
|
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.DeviceHandler
|
||||||
import deckers.thibault.aves.channel.calls.GeocodingHandler
|
import deckers.thibault.aves.channel.calls.GeocodingHandler
|
||||||
import deckers.thibault.aves.channel.calls.MediaStoreHandler
|
import deckers.thibault.aves.channel.calls.MediaStoreHandler
|
||||||
|
@ -86,6 +87,7 @@ class AnalysisWorker(context: Context, parameters: WorkerParameters) : Coroutine
|
||||||
|
|
||||||
// dart -> platform -> dart
|
// dart -> platform -> dart
|
||||||
// - need Context
|
// - need Context
|
||||||
|
MethodChannel(messenger, DebugHandler.CHANNEL).setMethodCallHandler(DebugHandler(context))
|
||||||
MethodChannel(messenger, DeviceHandler.CHANNEL).setMethodCallHandler(DeviceHandler(context))
|
MethodChannel(messenger, DeviceHandler.CHANNEL).setMethodCallHandler(DeviceHandler(context))
|
||||||
MethodChannel(messenger, GeocodingHandler.CHANNEL).setMethodCallHandler(GeocodingHandler(context))
|
MethodChannel(messenger, GeocodingHandler.CHANNEL).setMethodCallHandler(GeocodingHandler(context))
|
||||||
MethodChannel(messenger, MediaStoreHandler.CHANNEL).setMethodCallHandler(MediaStoreHandler(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.metadata.metadataextractor.Helper
|
||||||
import deckers.thibault.aves.model.FieldMap
|
import deckers.thibault.aves.model.FieldMap
|
||||||
import deckers.thibault.aves.utils.LogUtils
|
import deckers.thibault.aves.utils.LogUtils
|
||||||
|
import deckers.thibault.aves.utils.MemoryUtils
|
||||||
import deckers.thibault.aves.utils.MimeTypes
|
import deckers.thibault.aves.utils.MimeTypes
|
||||||
import deckers.thibault.aves.utils.MimeTypes.canReadWithExifInterface
|
import deckers.thibault.aves.utils.MimeTypes.canReadWithExifInterface
|
||||||
import deckers.thibault.aves.utils.MimeTypes.canReadWithMetadataExtractor
|
import deckers.thibault.aves.utils.MimeTypes.canReadWithMetadataExtractor
|
||||||
|
@ -52,6 +53,7 @@ class DebugHandler(private val context: Context) : MethodCallHandler {
|
||||||
"exceptionInCoroutine" -> ioScope.launch { throw TestException() }
|
"exceptionInCoroutine" -> ioScope.launch { throw TestException() }
|
||||||
"safeExceptionInCoroutine" -> ioScope.launch { safe(call, result) { _, _ -> throw TestException() } }
|
"safeExceptionInCoroutine" -> ioScope.launch { safe(call, result) { _, _ -> throw TestException() } }
|
||||||
|
|
||||||
|
"getAvailableHeapSize" -> safe(call, result, ::getAvailableHeapSize)
|
||||||
"getContextDirs" -> ioScope.launch { safe(call, result, ::getContextDirs) }
|
"getContextDirs" -> ioScope.launch { safe(call, result, ::getContextDirs) }
|
||||||
"getCodecs" -> safe(call, result, ::getCodecs)
|
"getCodecs" -> safe(call, result, ::getCodecs)
|
||||||
"getEnv" -> safe(call, result, ::getEnv)
|
"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) {
|
private fun getContextDirs(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
|
||||||
val dirs = hashMapOf(
|
val dirs = hashMapOf(
|
||||||
"cacheDir" to context.cacheDir,
|
"cacheDir" to context.cacheDir,
|
||||||
|
|
|
@ -7,11 +7,13 @@ object MemoryUtils {
|
||||||
|
|
||||||
fun canAllocate(byteSize: Number?): Boolean {
|
fun canAllocate(byteSize: Number?): Boolean {
|
||||||
byteSize ?: return true
|
byteSize ?: return true
|
||||||
val availableHeapSize = Runtime.getRuntime().let { it.maxMemory() - (it.totalMemory() - it.freeMemory()) }
|
val availableHeapSize = getAvailableHeapSize()
|
||||||
val danger = byteSize.toLong() > availableHeapSize
|
val danger = byteSize.toLong() > availableHeapSize
|
||||||
if (danger) {
|
if (danger) {
|
||||||
Log.e(LOG_TAG, "trying to handle $byteSize bytes, with only $availableHeapSize free bytes")
|
Log.e(LOG_TAG, "trying to handle $byteSize bytes, with only $availableHeapSize free bytes")
|
||||||
}
|
}
|
||||||
return !danger
|
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 {
|
static Future<Map> getContextDirs() async {
|
||||||
try {
|
try {
|
||||||
final result = await _platform.invokeMethod('getContextDirs');
|
final result = await _platform.invokeMethod('getContextDirs');
|
||||||
|
|
Loading…
Reference in a new issue