From 1717183f194a143bf17e5065316a7dc1a232f00a Mon Sep 17 00:00:00 2001 From: viatearz Date: Sat, 13 Sep 2025 11:48:04 +0800 Subject: [PATCH] fix: reduce CPU usage by limiting motion update frequency --- PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m | 14 ++++++++++++++ PlayTools/PlaySettings.swift | 3 +++ 2 files changed, 17 insertions(+) diff --git a/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m b/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m index d5e8d1bf..d3f68bf3 100644 --- a/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m +++ b/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m @@ -13,6 +13,7 @@ #import "PTFakeMetaTouch.h" #import #import +#import __attribute__((visibility("hidden"))) @interface PTSwizzleLoader : NSObject @@ -150,6 +151,15 @@ - (void)hook_requestRecordPermission:(void (^)(BOOL))response { } } +- (instancetype)hook_CMMotionManager_init { + CMMotionManager *motionManager = (CMMotionManager *)[self hook_CMMotionManager_init]; + // The default update interval is 0, which may lead to excessive CPU usage + motionManager.accelerometerUpdateInterval = 0.01; + motionManager.deviceMotionUpdateInterval = 0.01; + motionManager.gyroUpdateInterval = 0.01; + return motionManager; +} + // Hook for UIUserInterfaceIdiom // - (long long) hook_userInterfaceIdiom { @@ -287,6 +297,10 @@ + (void)load { if ([[PlaySettings shared] checkMicPermissionSync]) { [objc_getClass("AVAudioSession") swizzleInstanceMethod:@selector(requestRecordPermission:) withMethod:@selector(hook_requestRecordPermission:)]; } + + if ([[PlaySettings shared] limitMotionUpdateFrequency]) { + [objc_getClass("CMMotionManager") swizzleInstanceMethod:@selector(init) withMethod:@selector(hook_CMMotionManager_init)]; + } } @end diff --git a/PlayTools/PlaySettings.swift b/PlayTools/PlaySettings.swift index 513bd0d1..5bf1a265 100644 --- a/PlayTools/PlaySettings.swift +++ b/PlayTools/PlaySettings.swift @@ -85,6 +85,8 @@ let settings = PlaySettings.shared @objc lazy var hideTitleBar = settingsData.hideTitleBar @objc lazy var checkMicPermissionSync = settingsData.checkMicPermissionSync + + @objc lazy var limitMotionUpdateFrequency = settingsData.limitMotionUpdateFrequency } struct AppSettingsData: Codable { @@ -111,4 +113,5 @@ struct AppSettingsData: Codable { var enableScrollWheel = true var hideTitleBar = false var checkMicPermissionSync = false + var limitMotionUpdateFrequency = false }