summaryrefslogtreecommitdiff
path: root/platform/ios/src/MGLMapView.mm
diff options
context:
space:
mode:
authorJason Wray <jason@mapbox.com>2018-07-16 12:18:43 -0400
committerJason Wray <jason@mapbox.com>2018-08-16 16:46:54 -0400
commit790b9f5c827101a47fd06fbfa944d36e3f0b285c (patch)
tree6c9b13cdd9ae36b03146c7010980355fd5efea32 /platform/ios/src/MGLMapView.mm
parent19325b0293dc99a641311ebabd55c9554d0ee38e (diff)
downloadqtlocation-mapboxgl-790b9f5c827101a47fd06fbfa944d36e3f0b285c.tar.gz
[ios] Add experimental frame rate measurements to MGLMapView
Includes: average frame rate, average frame render duration, and instantaneous frame render duration.
Diffstat (limited to 'platform/ios/src/MGLMapView.mm')
-rw-r--r--platform/ios/src/MGLMapView.mm32
1 files changed, 32 insertions, 0 deletions
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 7423c23c7b..2a231838a4 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -244,6 +244,12 @@ public:
@property (nonatomic) MGLUserLocation *userLocation;
@property (nonatomic) NSMutableDictionary<NSString *, NSMutableArray<MGLAnnotationView *> *> *annotationViewReuseQueueByIdentifier;
+/// Experimental rendering performance measurement.
+@property (nonatomic) BOOL experimental_enableFrameRateMeasurement;
+@property (nonatomic) CGFloat averageFrameRate;
+@property (nonatomic) CFTimeInterval frameTime;
+@property (nonatomic) CFTimeInterval averageFrameTime;
+
@end
@implementation MGLMapView
@@ -300,6 +306,11 @@ public:
BOOL _accessibilityValueAnnouncementIsPending;
MGLReachability *_reachability;
+
+ /// Experimental rendering performance measurement.
+ CFTimeInterval _frameCounterStartTime;
+ NSInteger _frameCount;
+ CFTimeInterval _frameDurations;
}
#pragma mark - Setup & Teardown -
@@ -1108,6 +1119,27 @@ public:
[self.glView display];
}
+
+ if (self.experimental_enableFrameRateMeasurement)
+ {
+ CFTimeInterval now = CACurrentMediaTime();
+
+ self.frameTime = now - _displayLink.timestamp;
+ _frameDurations += self.frameTime;
+
+ _frameCount++;
+
+ CFTimeInterval elapsed = now - _frameCounterStartTime;
+
+ if (elapsed >= 1.0) {
+ self.averageFrameRate = _frameCount / elapsed;
+ self.averageFrameTime = (_frameDurations / _frameCount) * 1000;
+
+ _frameCount = 0;
+ _frameDurations = 0;
+ _frameCounterStartTime = now;
+ }
+ }
}
- (void)setNeedsGLDisplay