Compare commits

...

2 Commits

Author SHA1 Message Date
Shadowfacts 6881441671 Don't use shared background context for fetching item counts
A significant fraction of the time was spent waiting for the background
context to be available, before the count could even be started. Since
the counts don't need to use the shared background context, let them
each use their own context to avoid contention.
2022-09-10 14:21:30 -04:00
Shadowfacts 57cc5ac5a5 Fix show sidebar button not appearing on iPad 2022-09-10 14:21:30 -04:00
3 changed files with 19 additions and 9 deletions

View File

@ -77,7 +77,7 @@
</CommandLineArgument>
<CommandLineArgument
argument = "-com.apple.CoreData.SQLDebug 1"
isEnabled = "YES">
isEnabled = "NO">
</CommandLineArgument>
</CommandLineArguments>
<EnvironmentVariables>

View File

@ -45,7 +45,15 @@ class AppSplitViewController: UISplitViewController {
setViewController(sidebarNav, for: .primary)
secondaryNav = UINavigationController()
#if targetEnvironment(macCatalyst)
secondaryNav.isNavigationBarHidden = true
#else
// the toggle sidebar button only appears if there's a navigation bar
// so we just make always transparent, rather than disabling it
let secondaryNavBarAppearance = UINavigationBarAppearance()
secondaryNavBarAppearance.configureWithTransparentBackground()
secondaryNav.navigationBar.standardAppearance = secondaryNavBarAppearance
#endif
secondaryNav.view.backgroundColor = .appBackground
setViewController(secondaryNav, for: .secondary)

View File

@ -14,7 +14,7 @@ private let signposter = OSSignposter(subsystem: "net.shadowfacts.Reader", categ
class HomeCollectionViewCell: UICollectionViewListCell {
private var currentItemListType: ItemListType?
private var currentItemCountTask: Task<Void, Never>?
private var itemCount: Int?
#if !targetEnvironment(macCatalyst)
@ -31,12 +31,11 @@ class HomeCollectionViewCell: UICollectionViewListCell {
override func prepareForReuse() {
super.prepareForReuse()
currentItemCountTask?.cancel()
itemCount = nil
}
func updateUI(item: ItemListType, persistentContainer: PersistentContainer) {
self.currentItemListType = item
var config = UIListContentConfiguration.valueCell()
config.text = item.title
if let itemCount {
@ -45,10 +44,10 @@ class HomeCollectionViewCell: UICollectionViewListCell {
config.secondaryTextProperties.color = .tintColor
self.contentConfiguration = config
Task(priority: .userInitiated) {
let state = signposter.beginInterval("fetch count", id: signposter.makeSignpostID())
currentItemCountTask = Task(priority: .userInitiated) {
let state = signposter.beginInterval("fetch count", id: signposter.makeSignpostID(), "\(String(item.hashValue, radix: 16), privacy: .public)")
if let count = await fetchCount(item: item, in: persistentContainer),
self.currentItemListType == item {
!Task.isCancelled {
self.itemCount = count
config.secondaryText = count.formatted(.number)
self.contentConfiguration = config
@ -62,9 +61,12 @@ class HomeCollectionViewCell: UICollectionViewListCell {
return nil
}
return await withCheckedContinuation({ continuation in
let context = persistentContainer.backgroundContext
context.perform {
let state = signposter.beginInterval("waiting to perform", id: signposter.makeSignpostID(), "\(String(item.hashValue, radix: 16), privacy: .public)")
persistentContainer.performBackgroundTask { context in
signposter.endInterval("waiting to perform", state)
let state = signposter.beginInterval("count", id: signposter.makeSignpostID(), "\(String(item.hashValue, radix: 16), privacy: .public)")
let count = try? context.count(for: request)
signposter.endInterval("count", state)
continuation.resume(returning: count)
}
})