Skip to content

Commit e4823cc

Browse files
committed
Don't recreate NSImage unnecessarily
1 parent 75e1e2d commit e4823cc

1 file changed

Lines changed: 18 additions & 4 deletions

File tree

Snap-O/CaptureWindow/MediaDisplayView.swift

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ struct ImageCaptureView: View {
55
let url: URL
66
var makeTempDragFile: () -> URL?
77

8+
@StateObject private var loader = ImageLoader()
9+
810
var body: some View {
9-
if let nsImage = NSImage(contentsOf: url) {
11+
if let nsImage = loader.image(url: url) {
1012
Image(nsImage: nsImage)
1113
.resizable()
1214
.scaledToFill()
1315
.clipped()
1416
.onDrag { dragItemProvider() }
15-
.onAppear {
16-
markPerfMilestones()
17-
}
17+
.onAppear { markPerfMilestones() }
1818
} else {
1919
Color.black
2020
}
@@ -59,3 +59,17 @@ private func markPerfMilestones() {
5959
Perf.end(.recordingRender, finalLabel: "video rendered")
6060
Perf.end(.appFirstSnapshot, finalLabel: "first media appeared")
6161
}
62+
63+
@MainActor
64+
final class ImageLoader: ObservableObject {
65+
private var image: NSImage?
66+
private var url: URL?
67+
68+
func image(url: URL) -> NSImage? {
69+
guard url != self.url else { return image }
70+
self.url = url
71+
let nsImage = NSImage(contentsOf: url)
72+
image = nsImage
73+
return nsImage
74+
}
75+
}

0 commit comments

Comments
 (0)