UNPKG

@nativescript/core

Version:

A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.

56 lines 2.1 kB
var FrameHandlerImpl = /** @class */ (function (_super) { __extends(FrameHandlerImpl, _super); function FrameHandlerImpl() { return _super !== null && _super.apply(this, arguments) || this; } FrameHandlerImpl.initWithOwner = function (owner) { var handler = FrameHandlerImpl.new(); handler._owner = owner; return handler; }; FrameHandlerImpl.prototype.handleFrame = function (sender) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { owner._handleFrame(sender); } }; FrameHandlerImpl.ObjCExposedMethods = { handleFrame: { returns: interop.types.void, params: [CADisplayLink] }, }; return FrameHandlerImpl; }(NSObject)); export class FPSCallback { constructor(onFrame) { this.onFrame = onFrame; this.impl = FrameHandlerImpl.initWithOwner(new WeakRef(this)); this.displayLink = CADisplayLink.displayLinkWithTargetSelector(this.impl, 'handleFrame'); this.displayLink.paused = true; this.displayLink.addToRunLoopForMode(NSRunLoop.currentRunLoop, NSDefaultRunLoopMode); // UIScrollView (including in UIITableView) will run a loop in UITrackingRunLoopMode during scrolling. // If we do not add the CADisplayLink in this mode, it would appear paused during scrolling. this.displayLink.addToRunLoopForMode(NSRunLoop.currentRunLoop, UITrackingRunLoopMode); } start() { if (this.running) { return; } this.running = true; this.displayLink.paused = false; } stop() { if (!this.running) { return; } this.displayLink.paused = true; this.running = false; } _handleFrame(sender) { if (!this.running) { return; } // timestamp is CFTimeInterval, which is in seconds, the onFrame callback expects millis, so multiply by 1000 this.onFrame(sender.timestamp * 1000); } } //# sourceMappingURL=fps-native.ios.js.map