3

Profile Android performance even in production on CLI or Flipper plugin

 2 years ago
source link: https://reactnativeexample.com/profile-android-performance-even-in-production-on-cli-or-flipper-plugin/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android Performance Profiler

Measure the performance of any Android app, even in production, via a Flipper plugin or directly via CLI.

prod-profiler.mp4

Table of Contents

Getting started with the automated profiler

  1. Install the profiler
yarn add --dev @perf-profiler/e2e
  1. Write a test

For instance, here we’ll be testing the start up performance of the app for 10 iterations:

import { execSync } from "child_process";
import { TestCase, PerformanceTester } from "@perf-profiler/e2e";

const bundleId = "com.reactnativefeed";
const appActivity = `${bundleId}.MainActivity`;

const stopApp = () => execSync(`adb shell am force-stop ${bundleId}`);
const startApp = () =>
  execSync(`adb shell am start ${bundleId}/${appActivity}`);

const startTestCase: TestCase = {
  duration: 15000,
  beforeTest: () => {
    stopApp();
  },
  run: () => {
    startApp();
  },
};

const test = async () => {
  const performanceTester = new PerformanceTester(bundleId);
  await performanceTester.iterate(startTestCase, 10);
  performanceTester.writeResults();
};

test();
  1. Open the JSON file generated in the web profiler:
yarn add --dev @perf-profiler/web-reporter
yarn generate results.json

Flipper Plugin

Install

Search for android-performance-profiler in the Flipper marketplace

image

Multiple commands are also available in the standalone package android-performance-profiler.

⚠️ they will be subject to breaking changes

For instance:

import {
  detectCurrentAppBundleId,
  getAverageCpuUsage,
  getPidId,
  Measure,
  pollPerformanceMeasures,
} from "@perf-profiler/profiler";

const bundleId = detectCurrentAppBundleId();
const pid = getPidId(bundleId);

const measures: Measure[] = [];

const polling = pollPerformanceMeasures(pid, (measure) => {
  measures.push(measure);
  console.log(`JS Thread CPU Usage: ${measure.perName["(mqt_js)"]}%`);
});

setTimeout(() => {
  polling.stop();
  const averageCpuUsage = getAverageCpuUsage(measures);
  console.log(`Average CPU Usage: ${averageCpuUsage}%`);
}, 10000);

Contributing

web-reporter

At the root of the repo:

yarn
yarn tsc --build --w

and run in another terminal:

yarn workspace @perf-profiler/web-reporter start

Then in packages/web-reporter/src/App.tsx, uncomment the lines to add your own measures:

// Uncomment with when locally testing
// eslint-disable-next-line @typescript-eslint/no-var-requires
testCaseResults = [
  require("../measures.json"),
];

You should now be able to open the local server

Run yarn jest Plugin -u after modifications.

GitHub

View Github


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK