fun persistStats()

in core/src/main/java/com/github/shadowsocks/bg/TrafficMonitor.kt [87:106]


    fun persistStats(id: Long) {
        val current = current
        check(persisted == null || persisted == current) { "Data loss occurred" }
        persisted = current
        try {
            // profile may have host, etc. modified and thus a re-fetch is necessary (possible race condition)
            val profile = ProfileManager.getProfile(id) ?: return
            profile.tx += current.txTotal
            profile.rx += current.rxTotal
            ProfileManager.updateProfile(profile)
        } catch (e: IOException) {
            if (!DataStore.directBootAware) throw e // we should only reach here because we're in direct boot
            val profile = DirectBoot.getDeviceProfile()!!.toList().single { it.id == id }
            profile.tx += current.txTotal
            profile.rx += current.rxTotal
            profile.dirty = true
            DirectBoot.update(profile)
            DirectBoot.listenForUnlock()
        }
    }