소스 검색

small main chart performance optimizations

polscm32 2 년 전
부모
커밋
2c7708245e
1개의 변경된 파일13개의 추가작업 그리고 17개의 파일을 삭제
  1. 13 17
      FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

+ 13 - 17
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

@@ -174,15 +174,15 @@ struct MainChartView: View {
                         yAxisChartData()
                         scroller.scrollTo("MainChart", anchor: .trailing)
                     }
-//                    .onChange(of: glucoseFromPersistence.map(\.id)) { _ in
-//                        updateStartEndMarkers()
-//                        yAxisChartData()
-//                        scroller.scrollTo("MainChart", anchor: .trailing)
-//                    }
-//                    .onChange(of: determination.map(\.id)) { _ in
-//                        updateStartEndMarkers()
-//                        scroller.scrollTo("MainChart", anchor: .trailing)
-//                    }
+                    .onChange(of: glucoseFromPersistence.last?.glucose) { _ in
+                        updateStartEndMarkers()
+                        yAxisChartData()
+                        scroller.scrollTo("MainChart", anchor: .trailing)
+                    }
+                    .onChange(of: determination.last?.deliverAt) { _ in
+                        updateStartEndMarkers()
+                        scroller.scrollTo("MainChart", anchor: .trailing)
+                    }
                     .onChange(of: tempBasals) { _ in
                         updateStartEndMarkers()
                         scroller.scrollTo("MainChart", anchor: .trailing)
@@ -678,21 +678,17 @@ extension MainChartView {
             return nil
         }
 
-        // sort by date
-        let sortedGlucose = glucoseFromPersistence
-            .sorted { $0.date?.timeIntervalSince1970 ?? 0 < $1.date?.timeIntervalSince1970 ?? 0 }
-
         var low = 0
-        var high = sortedGlucose.count - 1
+        var high = glucoseFromPersistence.count - 1
         var closestGlucose: GlucoseStored?
 
         // binary search to find next glucose
         while low <= high {
             let mid = low + (high - low) / 2
-            let midTime = sortedGlucose[mid].date?.timeIntervalSince1970 ?? 0
+            let midTime = glucoseFromPersistence[mid].date?.timeIntervalSince1970 ?? 0
 
             if midTime == time {
-                return sortedGlucose[mid]
+                return glucoseFromPersistence[mid]
             } else if midTime < time {
                 low = mid + 1
             } else {
@@ -701,7 +697,7 @@ extension MainChartView {
 
             // update if necessary
             if closestGlucose == nil || abs(midTime - time) < abs(closestGlucose!.date?.timeIntervalSince1970 ?? 0 - time) {
-                closestGlucose = sortedGlucose[mid]
+                closestGlucose = glucoseFromPersistence[mid]
             }
         }