mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
fix: Support 120 FPS in RCTFPSGraph (#35543)
Summary: Currently the `RCTFPSGraph` component is hardcoded/capped at a Frame Rate of 60. Since there are phones that support more than 60 FPS (newer iPhones can do 120 FPS), and there might be other use-cases for the RCTFPSGraph (I use it in VisionCamera to show Camera FPS), this PR changes the scale to also support higher FPS by adjusting it on the fly (when a new maximum arrives) ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [iOS] [Fixed] - Support 120 FPS or more in `RCTFPSGraph` Pull Request resolved: https://github.com/facebook/react-native/pull/35543 Test Plan: Before:  After:  Reviewed By: rshest Differential Revision: D43573750 Pulled By: sammy-SC fbshipit-source-id: 7d64fcee35c0c29dfb618f1f02945584d1cab1e0
This commit is contained in:
committed by
Facebook GitHub Bot
parent
81dd3afe0b
commit
987dd6a358
@@ -32,6 +32,7 @@
|
||||
NSUInteger _minFPS;
|
||||
NSUInteger _length;
|
||||
NSUInteger _height;
|
||||
CGFloat _scale;
|
||||
}
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame color:(UIColor *)color
|
||||
@@ -43,6 +44,7 @@
|
||||
_minFPS = 60;
|
||||
_length = (NSUInteger)floor(frame.size.width);
|
||||
_height = (NSUInteger)floor(frame.size.height);
|
||||
_scale = 60.0 / (CGFloat)_height;
|
||||
_frames = calloc(sizeof(CGFloat), _length);
|
||||
_color = color;
|
||||
|
||||
@@ -97,11 +99,14 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : (NSCoder *)aDecoder)
|
||||
self->_label.text = [NSString stringWithFormat:@"%lu", (unsigned long)self->_FPS];
|
||||
});
|
||||
|
||||
CGFloat scale = 60.0 / (CGFloat)_height;
|
||||
CGFloat previousScale = _scale;
|
||||
CGFloat targetFps = MAX(_maxFPS, 60.0);
|
||||
_scale = targetFps / (CGFloat)_height;
|
||||
for (NSUInteger i = 0; i < _length - 1; i++) {
|
||||
_frames[i] = _frames[i + 1];
|
||||
// Move each Frame back one position and adjust to new scale (if there is a new scale)
|
||||
_frames[i] = _frames[i + 1] * previousScale / _scale;
|
||||
}
|
||||
_frames[_length - 1] = (double)_FPS / scale;
|
||||
_frames[_length - 1] = (double)_FPS / _scale;
|
||||
|
||||
CGMutablePathRef path = CGPathCreateMutable();
|
||||
CGPathMoveToPoint(path, NULL, 0, (CGFloat)_height);
|
||||
|
||||
Reference in New Issue
Block a user