OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 import os | 4 import os |
5 | 5 |
6 from telemetry.core import platform | 6 from telemetry.core import platform |
7 from telemetry.core.platform import android_platform | 7 from telemetry.core.platform import android_platform |
8 from telemetry.core import wpr_modes | 8 from telemetry.core import wpr_modes |
9 from telemetry.core.platform import android_device | 9 from telemetry.core.platform import android_device |
10 from telemetry.user_story import shared_user_story_state | 10 from telemetry.user_story import shared_user_story_state |
11 from telemetry.web_perf import timeline_based_measurement | 11 from telemetry.web_perf import timeline_based_measurement |
12 | 12 |
13 | 13 |
14 # TODO(slamm): Interact with TimelineBasedMeasurement when it no longer | |
15 # depends on browser logic. | |
16 class SharedAppState(shared_user_story_state.SharedUserStoryState): | 14 class SharedAppState(shared_user_story_state.SharedUserStoryState): |
17 """Manage test state/transitions across multiple android.UserStory's. | 15 """Manage test state/transitions across multiple android.UserStory's. |
18 | 16 |
19 WARNING: the class is not ready for public consumption. | 17 WARNING: the class is not ready for public consumption. |
20 Email telemetry@chromium.org if you feel like you must use it. | 18 Email telemetry@chromium.org if you feel like you must use it. |
21 """ | 19 """ |
22 | 20 |
23 def __init__(self, test, finder_options, user_story_set): | 21 def __init__(self, test, finder_options, user_story_set): |
24 """This method is styled on unittest.TestCase.setUpClass. | 22 """This method is styled on unittest.TestCase.setUpClass. |
25 | 23 |
26 Args: | 24 Args: |
27 test: a web_perf.TimelineBasedMeasurement instance. | 25 test: a web_perf.TimelineBasedMeasurement instance. |
28 options: a BrowserFinderOptions instance with command line options. | 26 options: a BrowserFinderOptions instance with command line options. |
29 user_story_set: an android.UserStorySet instance. | 27 user_story_set: an android.UserStorySet instance. |
30 """ | 28 """ |
31 super(SharedAppState, self).__init__(test, finder_options, user_story_set) | 29 super(SharedAppState, self).__init__(test, finder_options, user_story_set) |
32 if not isinstance( | 30 if not isinstance( |
33 test, timeline_based_measurement.TimelineBasedMeasurement): | 31 test, timeline_based_measurement.TimelineBasedMeasurement): |
34 raise ValueError( | 32 raise ValueError( |
35 'SharedAppState only accepts TimelineBasedMeasurement tests' | 33 'SharedAppState only accepts TimelineBasedMeasurement tests' |
36 ' (not %s).' % test.__class__) | 34 ' (not %s).' % test.__class__) |
| 35 self._test = test |
37 self._finder_options = finder_options | 36 self._finder_options = finder_options |
38 self._android_app = None | 37 self._android_app = None |
39 self._current_user_story = None | 38 self._current_user_story = None |
40 self._android_platform = platform.GetPlatformForDevice( | 39 self._android_platform = platform.GetPlatformForDevice( |
41 android_device.GetDevice(finder_options)) | 40 android_device.GetDevice(finder_options)) |
42 assert self._android_platform, 'Unable to create android platform.' | 41 assert self._android_platform, 'Unable to create android platform.' |
43 assert isinstance( | 42 assert isinstance( |
44 self._android_platform, android_platform.AndroidPlatform) | 43 self._android_platform, android_platform.AndroidPlatform) |
45 | 44 |
46 @property | 45 @property |
47 def app(self): | 46 def app(self): |
48 return self._android_app | 47 return self._android_app |
49 | 48 |
50 @property | 49 @property |
51 def platform(self): | 50 def platform(self): |
52 return self._android_platform | 51 return self._android_platform |
53 | 52 |
54 def WillRunUserStory(self, user_story): | 53 def WillRunUserStory(self, user_story): |
55 assert not self._android_app | 54 assert not self._android_app |
| 55 self._test.WillRunUserStory(self._android_platform.tracing_controller) |
56 self._current_user_story = user_story | 56 self._current_user_story = user_story |
57 self._android_app = self._android_platform.LaunchAndroidApplication( | 57 self._android_app = self._android_platform.LaunchAndroidApplication( |
58 user_story.start_intent, user_story.is_app_ready_predicate) | 58 user_story.start_intent, user_story.is_app_ready_predicate) |
59 | 59 |
60 def RunUserStory(self, results): | 60 def RunUserStory(self, results): |
61 self._current_user_story.Run(self) | 61 self._current_user_story.Run(self) |
| 62 self._test.Measure(self._android_platform.tracing_controller, results) |
62 | 63 |
63 def DidRunUserStory(self, results): | 64 def DidRunUserStory(self, results): |
| 65 self._test.DidRunUserStory(self._android_platform.tracing_controller) |
64 if self._android_app: | 66 if self._android_app: |
65 self._android_app.Close() | 67 self._android_app.Close() |
66 self._android_app = None | 68 self._android_app = None |
67 | 69 |
68 def GetTestExpectationAndSkipValue(self, expectations): | 70 def GetTestExpectationAndSkipValue(self, expectations): |
69 # TODO(chrishenry): Implement this properly. | 71 """This does not apply to android app user stories.""" |
70 return 'pass', None | 72 return 'pass', None |
71 | 73 |
72 def TearDownState(self, results): | 74 def TearDownState(self, results): |
| 75 """Tear down anything created in the __init__ method that is not needed. |
| 76 |
| 77 Currently, there is no clean-up needed from SharedAppState.__init__. |
| 78 """ |
73 pass | 79 pass |
OLD | NEW |