Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: How to find the frame rate of a device?

Tags:

android

Frame rate: I'm referring to the rate at which display changes. i.e. Ondraw() is called and the canvas is redrawn.

Is there a default rate for all android devices ? As this rate depends on the processing power of the device , How to find out the frame rate of a device , before starting to program for that mobile device ?

like image 266
m4n07 Avatar asked Apr 15 '11 04:04

m4n07


People also ask

How do I check my phone frame rate?

Developer options A new developer option has been added to the menu that toggles an overlay on the display with the current refresh rate. The new option is under Settings > System > Developer options > Show refresh rate.

How can I see my FPS on Android without root?

Then go to Settings>Additional Settings>Developer Options>Power Monitor, after that in the Frame Rate tool press Start. This will generate a floating meter with the resolution, refresh rate, and FPS that you can view at any time.


2 Answers

This may be a follow-up to this question, where I suggested that having a redraw loop that just kept drawing over and over again might be a bit excessive. There may be an api to find out the capabilities of the devices display, but if there is I'm not aware of it. When you're writing your own event loop / thread function you can control the framerate by how often you call your 'draw' method. Typically, I think for most purposes, you would be ok with a refresh rate of 30 or so. If you're writing a fast action game, that needs rapid animation then you may want to run as fast as you can, the more fps, the smoother it will be.

A typical event loop (thread run function) might look something like this:

// define the target fps
private static final int UPDATE_RATE = 30;  // Frames per second (fps)

public void run() {
     while(running) {  // volatile flag, set somewhere else to shutdown
         long beginTimeMillis, timeTakenMillis, timeLeftMillis;

         // get the time before updates/draw
         beginTimeMillis = System.currentTimeMillis();  

         // do the thread processing / draw
         performUpdates();  // move things if required
         draw();            // draw them on the screen

         // get the time after processing and calculate the difference
         timeTakenMillis = System.currentTimeMillis() - beginTimeMillis;

         // check how long there is until we reach the desired refresh rate
         timeLeftMillis = (1000L / UPDATE_RATE) - timeTakenMillis;

         // set some kind of minimum to prevent spinning
         if (timeLeftMillis < 5) { 
             timeLeftMillis = 5; // Set a minimum
         }

         // sleep until the end of the current frame    
         try {
             TimeUnit.MILLISECONDS.sleep(timeLeftMillis);  
         } catch (InterruptedException ie) {
         }
    }
}
like image 147
forsvarir Avatar answered Oct 15 '22 12:10

forsvarir


You can use the dumpsys tool provided by Android. To obtain information about the display of the device execute the command:

adb shell dumpsys display

The information about the frame rate of the device is provided in the attribute "mPhys".

You will find something like:

mPhys=PhysicalDisplayInfo{1080x1920, 60.000004 fps, densitiy 3.0, 
480.0x480.0 dpi, secure true}

The frame rate of the device is in the second field, in my case is 60.000004 fps

like image 42
user3504453 Avatar answered Oct 15 '22 11:10

user3504453