Skip to content

Blog: We made Remote Shutter fast by running it on an iPhone 6s - #269

Merged
darioalessandro merged 3 commits into
masterfrom
article-iphone-6s
Nov 2, 2026
Merged

darioalessandro merged 3 commits into
masterfrom
article-iphone-6s

Conversation

@darioalessandro

Copy link
Copy Markdown
Member

What this is

A blog post for website/posts/ telling the story of this week's performance work through the iPhone 6s: why a 2015 phone with 2 GB of RAM is the right benchmark, the two crashes it surfaced (the A9 HEVC recorder abort, the remote's Jetsam kill), and every copy and conversion removed since Oct 31 on both the camera and the remote. Written in a blunt, first-person, "the hardware is fast, your code is slow" voice. About 1,040 words, a five-minute read.

Covers #253, #255, #259, #260, #261, #262, #263, #265, #266, #267, with the numbers from their commit messages (preview encoder 60 ms to 33 ms per frame, remote preview 23 fps to 29.8 fps during a 4K take, decode 9 µs to 7 µs).

For your review

  • One claim to confirm before publishing. The post says the new build is on the 6s and that "it streams". Build 130 is installed on the phone; a run past 19 seconds with a flat memory graph is what makes that sentence true. If the 6s run shows anything else, that paragraph changes.
  • The campaign joke is in the first paragraph. The 6s shipped September 2015, so the timing holds.
  • No em dashes, no "it's not X, it's Y". Frontmatter follows the other posts (title, date, author, description, three FAQ entries). gray-matter parses it and the website's jest suite passes.

🤖 Generated with Claude Code

darioalessandro and others added 2 commits November 1, 2026 23:39
A post on using a 2015 iPhone 6s (iOS 15, 2 GB, two cores) as the
performance benchmark: the two crashes it surfaced, the copies and
conversions removed on both the camera and the remote since Oct 31, and
the measured results.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The hero is a generated still of a scuffed, dusty 2015-style phone with
flies on the cracked screen, in a SoCal garage with a surfboard fin
behind it (1600 px, 390 KB). Unbranded, screen dark.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

📊 Test Coverage Report

✅ 784/809 tests passed · ⏭️ 25 skipped

Metric Coverage
App code (excl. generated + vendored Theater) ██████████░░░░░░░░░░ 50.4% 🟡
Whole target ██████████░░░░░░░░░░ 51.4% 🟡

🎥 Capture & session core

File Coverage Lines
CaptureEngine.swift ██░░░░░░░░░░░░░░░░░░ 12.0% 258/2157 🔴
RecordingPipeline.swift ████████████████░░░░ 80.7% 706/875 🟢
FrameStreamingCoordinator.swift ███░░░░░░░░░░░░░░░░░ 13.0% 32/247 🔴
FrameStreamer.swift ███████████████████░ 92.6% 113/122 🟢
RemoteCmdFlatBuffers.swift ██████████████████░░ 92.0% 1184/1287 🟢
📁 Full report — 103 files
File Coverage Lines
JPEGFrameEncoder.swift ████████████████████ 100.0% 12/12 🟢
CameraPreviewMode.swift ████████████████████ 100.0% 13/13 🟢
AppActivityMonitor.swift ████████████████████ 100.0% 31/31 🟢
AppTheme.swift ████████████████████ 100.0% 33/33 🟢
Messages.swift ████████████████████ 100.0% 7/7 🟢
ZoomScale.swift ████████████████████ 100.0% 56/56 🟢
ZoomScaleSeed.swift ████████████████████ 100.0% 14/14 🟢
MonitorChrome.swift ████████████████████ 100.0% 12/12 🟢
PeerSessionCore.swift ████████████████████ 100.0% 26/26 🟢
ClockOffsetEstimator.swift ████████████████████ 100.0% 24/24 🟢
ExposurePolicy.swift ████████████████████ 100.0% 42/42 🟢
StreamingConfig.swift ████████████████████ 100.0% 34/34 🟢
MultipeerMessages.swift ████████████████████ 100.0% 12/12 🟢
FocusedCameraControlState.swift ████████████████████ 100.0% 6/6 🟢
Locked.swift ████████████████████ 100.0% 19/19 🟢
FrameCreditWindow.swift ████████████████████ 100.0% 9/9 🟢
AppDelegate.swift ████████████████████ 100.0% 16/16 🟢
CameraLink.swift ████████████████████ 100.0% 59/59 🟢
HEICFrameEncoder.swift ████████████████████ 100.0% 17/17 🟢
PeerCompatibility.swift ████████████████████ 100.0% 42/42 🟢
RigQualityMenu.swift ████████████████████ 99.3% 140/141 🟢
DeviceScannerViewModel.swift ████████████████████ 98.9% 183/185 🟢
FrameSender.swift ████████████████████ 98.4% 184/187 🟢
FocusPointMapping.swift ████████████████████ 97.6% 40/41 🟢
CaptureSyncMetadata.swift ███████████████████░ 97.0% 65/67 🟢
MultiCamChrome.swift ███████████████████░ 96.9% 31/32 🟢
MulticamViewModel.swift ███████████████████░ 96.0% 145/151 🟢
RemoteCmds.swift ███████████████████░ 95.9% 325/339 🟢
VP9FrameEncoder.swift ███████████████████░ 94.7% 195/206 🟢
DiscoveredPeers.swift ███████████████████░ 94.4% 17/18 🟢
WatchSharedTypes.swift ███████████████████░ 94.0% 236/251 🟢
WatchPreviewStreamer.swift ███████████████████░ 93.6% 44/47 🟢
ZoomPill.swift ███████████████████░ 93.1% 108/116 🟢
MulticamController.swift ███████████████████░ 92.7% 1487/1604 🟢
FrameStreamer.swift ███████████████████░ 92.6% 113/122 🟢
RemoteCmdFlatBuffers.swift ██████████████████░░ 92.0% 1184/1287 🟢
DebugLog.swift ██████████████████░░ 91.7% 22/24 🟢
WelcomeView.swift ██████████████████░░ 89.3% 492/551 🟢
VideoTransferProgressView.swift █████████████████░░░ 84.0% 295/351 🟢
UIImage+gif.swift ████████████████░░░░ 81.6% 129/158 🟢
CameraDeviceDescriptor.swift ████████████████░░░░ 81.0% 34/42 🟢
RecordingPipeline.swift ████████████████░░░░ 80.7% 706/875 🟢
CameraProgressOverlayView.swift ████████████████░░░░ 78.5% 186/237 🟡
SessionCoordinator.swift ████████████████░░░░ 77.9% 1870/2399 🟡
UICmds.swift ███████████████░░░░░ 77.4% 72/93 🟡
FlatBufferSchemas_generated.swift (excluded from app-code metric) ███████████████░░░░░ 77.0% 876/1138 🟡
SettingsView.swift ███████████████░░░░░ 76.2% 593/778 🟡
RolePickerView.swift ███████████████░░░░░ 75.8% 314/414 🟡
StreamLog.swift ███████████████░░░░░ 75.0% 15/20 🟡
WelcomeViewModel.swift ███████████████░░░░░ 74.1% 100/135 🟡
CameraRecordingTimerView.swift ███████████████░░░░░ 73.4% 127/173 🟡
SettingsViewModel.swift ██████████████░░░░░░ 70.6% 89/126 🟡
DeviceScannerView.swift ██████████████░░░░░░ 70.1% 1142/1630 🟡
MonitorView.swift ██████████████░░░░░░ 69.8% 553/792 🟡
UIAlertController.swift ██████████████░░░░░░ 69.8% 37/53 🟡
SwiftConstants.swift █████████████░░░░░░░ 66.7% 12/18 🟡
WelcomeViewController.swift █████████████░░░░░░░ 64.1% 41/64 🟡
ScannerLobby.swift ████████████░░░░░░░░ 62.5% 5/8 🟡
CameraViewModel.swift ████████████░░░░░░░░ 59.9% 160/267 🟡
ViewfinderGestureLayer.swift ███████████░░░░░░░░░ 54.8% 92/168 🟡
StoreManager.swift ███████████░░░░░░░░░ 54.6% 83/152 🟡
MulticamView.swift ███████████░░░░░░░░░ 54.1% 735/1358 🟡
RulerPill.swift ███████████░░░░░░░░░ 52.8% 329/623 🟡
SceneDelegate.swift ██████████░░░░░░░░░░ 51.9% 14/27 🟡
UIViewController+SwiftUIHosting.swift ██████████░░░░░░░░░░ 48.4% 15/31 🔴
FrameStreamReceiver.swift ██████████░░░░░░░░░░ 47.7% 244/512 🔴
FrameCodecs.swift █████████░░░░░░░░░░░ 47.1% 24/51 🔴
MonitorViewModel.swift █████████░░░░░░░░░░░ 44.0% 11/25 🔴
PurchaseManaging.swift ████████░░░░░░░░░░░░ 42.0% 21/50 🔴
CameraScreenView.swift ████████░░░░░░░░░░░░ 39.2% 262/668 🔴
MulticamViewController.swift ████████░░░░░░░░░░░░ 38.0% 130/342 🔴
EnumExtensions.swift ███████░░░░░░░░░░░░░ 33.9% 40/118 🔴
HEVCFrameEncoder.swift ██████░░░░░░░░░░░░░░ 31.9% 110/345 🔴
ExposureControls.swift ██████░░░░░░░░░░░░░░ 30.8% 94/305 🔴
CaptureTally.swift █████░░░░░░░░░░░░░░░ 25.0% 13/52 🔴
DeviceScannerViewController.swift █████░░░░░░░░░░░░░░░ 24.3% 117/482 🔴
CameraRig.swift █████░░░░░░░░░░░░░░░ 23.8% 150/629 🔴
WatchSessionManager.swift ████░░░░░░░░░░░░░░░░ 20.8% 37/178 🔴
MediaProcessors.swift ███░░░░░░░░░░░░░░░░░ 17.5% 11/63 🔴
SessionDebugConsole.swift ███░░░░░░░░░░░░░░░░░ 15.2% 75/495 🔴
FrameStreamingCoordinator.swift ███░░░░░░░░░░░░░░░░░ 13.0% 32/247 🔴
CaptureEngine.swift ██░░░░░░░░░░░░░░░░░░ 12.0% 258/2157 🔴
RolePickerController.swift ██░░░░░░░░░░░░░░░░░░ 10.2% 23/226 🔴
PeerLinkStatus.swift █░░░░░░░░░░░░░░░░░░░ 7.1% 10/141 🔴
CameraCountdownTorch.swift █░░░░░░░░░░░░░░░░░░░ 4.9% 3/61 🔴
WatchRemoteCameraController.swift █░░░░░░░░░░░░░░░░░░░ 3.2% 9/279 🔴
SoundManager.swift ░░░░░░░░░░░░░░░░░░░░ 2.1% 1/47 🔴
RecordingTimer.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/52 🔴
CameraPermissionsView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/676 🔴
CameraHostController.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/205 🔴
RemoteShutterHelpView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/1373 🔴
CameraPermissionErrorView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/416 🔴
PreviewSurface.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/100 🔴
PhotosAccessDeniedView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/614 🔴
MicrophonePermissionPromptView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/347 🔴
Photos.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/12 🔴
LocalNetworkPermissionView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/747 🔴
OrientationUtils.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/18 🔴
PermissionManager.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/185 🔴
PhotosAccessHelper.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/347 🔴
UIAlertPresenter.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/43 🔴
MultipeerService.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/123 🔴
Data+MD5.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/4 🔴

Generated from a0b833d · workflow run

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@darioalessandro
darioalessandro merged commit 8000ee3 into master Nov 2, 2026
6 checks passed
@darioalessandro
darioalessandro deleted the article-iphone-6s branch November 2, 2026 08:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant