@@ -9,6 +9,19 @@ import SwiftUI
9
9
extension EmbraceTraceSurfaceView {
10
10
11
11
internal func frameChanged( ) {
12
+ // not sure i want to debounce here.
13
+ // debounce causes the updates to wait
14
+ // until almost no movement to update
15
+ // the top surface which can be a bit late.
16
+ /*
17
+ state.debounceFrameUpdate {
18
+ performFrameUpdatesAfterDebounce()
19
+ }
20
+ */
21
+ performFrameUpdatesAfterDebounce ( )
22
+ }
23
+
24
+ private func performFrameUpdatesAfterDebounce( ) {
12
25
13
26
let newPercentage : Double
14
27
defer {
@@ -57,6 +70,22 @@ extension EmbraceTraceSurfaceView {
57
70
var frame : CGRect = . zero
58
71
var window : UIWindow ? = nil
59
72
73
+ private var frameUpdateWorkItem : DispatchWorkItem ? = nil
74
+
75
+ deinit {
76
+ frameUpdateWorkItem? . cancel ( )
77
+ }
78
+
79
+ func debounceFrameUpdate( _ action: @escaping ( ) -> Void ) {
80
+ dispatchPrecondition ( condition: . onQueue( . main) )
81
+ frameUpdateWorkItem? . cancel ( )
82
+ frameUpdateWorkItem = DispatchWorkItem ( block: action)
83
+ guard let workItem = frameUpdateWorkItem else {
84
+ return
85
+ }
86
+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.1 , execute: workItem)
87
+ }
88
+
60
89
var visibleBasedOnAppearance : Bool = false {
61
90
didSet { updateVisibility ( ) }
62
91
}
0 commit comments