Compare commits

...

2 Commits

Author SHA1 Message Date
Shadowfacts e264e8842c 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:14:31 -04:00
Shadowfacts c78ed42a5e Fix show sidebar button not appearing on iPad 2022-09-10 13:32:18 -04:00
3 changed files with 16 additions and 10 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,11 @@ class AppSplitViewController: UISplitViewController {
setViewController(sidebarNav, for: .primary)
secondaryNav = UINavigationController()
secondaryNav.isNavigationBarHidden = true
// 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
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)
}
})