@@ -37,7 +37,7 @@ extension LogProcessorProtocol {
3737 let text = text as NSString
3838 let characterSet = CharacterSet ( charactersIn: " \r \" " )
3939 var remainingRange = NSMakeRange ( 0 , text. length)
40-
40+
4141 rawMeasures. removeAll ( )
4242
4343 processingDidStart ( )
@@ -49,22 +49,19 @@ extension LogProcessorProtocol {
4949 let beginIdx = remainingRange. lowerBound
5050 let endIdx = nextRange. upperBound
5151 let textCount = endIdx - beginIdx
52- let text = text. substring ( with: NSMakeRange ( beginIdx, textCount) )
5352
5453 defer {
5554 remainingRange = NSMakeRange ( endIdx, remainingRange. upperBound - endIdx)
5655 }
5756
58- let range = NSMakeRange ( 0 , textCount)
59- guard let match = regex. firstMatch ( in: text, options: [ ] , range: range) else { continue }
60-
61- let timeString = text [ ..< text. index ( text. startIndex, offsetBy: match. range. length - 4 ) ]
57+ let range = NSMakeRange ( beginIdx, textCount)
58+ guard let match = regex. firstMatch ( in: text as String , options: [ ] , range: range) else { continue }
59+ let timeString = text. substring ( with: NSMakeRange ( beginIdx, match. range. length - 4 ) )
6260 if let time = Double ( timeString) {
63- let value = String ( text [ text . index ( text . startIndex , offsetBy : match. range. length - 1 ) ... ] )
64- if var rawMeasure = rawMeasures [ value] {
61+ let value = text. substring ( with : NSMakeRange ( match . range . upperBound - 1 , endIdx - match. range. upperBound - 1 ) ) as String
62+ if let rawMeasure = rawMeasures [ value] {
6563 rawMeasure. time += time
6664 rawMeasure. references += 1
67- rawMeasures [ value] = rawMeasure
6865 } else {
6966 rawMeasures [ value] = RawMeasure ( time: time, text: value)
7067 }
@@ -75,16 +72,23 @@ extension LogProcessorProtocol {
7572 }
7673
7774 fileprivate func updateResults( didComplete completed: Bool , didCancel: Bool ) {
78- var filteredResults = rawMeasures. values. filter { $0. time > 10 }
79- if filteredResults. count < 20 {
80- filteredResults = rawMeasures. values. filter { $0. time > 0.1 }
81- }
82-
83- let sortedResults = filteredResults. sorted ( by: { $0. time > $1. time } )
84- updateHandler ? ( processResult ( sortedResults) , completed, didCancel)
85-
86- if completed {
87- rawMeasures. removeAll ( )
75+ DispatchQueue . global ( qos: . userInteractive) . async {
76+ let measures = self . rawMeasures. values
77+ var filteredResults = measures. filter { $0. time > 10 }
78+ if filteredResults. count < 20 {
79+ filteredResults = measures. filter { $0. time > 0.1 }
80+ }
81+
82+ let sortedResults = filteredResults. sorted ( by: { $0. time > $1. time } )
83+ let result = self . processResult ( sortedResults)
84+
85+ if completed {
86+ self . rawMeasures. removeAll ( )
87+ }
88+
89+ DispatchQueue . main. async {
90+ self . updateHandler ? ( result, completed, didCancel)
91+ }
8892 }
8993 }
9094
0 commit comments