Convert tracking dispatcher to TS
Summary: Convert file to TS Reviewed By: passy Differential Revision: D16687919 fbshipit-source-id: a2fb8a0ba5e0d5c42765e80311b39868b1e78244
This commit is contained in:
committed by
Facebook Github Bot
parent
8f7c817d56
commit
bb7e3d4837
84
src/dispatcher/tracking.tsx
Normal file
84
src/dispatcher/tracking.tsx
Normal file
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
* Copyright 2018-present Facebook.
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
* @format
|
||||
*/
|
||||
|
||||
import {ipcRenderer} from 'electron';
|
||||
// $FlowFixMe perf_hooks is a new API in node
|
||||
import {performance} from 'perf_hooks';
|
||||
|
||||
import {Store} from '../reducers/index';
|
||||
import {Logger} from '../fb-interfaces/Logger.js';
|
||||
import Client from '../Client';
|
||||
|
||||
export default (store: Store, logger: Logger) => {
|
||||
let droppedFrames: number = 0;
|
||||
let largeFrameDrops: number = 0;
|
||||
function droppedFrameDetection(
|
||||
past: DOMHighResTimeStamp,
|
||||
isWindowFocused: () => boolean,
|
||||
) {
|
||||
const now = performance.now();
|
||||
requestAnimationFrame(() => droppedFrameDetection(now, isWindowFocused));
|
||||
const dropped = Math.round((now - past) / (1000 / 60) - 1);
|
||||
if (!isWindowFocused() || dropped < 1) {
|
||||
return;
|
||||
}
|
||||
droppedFrames += dropped;
|
||||
if (dropped > 3) {
|
||||
largeFrameDrops++;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
droppedFrameDetection(
|
||||
performance.now(),
|
||||
() => store.getState().application.windowIsFocused,
|
||||
);
|
||||
}
|
||||
|
||||
ipcRenderer.on('trackUsage', () => {
|
||||
const {
|
||||
selectedDevice,
|
||||
selectedPlugin,
|
||||
selectedApp,
|
||||
clients,
|
||||
} = store.getState().connections;
|
||||
|
||||
const {flipperRating} = store.getState().application;
|
||||
|
||||
if (!selectedDevice || !selectedPlugin) {
|
||||
return;
|
||||
}
|
||||
|
||||
let app: string;
|
||||
let sdkVersion: number;
|
||||
|
||||
if (selectedApp) {
|
||||
const client = clients.find((c: Client) => c.id === selectedApp);
|
||||
if (client) {
|
||||
app = client.query.app;
|
||||
sdkVersion = client.query.sdk_version || 0;
|
||||
}
|
||||
}
|
||||
|
||||
const info = {
|
||||
droppedFrames,
|
||||
largeFrameDrops,
|
||||
os: selectedDevice.os,
|
||||
device: selectedDevice.title,
|
||||
plugin: selectedPlugin,
|
||||
app,
|
||||
sdkVersion,
|
||||
flipperRating,
|
||||
};
|
||||
|
||||
// reset dropped frames counter
|
||||
droppedFrames = 0;
|
||||
largeFrameDrops = 0;
|
||||
|
||||
logger.track('usage', 'ping', info);
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user