mirror of
https://github.com/status-im/react-native.git
synced 2025-01-09 09:12:02 +00:00
5d4d62f474
Summary: The stall watchdog is handy to detect stalls, but it doesn't really tell us what was happening. This diff makes it easy to track React perf and bridge traffic during any stall, and prints it out if the stall exceeds the threshold. Reviewed By: yungsters Differential Revision: D4479439 fbshipit-source-id: 87f94913ec341a648d7744249597dc30b29759ab
60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
* @providesModule BridgeSpyStallHandler
|
|
* @flow
|
|
*/
|
|
'use strict';
|
|
|
|
const JSEventLoopWatchdog = require('JSEventLoopWatchdog');
|
|
const MessageQueue = require('MessageQueue');
|
|
|
|
const infoLog = require('infoLog');
|
|
|
|
const BridgeSpyStallHandler = {
|
|
register: function() {
|
|
let spyBuffer = [];
|
|
MessageQueue.spy((data) => {
|
|
spyBuffer.push(data);
|
|
});
|
|
const TO_JS = 0;
|
|
JSEventLoopWatchdog.addHandler({
|
|
onStall: () => {
|
|
infoLog(
|
|
spyBuffer.length + ' bridge messages during stall: ',
|
|
spyBuffer.map((info) => {
|
|
let args = '<args>';
|
|
try {
|
|
args = JSON.stringify(info.args);
|
|
} catch (e1) {
|
|
if (Array.isArray(info.args)) {
|
|
args = info.args.map((arg) => {
|
|
try {
|
|
return JSON.stringify(arg);
|
|
} catch (e2) {
|
|
return '?';
|
|
}
|
|
});
|
|
} else {
|
|
args = 'keys:' + JSON.stringify(Object.keys(info.args));
|
|
}
|
|
}
|
|
return `${info.type === TO_JS ? 'N->JS' : 'JS->N'} : ` +
|
|
`${info.module ? (info.module + '.') : ''}${info.method}(${args})`;
|
|
}),
|
|
);
|
|
},
|
|
onIterate: () => {
|
|
spyBuffer = [];
|
|
},
|
|
});
|
|
},
|
|
};
|
|
|
|
module.exports = BridgeSpyStallHandler;
|