// QRCode generation test import UIKit class TestViewController: UIViewController { let imgView: UIImageView = { let v = UIImageView() v.translatesAutoresizingMaskIntoConstraints = false v.backgroundColor = .green return v }() let btn: UIButton = { let v = UIButton(type: .system) v.translatesAutoresizingMaskIntoConstraints = false v.setTitle("Run Test", for: []) v.backgroundColor = .yellow return v }() var tm1: CFAbsoluteTime! var tm2: CFAbsoluteTime! var tm3: CFAbsoluteTime! var tm4: CFAbsoluteTime! let strs: [String] = [ "Simple Text", "Longer string here.", "This is a much longer string for generating a QR Code image!", ] var idx: Int = 0 override func viewDidLoad() { super.viewDidLoad() view.addSubview(btn) view.addSubview(imgView) let g = view.safeAreaLayoutGuide NSLayoutConstraint.activate([ btn.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0), btn.centerXAnchor.constraint(equalTo: g.centerXAnchor), imgView.topAnchor.constraint(equalTo: btn.bottomAnchor, constant: 20.0), imgView.centerXAnchor.constraint(equalTo: g.centerXAnchor), imgView.widthAnchor.constraint(equalToConstant: 240.0), imgView.heightAnchor.constraint(equalTo: imgView.widthAnchor), ]) btn.addTarget(self, action: #selector(self.didTap(_:)), for: .touchUpInside) } @objc func didTap(_ sender: Any) { let str = strs[idx % strs.count] tm1 = CFAbsoluteTimeGetCurrent() imgView.generateQRCode(from: str) { image in self.tm2 = CFAbsoluteTimeGetCurrent() DispatchQueue.main.async { self.tm3 = CFAbsoluteTimeGetCurrent() self.imgView.image = image; self.tm4 = CFAbsoluteTimeGetCurrent() self.showResults(str) } } } func showResults(_ s: String) -> Void { let elapsed1 = tm2 - tm1 let elapsed2 = tm3 - tm2 let elapsed3 = tm4 - tm3 let elapsed4 = tm4 - tm1 let nf = NumberFormatter() nf.maximumFractionDigits = 6 idx += 1 print("Generate from string:", s) print("elapsed time to generate image:", nf.string(from: NSNumber(value: elapsed1))!) print("elapsed time from generate to async execution:", nf.string(from: NSNumber(value: elapsed2))!) print("elapsed time to set imageView.image:", nf.string(from: NSNumber(value: elapsed3))!) print("overall elapsed time:", nf.string(from: NSNumber(value: elapsed4))!) print() } } // Console output - each test button is tapped 4 times // on first tap, execution takes much longer than subsequent taps ------------------ iPhone 7 - Device / 13.3 Generate from string: Simple Text elapsed time to generate image: 0.157093 elapsed time from generate to async execution: 0.000097 elapsed time to set imageView.image: 0.100747 overall elapsed time: 0.257937 Generate from string: Longer string here. elapsed time to generate image: 0.002767 elapsed time from generate to async execution: 0.000066 elapsed time to set imageView.image: 0.003793 overall elapsed time: 0.006626 Generate from string: This is a much longer string for generating a QR Code image! elapsed time to generate image: 0.002132 elapsed time from generate to async execution: 0.000047 elapsed time to set imageView.image: 0.003155 overall elapsed time: 0.005334 Generate from string: Simple Text elapsed time to generate image: 0.005457 elapsed time from generate to async execution: 0.000163 elapsed time to set imageView.image: 0.004744 overall elapsed time: 0.010364 ------------------ iPad Air - Device / 12.1 / 1st gen from 2013 Generate from string: Simple Text elapsed time to generate image: .509212 elapsed time from generate to async execution: .000279 elapsed time to set imageView.image: .321866 overall elapsed time: .831357 Generate from string: Longer string here. elapsed time to generate image: .00809 elapsed time from generate to async execution: .000144 elapsed time to set imageView.image: .009812 overall elapsed time: .018046 Generate from string: This is a much longer string for generating a QR Code image! elapsed time to generate image: .008096 elapsed time from generate to async execution: .000157 elapsed time to set imageView.image: .01149 overall elapsed time: .019743 Generate from string: Simple Text elapsed time to generate image: .010136 elapsed time from generate to async execution: .000077 elapsed time to set imageView.image: .005702 overall elapsed time: .015915 ------------------ iPhone 8 / Simulator / 14.0 Generate from string: Simple Text elapsed time to generate image: 0.133525 elapsed time from generate to async execution: 0.000032 elapsed time to set imageView.image: 0.148432 overall elapsed time: 0.281989 Generate from string: Longer string here. elapsed time to generate image: 0.001354 elapsed time from generate to async execution: 0.000053 elapsed time to set imageView.image: 0.052862 overall elapsed time: 0.054269 Generate from string: This is a much longer string for generating a QR Code image! elapsed time to generate image: 0.002095 elapsed time from generate to async execution: 0.000026 elapsed time to set imageView.image: 0.052522 overall elapsed time: 0.054643 Generate from string: Simple Text elapsed time to generate image: 0.001223 elapsed time from generate to async execution: 0.00005 elapsed time to set imageView.image: 0.052479 overall elapsed time: 0.053752