aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/android/measure_fps.py
blob: 7ec80dcc56b8033b28c495792e6ba52c899f3825 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python

# Copyright 2017 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import optparse
import re
import subprocess
import time


def query_surfaceflinger_frame_count():
  parcel = subprocess.Popen("adb shell service call SurfaceFlinger 1013",
                            stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                            shell=True).communicate()[0]
  if not parcel:
    raise Exception("FAILED: adb shell service call SurfaceFlinger 1013")

  framecount = re.search("Result: Parcel\(([a-f0-9]+) ", parcel)
  if not framecount:
    raise Exception("Unexpected result from SurfaceFlinger: " + parcel)

  return int(framecount.group(1), 16)


def main(interval):
  startframe = query_surfaceflinger_frame_count()
  starttime = time.time()

  while True:
    time.sleep(interval)

    endframe = query_surfaceflinger_frame_count()
    endtime = time.time()
    fps = (endframe - startframe) / (endtime - starttime)
    print "%.2f" % fps

    startframe = endframe
    starttime = endtime


if __name__ == '__main__':
  parser = optparse.OptionParser()
  parser.add_option("-i", "--interval", type="int", default="2",
                    help="Number of seconds to count frames.")
  options, args = parser.parse_args()
  main(options.interval)