• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SPDX-License-Identifier: Apache-2.0
2#
3# Copyright (C) 2015, ARM Limited and contributors.
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18import re
19import os
20import logging
21
22from time import sleep
23
24from target_script import TargetScript
25from android import Screen, System
26from android.workload import Workload
27
28
29class GMaps(Workload):
30    """
31    Android GMaps workload
32    """
33
34    # Package required by this workload
35    package = 'com.google.android.apps.maps'
36    action = 'android.intent.action.VIEW'
37
38    def __init__(self, test_env):
39        super(GMaps, self).__init__(test_env)
40        self._log = logging.getLogger('GMaps')
41        self._log.debug('Workload created')
42
43        # Set of output data reported by GMaps
44        self.db_file = None
45
46    def run(self, out_dir, location_search, swipe_count=5, collect=''):
47        """
48        Run single Gmaps workload.
49
50        :param out_dir: Path to experiment directory where to store results.
51        :type out_dir: str
52
53        :param location_search: Search string to be used in GMaps
54        :type location_search: str
55
56        :param swipe_count: Number of sets of (left, right, up, down) swipes to do
57        :type swipe_count: int
58
59        :param collect: Specifies what to collect. Possible values:
60            - 'energy'
61            - 'systrace'
62            - 'ftrace'
63            - any combination of the above
64        :type collect: list(str)
65        """
66
67        # Keep track of mandatory parameters
68        self.out_dir = out_dir
69        self.collect = collect
70
71        # Set min brightness
72        Screen.set_brightness(self._target, auto=False, percent=0)
73        # Unlock device screen (assume no password required)
74        Screen.unlock(self._target)
75
76        # Use the monkey tool to start GMaps
77        # This allows to subsequently set the screen orientation to LANDSCAPE
78        # and to reset the frame statistics.
79        System.monkey(self._target, self.package)
80
81        # Force screen in PORTRAIT  mode
82        Screen.set_orientation(self._target, portrait=True)
83
84        System.gfxinfo_reset(self._target, self.package)
85        sleep(1)
86
87        # Start GMaps on the target device
88        loc_url = 'geo:0,0?q='
89        loc_url += '+'.join(location_search.split())
90        System.start_action(self._target, self.action, loc_url)
91        # Allow the activity to start
92        sleep(1)
93
94        script = TargetScript(self._te, "gmaps_swiper.sh")
95        self._log.debug('Accumulating commands')
96
97        for i in range(swipe_count):
98            System.hswipe(script, 20, 80, 100, True)
99            script.append('sleep 1')
100            System.hswipe(script, 20, 80, 100, False)
101            script.append('sleep 1')
102            System.vswipe(script, 40, 60, 100, True)
103            script.append('sleep 1')
104            System.vswipe(script, 40, 60, 100, False)
105            script.append('sleep 1')
106
107        self._log.debug('Accumulation done')
108
109        # Push script to the target
110        script.push()
111
112        self._log.info('Opening GMaps to [%s]', loc_url)
113        # Let GMaps zoom in on the location
114        sleep(2)
115
116        self.tracingStart()
117
118        self._log.info('Launching target script')
119        script.run()
120        self._log.info('Target script ended')
121
122        self.tracingStop()
123
124        # Get frame stats
125        self.db_file = os.path.join(out_dir, "framestats.txt")
126        System.gfxinfo_get(self._target, self.package, self.db_file)
127
128        # Close the app without clearing the local data to
129        # avoid the dialog to select the account at next start
130        System.force_stop(self._target, self.package, clear=False)
131
132        # Go back to home screen
133        System.home(self._target)
134
135        # Set brightness back to auto
136        Screen.set_brightness(self._target, auto=True)
137
138        # Switch back to screen auto rotation
139        Screen.set_orientation(self._target, auto=True)
140
141# vim :set tabstop=4 shiftwidth=4 expandtab
142