diff --git a/SCTE35Parser.xcodeproj/project.pbxproj b/SCTE35Parser.xcodeproj/project.pbxproj index d9982ad..4d1d93b 100644 --- a/SCTE35Parser.xcodeproj/project.pbxproj +++ b/SCTE35Parser.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 8262471B2DFF7CB20019E31D /* SCTE35ParserMeasurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8262471A2DFF7CA20019E31D /* SCTE35ParserMeasurements.swift */; }; E801367826502C3100EA6FBF /* Data+hexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_26 /* Data+hexString.swift */; }; E801367926502C3100EA6FBF /* SpliceInfoSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_57 /* SpliceInfoSection.swift */; }; E801367A26502C3200EA6FBF /* Data+hexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_26 /* Data+hexString.swift */; }; @@ -181,6 +182,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 8262471A2DFF7CA20019E31D /* SCTE35ParserMeasurements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SCTE35ParserMeasurements.swift; sourceTree = ""; }; E80136622650282100EA6FBF /* SCTE35Parser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCTE35Parser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E801367026502B6800EA6FBF /* SCTE35Parser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCTE35Parser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; OBJ_10 /* ATSCContentIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ATSCContentIdentifier.swift; sourceTree = ""; }; @@ -387,6 +389,7 @@ isa = PBXGroup; children = ( OBJ_67 /* SCTE35ParserTests.swift */, + 8262471A2DFF7CA20019E31D /* SCTE35ParserMeasurements.swift */, OBJ_63 /* Errors */, OBJ_65 /* Mocks */, OBJ_68 /* Stubs */, @@ -756,6 +759,7 @@ OBJ_147 /* UnexpectedEndOfDataErrorInfo+stub.swift in Sources */, OBJ_148 /* BreakDurationTests.swift in Sources */, OBJ_149 /* SpliceTimeTests.swift in Sources */, + 8262471B2DFF7CB20019E31D /* SCTE35ParserMeasurements.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/SCTE35Parser.xcodeproj/xcshareddata/xcbaselines/SCTE35Parser::SCTE35ParserTests.xcbaseline/F00E5336-7646-4E04-BB9A-5CEBBE24BC78.plist b/SCTE35Parser.xcodeproj/xcshareddata/xcbaselines/SCTE35Parser::SCTE35ParserTests.xcbaseline/F00E5336-7646-4E04-BB9A-5CEBBE24BC78.plist new file mode 100644 index 0000000..d8640c9 --- /dev/null +++ b/SCTE35Parser.xcodeproj/xcshareddata/xcbaselines/SCTE35Parser::SCTE35ParserTests.xcbaseline/F00E5336-7646-4E04-BB9A-5CEBBE24BC78.plist @@ -0,0 +1,22 @@ + + + + + classNames + + SCTE35ParserMeasurements + + test_performance_of_many_scte35_messages() + + com.apple.XCTPerformanceMetric_WallClockTime + + baselineAverage + 0.005000 + baselineIntegrationDisplayName + Local Baseline + + + + + + diff --git a/SCTE35Parser.xcodeproj/xcshareddata/xcbaselines/SCTE35Parser::SCTE35ParserTests.xcbaseline/Info.plist b/SCTE35Parser.xcodeproj/xcshareddata/xcbaselines/SCTE35Parser::SCTE35ParserTests.xcbaseline/Info.plist new file mode 100644 index 0000000..0bb24bc --- /dev/null +++ b/SCTE35Parser.xcodeproj/xcshareddata/xcbaselines/SCTE35Parser::SCTE35ParserTests.xcbaseline/Info.plist @@ -0,0 +1,33 @@ + + + + + runDestinationsByUUID + + F00E5336-7646-4E04-BB9A-5CEBBE24BC78 + + localComputer + + busSpeedInMHz + 0 + cpuCount + 1 + cpuKind + Apple M1 Max + cpuSpeedInMHz + 0 + logicalCPUCoresPerPackage + 10 + modelCode + MacBookPro18,2 + physicalCPUCoresPerPackage + 10 + platformIdentifier + com.apple.platform.macosx + + targetArchitecture + arm64 + + + + diff --git a/Tests/SCTE35ParserTests/SCTE35ParserMeasurements.swift b/Tests/SCTE35ParserTests/SCTE35ParserMeasurements.swift new file mode 100644 index 0000000..110176f --- /dev/null +++ b/Tests/SCTE35ParserTests/SCTE35ParserMeasurements.swift @@ -0,0 +1,64 @@ +import XCTest +import SCTE35Parser + +final class SCTE35ParserMeasurements: XCTestCase { + func test_performance_of_many_scte35_messages() { + // The messages were taken from an example 10 hour window live stream. + let messages = [ + "0xfc309200000000000000fff00506fe0f195d98007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300102f120bb98", + "0xfc309400000000000000fff00506fe1065d9e0007e027c43554549000000017fd70000f731400c684e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a22616666696c696174655f627265616b222c226b6579223a227062222c2276616c7565223a22616666696c69617465227d7d300102c012c396", + "0xfc308800000000000000fff00506fe11c41d940072027043554549000000017fd70000cdfe600c5c4e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a22726f6c657831222c226b6579223a227062222c2276616c7565223a22726f6c657831227d7d3001016edd51d3", + "0xfc309200000000000000fff00506fe23c472d2007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300131c015814a", + "0xfc309200000000000000fff00506fe26b9d7bd007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300231eba8fa04", + "0xfc309200000000000000fff00506fe2a462cd2007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300331942bf4fc", + "0xfc309400000000000000fff00506fe2d29be96007e027c43554549000000017fd70000ff6ea00c684e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a22616666696c696174655f627265616b222c226b6579223a227062222c2276616c7565223a22616666696c69617465227d7d30010c99a761f2", + "0xfc309200000000000000fff00506fe2fc27c7f007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d30043171235ad5", + "0xfc309200000000000000fff00506fe32fde592007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300531734d1999", + "0xfc309200000000000000fff00506fe366108f6007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300631ff234d72", + "0xfc309200000000000000fff00506fe398588cd007c027a43554549000000017fd70000ff6ea00c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300731e5d2c4d2", + "0xfc309200000000000000fff00506fe3b35e981007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300831764d0e3a", + "0xfc309200000000000000fff00506fe3ea46a0d007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d3009313b9cd3e5", + "0xfc309200000000000000fff00506fe40cda000007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300a310ce0abc8", + "0xfc309200000000000000fff00506fe43c7d49e007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300b319f9f7244", + "0xfc309400000000000000fff00506fe479307e7007e027c43554549000000017fd70000ff6ea00c684e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a22616666696c696174655f627265616b222c226b6579223a227062222c2276616c7565223a22616666696c69617465227d7d30020cddf2da60", + "0xfc309200000000000000fff00506fe4ecbadef007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300c31d9978b47", + "0xfc309200000000000000fff00506fe52ef165f007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300d31dc1ed44a", + "0xfc309200000000000000fff00506fe584149bf007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300e31189087b8", + "0xfc309400000000000000fff00506fe5b92bd2d007e027c43554549000000017fd70000ff6ea00c684e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a22616666696c696174655f627265616b222c226b6579223a227062222c2276616c7565223a22616666696c69617465227d7d30030c8c80e249", + "0xfc309200000000000000fff00506fe5e22ddc2007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d300f31dc662641", + "0xfc309200000000000000fff00506fe61daddfa007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d3010311017b1b1", + "0xfc309200000000000000fff00506fe665dd071007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d3011311bd0a26b", + "0xfc309200000000000000fff00506fe6a27f5ed007c027a43554549000000017fd70000ff6ea00c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d3012314954cf71", + "0xfc309200000000000000fff00506fe70d2d5e3007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d30133100106e24", + "0xfc309400000000000000fff00506fe7492c37a007e027c43554549000000017fd70000ff6ea00c684e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a22616666696c696174655f627265616b222c226b6579223a227062222c2276616c7565223a22616666696c69617465227d7d30040c876d3099", + "0xfc309200000000000000fff00506fe77fc167b007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d301431cacc50de", + "0xfc309200000000000000fff00506fe7d16c087007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d30153179354257", + "0xfc309200000000000000fff00506fe7f19bf44007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d3016311f48b25e", + "0xfc309200000000000000fff00506fe8d5822c7007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d301735a8ed326c", + "0xfc309200000000000000fff00506fe90544fce007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d301836087faf2e", + "0xfc309200000000000000fff00506fe941bb576007c027a43554549000000017fd70000cdfe600c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d301936d2b6357a", + "0xfc309200000000000000fff00506fe9894cde0007c027a43554549000000017fd70000f731400c664e4243557b2261737365745f6964223a22706561636f636b5f373230343739222c2263756544617461223a7b2263756554797065223a227374616e646172645f627265616b222c226b6579223a227062222c2276616c7565223a227374616e64617264227d7d301a364d469d06" + ] + var parsed = [SpliceInfoSection]() + measure { + for message in messages { + parsed.append(try! SpliceInfoSection(message)) + } + } + // Do some very basic validation (the other test cases cover everything else). + for scte35 in parsed { + switch scte35.spliceCommand { + case .timeSignal: break + default: XCTFail("All the messages are time signals") + } + XCTAssertEqual(1, scte35.spliceDescriptors.count) + guard let spliceDescriptor = scte35.spliceDescriptors.first else { + return XCTFail("Expected one splice descriptor") + } + switch spliceDescriptor { + case .segmentationDescriptor: break + default: XCTFail("All the messages are segmentation descriptors") + } + } + } +}