| Index: build/android/pylib/surface_stats_collector.py
|
| diff --git a/build/android/pylib/surface_stats_collector.py b/build/android/pylib/surface_stats_collector.py
|
| index 9c0cb7e32c6c1adcca8047685cee040fb1d43721..cf5a280c894608e3c4a0eebaa9591c7008da0ba9 100644
|
| --- a/build/android/pylib/surface_stats_collector.py
|
| +++ b/build/android/pylib/surface_stats_collector.py
|
| @@ -96,12 +96,29 @@ class SurfaceStatsCollector(object):
|
| last_timestamp = 0
|
| first_timestamp = 0
|
| latencies = []
|
| + retries = 0
|
| + has_collected_data = False
|
|
|
| while not self._stop_event.is_set():
|
| self._get_data_event.wait(1)
|
| try:
|
| (t, last_timestamp) = self._GetSurfaceFlingerLatencyData(last_timestamp,
|
| latencies)
|
| + if (t, last_timestamp) == (None, None):
|
| + retries += 1
|
| + if retries < 3:
|
| + continue
|
| + if has_collected_data:
|
| + # Some data has already been collected, but either the app
|
| + # was closed or there's no new data. Signal the main thread and
|
| + # wait.
|
| + self._data_queue.put((None, None))
|
| + self._stop_event.wait()
|
| + break
|
| + raise Exception('Unable to get surface flinger latency data')
|
| +
|
| + has_collected_data = True
|
| +
|
| if not first_timestamp:
|
| first_timestamp = t
|
|
|
| @@ -151,10 +168,8 @@ class SurfaceStatsCollector(object):
|
| A tuple containing:
|
| - The timestamp of the beginning of the first frame (ns),
|
| - The timestamp of the end of the last frame (ns).
|
| -
|
| - Raises:
|
| - Exception if failed to run the SurfaceFlinger command or SurfaceFlinger
|
| - returned invalid result.
|
| + The tuple may be (None, None) if there was no data collected (for example,
|
| + if the app was closed before the collector thread has finished).
|
| """
|
| # adb shell dumpsys SurfaceFlinger --latency <window name>
|
| # prints some information about the last 128 frames displayed in
|
| @@ -184,7 +199,8 @@ class SurfaceStatsCollector(object):
|
| results = self._adb.RunShellCommand(
|
| 'dumpsys SurfaceFlinger --latency %s/%s' %
|
| (self._window_package, self._window_activity), log_result=True)
|
| - assert len(results)
|
| + if not len(results):
|
| + return (None, None)
|
|
|
| refresh_period = int(results[0])
|
| last_timestamp = previous_timestamp
|
|
|