npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hermes-profile-transformer

v0.0.9

Published

The Hermes runtime, used by React Native for Android, is able to output [Chrome Trace Events](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview) in JSON Object Format.

Downloads

6,013,092

Readme

Visualize Facebook's Hermes JavaScript runtime profile traces in Chrome Developer Tools.

Demo Profile

Overview

The Hermes runtime, used by React Native for Android, is able to output Chrome Trace Events in JSON Object Format.

This TypeScript package converts Hermes CPU profiles to Chrome Developer Tools compatible JSON Array Format, and enriches it with line and column numbers and event categories from JavaScript source maps.

Usage

If you're using hermes-profile-transformer to debug React Native Android applications, you can use the React Native CLI react-native profile-hermes command, which uses this package to convert the downloaded Hermes profiles automatically.

As a standalone package

const transformer = require('hermes-profile-transformer').default;
const { writeFileSync } = require('fs');

const hermesCpuProfilePath = './testprofile.cpuprofile';
const sourceMapPath = './index.map';
const sourceMapBundleFileName = 'index.bundle.js';

transformer(
  // profile path is required
  hermesCpuProfilePath,
  // source maps are optional
  sourceMap,
  sourceMapBundleFileName
)
  .then(events => {
    // write converted trace to a file
    return writeFileSync(
      './chrome-supported.json',
      JSON.stringify(events, null, 2),
      'utf-8'
    );
  })
  .catch(err => {
    console.log(err);
  });

Creating Hermes CPU Profiles

Opening converted profiles in Chrome Developer Tools

Open Developer Tools in Chrome, navigate to the Performance tab, and use the Load profile... feature.

Loading the Profile

API

transformer(profilePath: string, sourceMapPath?: string, bundleFileName?: string)

Parameters

| Parameter | Type | Required | Description | | -------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | profilePath | string | Yes | Path to a JSON-formatted .cpuprofile file created by the Hermes runtime | | sourceMapPath | string | No | Path to a source-map compatible Source Map file | | bundleFileName | string | No | If sourceMapPath is provided, you need to also provide the name of the JavaScript bundle file that the source map applies to. This file does not need to exist on disk. |

Returns

Promise<DurationEvent[]>, where DurationEvent is as defined in EventInterfaces.ts.

Resources

LICENSE

MIT