From 1839dab17bc389201c31735930e8d688f7a53bca Mon Sep 17 00:00:00 2001 From: Evgeny Date: Fri, 6 Sep 2024 22:09:55 +0100 Subject: [PATCH] ios: move caching images to background thread, dont use main thread scheduler for marking items read (#4840) --- apps/ios/Shared/Views/Chat/ChatView.swift | 5 +++-- apps/ios/SimpleXChat/ImageUtils.swift | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index f3d1cc92a5..e22b4aa328 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -797,9 +797,10 @@ struct ChatView: View { } private func waitToMarkRead(_ op: @Sendable @escaping () async -> Void) { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { + Task { + _ = try? await Task.sleep(nanoseconds: 600_000000) if m.chatId == chat.chatInfo.id { - Task(operation: op) + await op() } } } diff --git a/apps/ios/SimpleXChat/ImageUtils.swift b/apps/ios/SimpleXChat/ImageUtils.swift index 2eb747c6a5..36148d4324 100644 --- a/apps/ios/SimpleXChat/ImageUtils.swift +++ b/apps/ios/SimpleXChat/ImageUtils.swift @@ -391,7 +391,9 @@ public func imageFromBase64(_ base64Encoded: String?) -> UIImage? { return img } else if let data = Data(base64Encoded: dropImagePrefix(base64Encoded)), let img = UIImage(data: data) { - imageCache.setObject(img, forKey: base64Encoded as NSString) + imageCacheQueue.async { + imageCache.setObject(img, forKey: base64Encoded as NSString) + } return img } else { return nil @@ -401,6 +403,8 @@ public func imageFromBase64(_ base64Encoded: String?) -> UIImage? { } } +private let imageCacheQueue = DispatchQueue.global(qos: .background) + private var imageCache: NSCache = { var cache = NSCache() cache.countLimit = 1000