All Projects → ericleong → Slickr

ericleong / Slickr

Licence: mit
A collection of python and bash scripts to collect and analyze frame rendering performance in Android apps.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Slickr

Laravel Zero
A PHP framework for console artisans
Stars: ✭ 2,821 (+2138.89%)
Mutual labels:  utility, performance
Georaptor
Python Geohash Compression Tool
Stars: ✭ 143 (+13.49%)
Mutual labels:  utility, performance
Arewefastyet
NOT MAINTAINED ANYMORE! New project is located on https://github.com/mozilla-frontend-infra/js-perf-dashboard -- AreWeFastYet is a set of tools used for benchmarking the major browser's JavaScript virtual machines against each other, as well as reporting the results on a website as insightful graphs showing the evolution of performance over time.
Stars: ✭ 119 (-5.56%)
Mutual labels:  performance
Swift Selection Search
Swift Selection Search (SSS) is a simple Firefox add-on that lets you quickly search for some text in a page using your favorite search engines.
Stars: ✭ 125 (-0.79%)
Mutual labels:  utility
Yyjson
The fastest JSON library in C
Stars: ✭ 1,894 (+1403.17%)
Mutual labels:  performance
Thaw Carrots
Thaw carrots by warming up your laptop to a specific temperature
Stars: ✭ 120 (-4.76%)
Mutual labels:  utility
Crossplatformdisktest
Windows, macOS and Android storage (HDD, SSD, RAM) speed testing/performance benchmarking app
Stars: ✭ 123 (-2.38%)
Mutual labels:  performance
Koom
KOOM is an OOM killer on mobile platform by Kwai.
Stars: ✭ 2,247 (+1683.33%)
Mutual labels:  performance
P2plab
performance benchmark infrastructure for IPLD DAGs
Stars: ✭ 126 (+0%)
Mutual labels:  performance
Onemkl
oneAPI Math Kernel Library (oneMKL) Interfaces
Stars: ✭ 122 (-3.17%)
Mutual labels:  performance
Agoo C
Agoo webserver in C.
Stars: ✭ 125 (-0.79%)
Mutual labels:  performance
Cherow
Very fast and lightweight, standards-compliant, self-hosted javascript parser with high focus on both performance and stability
Stars: ✭ 1,539 (+1121.43%)
Mutual labels:  performance
Hyperdrive
This repository has moved to:
Stars: ✭ 120 (-4.76%)
Mutual labels:  performance
Aimeos Core
Aimeos PHP e-commerce framework for ultra fast online shops, complex B2B applications and #gigacommerce
Stars: ✭ 2,152 (+1607.94%)
Mutual labels:  performance
Pepper Metrics
pepper metrics is a tool, it can helps you collect runtime performance use RED method, and then output as log / timeseries data, by default it use prometheus as datasource, grafana as UI
Stars: ✭ 119 (-5.56%)
Mutual labels:  performance
Fmt
A modern formatting library
Stars: ✭ 12,698 (+9977.78%)
Mutual labels:  performance
Tickprofiler
Profile your minecraft server: Find which entities and tile entities are making your server slow
Stars: ✭ 119 (-5.56%)
Mutual labels:  performance
Stitcher Core
High performance, static websites for PHP developers
Stars: ✭ 120 (-4.76%)
Mutual labels:  performance
Icinga2
Icinga is a monitoring system which checks the availability of your network resources, notifies users of outages, and generates performance data for reporting.
Stars: ✭ 1,670 (+1225.4%)
Mutual labels:  performance
React Virtual
⚛️ Hooks for virtualizing scrollable elements in React
Stars: ✭ 2,369 (+1780.16%)
Mutual labels:  performance

slickr

A collection of python and bash scripts to collect and analyze frame rendering performance in Android apps.

requirements

setup

on device

Make sure to enable the "In adb shell dumpsys gfxinfo" option for "Profile GPU rendering" inside "Developer options" in your settings app!

You may need to kill and restart your app for the logging to work!

on computer

If you can't execute the scripts, you may need to mark them as executable.

$ chmod +x *.sh *.py

should do the trick on Unix-like operating systems, or cygwin.

examples

Scroll for 8 seconds and save the GPU profiling information for the current screen into a file.

$ ./slickr.sh > profile.txt

Scroll for 8 seconds and display the average frame delay (in milliseconds).

$ ./slickr.sh | ./avg.py

Scroll for 8 seconds and plot the recorded data and other metrics.

$ ./slickr.sh | ./plot.py

Compare the frame delay histograms and demand curves of two (or more) saved profiles.

$ ./compare.py profile1.txt profile2.txt

api

$ slickr.sh <package> <iterations> <distance>
  • package is the Java package name for the Android application. For example, for the Tumblr app, it is com.tumblr. It can be gleaned from the play store url for an application.

    If an app has multiple activities open, profile.py will choose the activity with visibility=0 (the currently visibile activity). On devices below Lollipop, all profile data is exported.

  • iterations is the number of 2 second iterations to run (since 128 frames, the default buffer size, is a duration of about 2 seconds at 60 frames per second). Default is 4.

  • distance is the scroll distance in pixels. It defaults to 3x the display density (at the bucket the device belongs to).

framestats in Android Marshmallow (6.0) is automatically enabled as long as a package name is provided. It provides detailed information about the draw stage of the rendering pipeline.

understanding the plots

tumblr app profile

The Android M framestats data is a series of raw timestamps. These are then converted into time deltas according to the Android Developer guidelines. The gfxinfo data is also plotted if available, though there is some overlap.

component gfxinfo framestats timestamps notes
start INTENDED_VSYNCHANDLE_INPUT_START time spent by system
input HANDLE_INPUT_STARTANIMATION_START time spent handling input events
animations ANIMATION_STARTPERFORM_TRAVERSALS_START time spent evaluating animators
traversals PERFORM_TRAVERSALS_STARTDRAW_START time spent on layout and measure
draw draw DRAW_STARTSYNC_START time spent on View.draw()
sync prepare SYNC_STARTISSUE_DRAW_COMMANDS_START time spent transfering data to gpu
execute time spent executing display lists
gpu process ISSUE_DRAW_COMMANDS_STARTFRAME_COMPLETED time spent waiting on gpu

The green line represents the 16.67 ms threshold needed to achieve a smooth 60 frames per second.

duration curve

The duration curve rearranges the profiling data by sorting it from slowest to fastest frame. This is based off load duration curves in power engineering and illustrates how many frames went over the 16 ms threshold needed for 60 FPS and how many milliseconds they went over.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].