Skip to content

Commit ce10f46

Browse files
Speed up NSImage comparison (pointfreeco#435)
1 parent eeeeab8 commit ce10f46

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

Sources/SnapshotTesting/Snapshotting/NSImage.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,17 @@ private func compare(_ old: NSImage, _ new: NSImage, precision: Float) -> Bool {
7777
let newRep = NSBitmapImageRep(cgImage: newerCgImage)
7878
var differentPixelCount = 0
7979
let pixelCount = oldRep.pixelsWide * oldRep.pixelsHigh
80-
let threshold = 1 - precision
81-
for x in 0..<oldRep.pixelsWide {
82-
for y in 0..<oldRep.pixelsHigh {
83-
if oldRep.colorAt(x: x, y: y) != newRep.colorAt(x: x, y: y) { differentPixelCount += 1 }
84-
if Float(differentPixelCount) / Float(pixelCount) > threshold { return false}
80+
let threshold = (1 - precision) * Float(pixelCount)
81+
let p1: UnsafeMutablePointer<UInt8> = oldRep.bitmapData!
82+
let p2: UnsafeMutablePointer<UInt8> = newRep.bitmapData!
83+
for offset in 0 ..< pixelCount {
84+
if p1[offset] != p2[offset]
85+
|| p1[offset + 1] != p2[offset + 1]
86+
|| p1[offset + 2] != p2[offset + 2]
87+
|| p1[offset + 3] != p2[offset + 3] {
88+
differentPixelCount += 1
8589
}
90+
if Float(differentPixelCount) > threshold { return false }
8691
}
8792
return true
8893
}

0 commit comments

Comments
 (0)