@@ -10,50 +10,6 @@ import Cocoa
1010import SwiftTerm
1111import UniformTypeIdentifiers
1212
13- @MainActor
14- enum ResizeTrace {
15- static let path = " /tmp/MacTerminal-resize.log "
16-
17- private static var fileHandle : FileHandle ?
18- private static var startTime = ProcessInfo . processInfo. systemUptime
19-
20- static func reset( ) {
21- try ? fileHandle? . close ( )
22- _ = FileManager . default. createFile ( atPath: path, contents: nil )
23- fileHandle = FileHandle ( forWritingAtPath: path)
24- startTime = ProcessInfo . processInfo. systemUptime
25- log ( " trace-start pid= \( ProcessInfo . processInfo. processIdentifier) " )
26- }
27-
28- static func log( _ message: String ) {
29- if fileHandle == nil {
30- reset ( )
31- return
32- }
33- let elapsed = ProcessInfo . processInfo. systemUptime - startTime
34- let line = String ( format: " %10.6f %@ \n " , elapsed, message)
35- guard let data = line. data ( using: . utf8) else { return }
36- try ? fileHandle? . write ( contentsOf: data)
37- try ? fileHandle? . synchronize ( )
38- }
39-
40- static func rect( _ value: NSRect ) -> String {
41- String (
42- format: " {x=%.1f y=%.1f w=%.1f h=%.1f maxX=%.1f maxY=%.1f} " ,
43- value. origin. x,
44- value. origin. y,
45- value. size. width,
46- value. size. height,
47- value. maxX,
48- value. maxY
49- )
50- }
51-
52- static func point( _ value: NSPoint ) -> String {
53- String ( format: " {x=%.1f y=%.1f} " , value. x, value. y)
54- }
55- }
56-
5713private actor InputLatencyPendingFrame {
5814 private var awaitingNanoseconds : UInt64 ?
5915 private var recordedMilliseconds : Double ?
@@ -93,17 +49,9 @@ class ViewController: NSViewController, @MainActor LocalProcessTerminalViewDeleg
9349 var zoomGesture : NSMagnificationGestureRecognizer ?
9450 var postedTitle : String = " "
9551 var postedDirectory : String ? = nil
96- private var resizeTraceObservers = [ NSObjectProtocol] ( )
97- private var resizeTraceLastFrame : NSRect ?
98- private var resizeTraceHasOriginStack = false
9952
100- func sizeChanged( source: LocalProcessTerminalView , newCols: Int , newRows: Int ) {
53+ func sizeChanged( source _ : LocalProcessTerminalView , newCols _ : Int , newRows _ : Int ) {
10154 // LocalProcessTerminalView updates the PTY. Do not resize the window here.
102- let windowFrame = source. window. map { ResizeTrace . rect ( $0. frame) } ?? " nil "
103- ResizeTrace . log (
104- " terminal-size cols= \( newCols) rows= \( newRows) "
105- + " view= \( ResizeTrace . rect ( source. frame) ) window= \( windowFrame) "
106- )
10755 }
10856
10957 func updateWindowTitle ( )
@@ -272,7 +220,6 @@ class ViewController: NSViewController, @MainActor LocalProcessTerminalViewDeleg
272220 override func viewDidAppear( ) {
273221 super. viewDidAppear ( )
274222 guard let window = view. window else { return }
275- installResizeTrace ( for: window)
276223 if let terminalWindowCloseObserver {
277224 NotificationCenter . default. removeObserver ( terminalWindowCloseObserver)
278225 }
@@ -314,7 +261,7 @@ class ViewController: NSViewController, @MainActor LocalProcessTerminalViewDeleg
314261 }
315262
316263 override func viewWillDisappear( ) {
317- removeResizeTraceObservers ( )
264+ //terminal = nil
318265 }
319266
320267 @objc
@@ -328,86 +275,8 @@ class ViewController: NSViewController, @MainActor LocalProcessTerminalViewDeleg
328275
329276 override func viewDidLayout( ) {
330277 super. viewDidLayout ( )
331- recordLayoutTrace ( " viewDidLayout-before " )
332278 terminal. frame = view. frame
333279 terminal. needsLayout = true
334- recordLayoutTrace ( " viewDidLayout-after " )
335- }
336-
337- private func installResizeTrace( for window: NSWindow ) {
338- removeResizeTraceObservers ( )
339- resizeTraceLastFrame = window. frame
340- resizeTraceHasOriginStack = false
341- recordResizeTrace ( " viewDidAppear " , window: window)
342-
343- let center = NotificationCenter . default
344- let events : [ ( Notification . Name , String ) ] = [
345- ( NSWindow . willStartLiveResizeNotification, " willStartLiveResize " ) ,
346- ( NSWindow . didResizeNotification, " didResize " ) ,
347- ( NSWindow . didMoveNotification, " didMove " ) ,
348- ( NSWindow . didEndLiveResizeNotification, " didEndLiveResize " ) ,
349- ( NSWindow . didChangeScreenNotification, " didChangeScreen " ) ,
350- ( NSWindow . didChangeBackingPropertiesNotification, " didChangeBackingProperties " ) ,
351- ]
352-
353- resizeTraceObservers = events. map { name, label in
354- center. addObserver ( forName: name, object: window, queue: . main) {
355- [ weak self, weak window] _ in
356- MainActor . assumeIsolated {
357- guard let self, let window else { return }
358- if name == NSWindow . willStartLiveResizeNotification {
359- self . resizeTraceLastFrame = window. frame
360- self . resizeTraceHasOriginStack = false
361- }
362- self . recordResizeTrace ( label, window: window)
363- }
364- }
365- }
366- }
367-
368- private func removeResizeTraceObservers( ) {
369- resizeTraceObservers. forEach ( NotificationCenter . default. removeObserver)
370- resizeTraceObservers. removeAll ( )
371- }
372-
373- private func recordResizeTrace( _ label: String , window: NSWindow ) {
374- let frame = window. frame
375- let previous = resizeTraceLastFrame ?? frame
376- let delta = NSRect (
377- x: frame. minX - previous. minX,
378- y: frame. minY - previous. minY,
379- width: frame. width - previous. width,
380- height: frame. height - previous. height
381- )
382- let currentEvent = NSApp . currentEvent
383- let eventName = currentEvent. map { String ( describing: $0. type) } ?? " nil "
384- let eventLocation = currentEvent. map { ResizeTrace . point ( $0. locationInWindow) } ?? " nil "
385- let contentFrame = window. contentView. map { ResizeTrace . rect ( $0. frame) } ?? " nil "
386- ResizeTrace . log (
387- " window-event= \( label) live= \( window. inLiveResize) "
388- + " frame= \( ResizeTrace . rect ( frame) ) delta= \( ResizeTrace . rect ( delta) ) "
389- + " content= \( contentFrame) mouseScreen= \( ResizeTrace . point ( NSEvent . mouseLocation) ) "
390- + " event= \( eventName) eventWindow= \( eventLocation) "
391- + " buttons= \( NSEvent . pressedMouseButtons) "
392- )
393-
394- let originChanged = abs ( frame. minX - previous. minX) > 0.01
395- || abs ( frame. minY - previous. minY) > 0.01
396- if originChanged && !resizeTraceHasOriginStack {
397- resizeTraceHasOriginStack = true
398- ResizeTrace . log ( " first-origin-change-stack " + Thread. callStackSymbols. prefix ( 16 ) . joined ( separator: " <- " ) )
399- }
400- resizeTraceLastFrame = frame
401- }
402-
403- private func recordLayoutTrace( _ label: String ) {
404- let windowFrame = view. window. map { ResizeTrace . rect ( $0. frame) } ?? " nil "
405- ResizeTrace . log (
406- " layout= \( label) viewFrame= \( ResizeTrace . rect ( view. frame) ) "
407- + " viewBounds= \( ResizeTrace . rect ( view. bounds) ) "
408- + " terminalFrame= \( ResizeTrace . rect ( terminal. frame) ) "
409- + " terminalBounds= \( ResizeTrace . rect ( terminal. bounds) ) window= \( windowFrame) "
410- )
411280 }
412281
413282 @objc @IBAction
0 commit comments