Skip to content

Commit

Permalink
fix: Support 120 FPS in RCTFPSGraph (#35543)
Browse files Browse the repository at this point in the history
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: #35543

Test Plan:
Before:

![IMG_1075](https://user-images.githubusercontent.com/15199031/205340761-12954d36-82dd-4102-868a-b7234fdfc21c.jpg)

After:

![IMG_1074](https://user-images.githubusercontent.com/15199031/205340790-092bfa57-c291-418b-9ce3-2a8d2389436a.jpg)

Reviewed By: rshest

Differential Revision: D43573750

Pulled By: sammy-SC

fbshipit-source-id: 7d64fcee35c0c29dfb618f1f02945584d1cab1e0
  • Loading branch information
mrousavy authored and facebook-github-bot committed Feb 28, 2023
1 parent 81dd3af commit 987dd6a
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions React/CoreModules/RCTFPSGraph.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ @implementation RCTFPSGraph {
NSUInteger _minFPS;
NSUInteger _length;
NSUInteger _height;
CGFloat _scale;
}

- (instancetype)initWithFrame:(CGRect)frame color:(UIColor *)color
Expand All @@ -43,6 +44,7 @@ - (instancetype)initWithFrame:(CGRect)frame color:(UIColor *)color
_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;

Expand Down Expand Up @@ -97,11 +99,14 @@ - (void)onTick:(NSTimeInterval)timestamp
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);
Expand Down

0 comments on commit 987dd6a

Please sign in to comment.