Commit b076edb7 authored by zhenw's avatar zhenw Committed by Commit bot

[Telemetry] Test for display tracing

BUG=535731

Review URL: https://codereview.chromium.org/1366133002

Cr-Commit-Position: refs/heads/master@{#351099}
parent b3163737
...@@ -228,9 +228,11 @@ class AndroidPlatformBackend( ...@@ -228,9 +228,11 @@ class AndroidPlatformBackend(
if not self._surface_stats_collector: if not self._surface_stats_collector:
return return
refresh_period, timestamps = self._surface_stats_collector.Stop() try:
pid = self._surface_stats_collector.GetSurfaceFlingerPid() refresh_period, timestamps = self._surface_stats_collector.Stop()
self._surface_stats_collector = None pid = self._surface_stats_collector.GetSurfaceFlingerPid()
finally:
self._surface_stats_collector = None
# TODO(sullivan): should this code be inline, or live elsewhere? # TODO(sullivan): should this code be inline, or live elsewhere?
events = [] events = []
for ts in timestamps: for ts in timestamps:
......
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import mock
import unittest
from telemetry.internal.platform import android_platform_backend
from telemetry.internal.platform.tracing_agent import display_tracing_agent
from telemetry.timeline import tracing_category_filter
from telemetry.timeline import tracing_options
# pylint: disable=super-init-not-called,abstract-method
class FakeAndroidPlatformBackend(
android_platform_backend.AndroidPlatformBackend):
def __init__(self):
self._device = 0
self._raw_display_frame_rate_measurements = []
self._surface_stats_collector = None
@property
def surface_stats_collector(self):
return self._surface_stats_collector
def IsDisplayTracingSupported(self):
return True
class DisplayTracingAgentTest(unittest.TestCase):
def setUp(self):
self._trace_options = tracing_options.TracingOptions()
self._trace_options.enable_platform_display_trace = True
self._category_filter = tracing_category_filter.TracingCategoryFilter()
self._platform_backend = FakeAndroidPlatformBackend()
self._agent = display_tracing_agent.DisplayTracingAgent(
self._platform_backend)
@mock.patch(
'devil.android.perf.surface_stats_collector.SurfaceStatsCollector')
def testStartAndStopTracing(self, MockSurfaceStatsCollector):
self._agent.Start(self._trace_options, self._category_filter, 10)
# Second start tracing will raise error.
with self.assertRaises(AssertionError):
self._agent.Start(self._trace_options, self._category_filter, 10)
self._platform_backend.surface_stats_collector.Stop.return_value = (0, [])
self._agent.Stop(mock.MagicMock())
# Can start and stop tracing multiple times.
self._agent.Start(self._trace_options, self._category_filter, 10)
self._platform_backend.surface_stats_collector.Stop.return_value = (0, [])
self._agent.Stop(mock.MagicMock())
@mock.patch(
'devil.android.perf.surface_stats_collector.SurfaceStatsCollector')
def testExceptionRaisedInStopTracing(self, MockSurfaceStatsCollector):
self._agent.Start(self._trace_options, self._category_filter, 10)
self._platform_backend.surface_stats_collector.Stop.side_effect = Exception(
'Raise error when stopping tracing.')
with self.assertRaises(Exception):
self._agent.Stop(mock.MagicMock())
# Tracing is stopped even if there is exception. And the agent can start
# tracing again.
self._agent.Start(self._trace_options, self._category_filter, 10)
self._platform_backend.surface_stats_collector.Stop.side_effect = None
self._platform_backend.surface_stats_collector.Stop.return_value = (0, [])
self._agent.Stop(mock.MagicMock())
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment