Files
firebase-ios-sdk/GoogleDataTransport/GDTTestApp/EventCleanupPerfTest.swift
T
Maksym Malyhin 92db10edb4 GDT storage cleanup: optimizations for big amount of pending events (#7014)
* GDT storage cleanup performance testing

* style

* GDTCORDirectorySizeTracker - autoreleasepool in cycles

* [GDTCORFlatFileStoragecheckForExpirations] - autoreleasepool in cycles

* TestApp: Performance testing tweeks

* Revert "[GDTCORFlatFileStoragecheckForExpirations] - autoreleasepool in cycles"

This reverts commit e0573f5a1b.

* [GDTCORUploadCoordinator signalToStoragesToCheckExpirations]: signal once per storage

* Revert "Revert "[GDTCORFlatFileStoragecheckForExpirations] - autoreleasepool in cycles""

This reverts commit 34e9eee131.

* style

* changelog
2020-11-24 12:46:50 -05:00

63 lines
2.0 KiB
Swift

/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Foundation
import GoogleDataTransport
import os.signpost
/// The test actions to run under the profiler to measure performance of `GDTCORFlatFileStorage.checkForExpirations()` method.
@available(iOS 12.0, *)
class EventCleanupPerfTest {
static let log = OSLog(subsystem: "GoogleDataTransport-TestApp", category: "EventCleanupPerfTest")
static func run(completion: @escaping () -> Void) {
let signpostID = OSSignpostID(log: log)
os_signpost(.begin, log: log, name: "checkForExpirations", signpostID: signpostID)
GDTCORFlatFileStorage.sharedInstance().checkForExpirations()
GDTCORFlatFileStorage.sharedInstance().storageQueue.async {
os_signpost(.end, log: log, name: "checkForExpirations", signpostID: signpostID)
completion()
}
}
static func generateTestEvents(count: Int, _ completion: @escaping () -> Void) {
let signpostID = OSSignpostID(log: log)
let group = DispatchGroup()
os_signpost(.begin, log: log, name: "generateTestEvents", signpostID: signpostID)
_ = (0 ..< count).compactMap { (_) -> GDTCOREvent? in
group.enter()
let event = GDTCOREventGenerator.generateEvent(for: .test, qosTier: nil, mappingID: nil)
GDTCORFlatFileStorage.sharedInstance().store(event) { _, _ in
group.leave()
}
return event
}
group.notify(queue: .main) {
os_signpost(.end, log: log, name: "generateTestEvents", signpostID: signpostID)
completion()
}
}
}