• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2# Copyright (C) 2023 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License a
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16from python.generators.diff_tests.testing import Path, DataPath, Metric, Systrace
17from python.generators.diff_tests.testing import Csv, Json, TextProto, BinaryProto
18from python.generators.diff_tests.testing import DiffTestBlueprint, TraceInjector
19from python.generators.diff_tests.testing import TestSuite
20from python.generators.diff_tests.testing import PrintProfileProto
21
22
23class AndroidParser(TestSuite):
24
25  def test_android_system_property_counter(self):
26    return DiffTestBlueprint(
27        trace=TextProto(r"""
28        packet {
29          timestamp: 1000
30          android_system_property {
31            values {
32              name: "debug.tracing.screen_state"
33              value: "2"
34            }
35            values {
36              name: "debug.tracing.device_state"
37              value: "some_state_from_sysprops"
38            }
39          }
40        }
41        packet {
42          ftrace_events {
43            cpu: 1
44            event {
45              timestamp: 2000
46              pid: 1
47              print {
48                buf: "C|1000|ScreenState|1\n"
49              }
50            }
51            event {
52              timestamp: 3000
53              pid: 1
54              print {
55                buf: "N|1000|DeviceStateChanged|some_state_from_atrace\n"
56              }
57            }
58          }
59        }
60        """),
61        query="""
62        SELECT t.type, t.name, c.id, c.ts, c.type, c.value
63        FROM counter_track t JOIN counter c ON t.id = c.track_id
64        WHERE name = 'ScreenState';
65        """,
66        out=Csv("""
67        "type","name","id","ts","type","value"
68        "counter_track","ScreenState",0,1000,"counter",2.000000
69        "counter_track","ScreenState",1,2000,"counter",1.000000
70        """))
71
72  def test_android_system_property_slice(self):
73    return DiffTestBlueprint(
74        trace=TextProto(r"""
75        packet {
76          timestamp: 1000
77          android_system_property {
78            values {
79              name: "debug.tracing.screen_state"
80              value: "2"
81            }
82            values {
83              name: "debug.tracing.device_state"
84              value: "some_state_from_sysprops"
85            }
86          }
87        }
88        packet {
89          ftrace_events {
90            cpu: 1
91            event {
92              timestamp: 2000
93              pid: 1
94              print {
95                buf: "C|1000|ScreenState|1\n"
96              }
97            }
98            event {
99              timestamp: 3000
100              pid: 1
101              print {
102                buf: "N|1000|DeviceStateChanged|some_state_from_atrace\n"
103              }
104            }
105          }
106        }
107        """),
108        query="""
109        SELECT t.type, t.name, s.id, s.ts, s.dur, s.type, s.name
110        FROM track t JOIN slice s ON s.track_id = t.id
111        WHERE t.name = 'DeviceStateChanged';
112        """,
113        out=Path('android_system_property_slice.out'))
114
115  def test_binder_txn_sync_good(self):
116    return DiffTestBlueprint(
117        trace=Systrace(
118            """          client-521390  [005] ..... 137012.464739: binder_command: cmd=0x40406300 BC_TRANSACTION
119          client-521390  [005] ..... 137012.464741: binder_transaction: transaction=5149 dest_node=5143 dest_proc=521383 dest_thread=0 reply=0 flags=0x0 code=0x3
120          server-521383  [004] ..... 137012.464771: binder_transaction_received: transaction=5149
121          server-521383  [004] ..... 137012.464772: binder_return: cmd=0x80407202 BR_TRANSACTION
122          server-521383  [004] ..... 137012.464815: binder_command: cmd=0x40086303 BC_FREE_BUFFER
123          server-521383  [004] ..... 137012.464823: binder_command: cmd=0x40406301 BC_REPLY
124          server-521383  [004] ..... 137012.464826: binder_transaction: transaction=5150 dest_node=0 dest_proc=521390 dest_thread=521390 reply=1 flags=0x20 code=0x3
125          server-521383  [004] ..... 137012.464837: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
126          client-521390  [005] ..... 137012.464847: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
127          client-521390  [005] ..... 137012.464848: binder_transaction_received: transaction=5150
128          client-521390  [005] ..... 137012.464849: binder_return: cmd=0x80407203 BR_REPLY
129          """),
130        query="""
131      SELECT
132        dur
133      FROM slice
134      ORDER BY dur;
135      """,
136        out=Csv("""
137      "dur"
138      55000
139      107000
140      """))
141
142  def test_binder_txn_sync_bad_request(self):
143    return DiffTestBlueprint(
144        trace=Systrace(
145            """          client-521349  [005] ..... 137004.281009: binder_command: cmd=0x40406300 BC_TRANSACTION
146          client-521349  [005] ..... 137004.281010: binder_transaction: transaction=5135 dest_node=5129 dest_proc=521347 dest_thread=0 reply=0 flags=0x0 code=0x3
147          client-521349  [005] ..... 137004.281410: binder_return: cmd=0x7211 BR_FAILED_REPLY
148          """),
149        query="""
150      SELECT
151        dur
152      FROM slice
153      ORDER BY dur;
154      """,
155        out=Csv("""
156      "dur"
157      400000
158      """))
159
160  def test_binder_txn_sync_bad_reply(self):
161    return DiffTestBlueprint(
162        trace=Systrace(
163            """          client-521332  [007] ..... 136996.112660: binder_command: cmd=0x40406300 BC_TRANSACTION
164          client-521332  [007] ..... 136996.112662: binder_transaction: transaction=5120 dest_node=5114 dest_proc=521330 dest_thread=0 reply=0 flags=0x0 code=0x3
165          server-521330  [000] ..... 136996.112714: binder_transaction_received: transaction=5120
166          server-521330  [000] ..... 136996.112715: binder_return: cmd=0x80407202 BR_TRANSACTION
167          server-521330  [000] ..... 136996.112752: binder_command: cmd=0x40086303 BC_FREE_BUFFER
168          server-521330  [000] ..... 136996.112758: binder_command: cmd=0x40406301 BC_REPLY
169          server-521330  [000] ..... 136996.112760: binder_transaction: transaction=5121 dest_node=0 dest_proc=521332 dest_thread=521332 reply=1 flags=0x20 code=0x3
170          server-521330  [000] ..... 136996.113163: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
171          client-521332  [007] ..... 136996.113201: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
172          client-521332  [007] ..... 136996.113201: binder_return: cmd=0x7211 BR_FAILED_REPLY
173          """),
174        query="""
175      SELECT
176        dur
177      FROM slice
178      ORDER BY dur;
179      """,
180        out=Csv("""
181      "dur"
182      46000
183      539000
184      """))
185
186  def test_binder_txn_oneway_good(self):
187    return DiffTestBlueprint(
188        trace=Systrace(
189            """          client-521406  [003] ..... 137020.679833: binder_command: cmd=0x40406300 BC_TRANSACTION
190          client-521406  [003] ..... 137020.679834: binder_transaction: transaction=5161 dest_node=5155 dest_proc=521404 dest_thread=0 reply=0 flags=0x1 code=0x3
191          client-521406  [003] ..... 137020.679843: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
192          server-521404  [006] ..... 137020.679890: binder_transaction_received: transaction=5161
193          server-521404  [006] ..... 137020.679890: binder_return: cmd=0x80407202 BR_TRANSACTION
194          """),
195        query="""
196      SELECT
197        dur
198      FROM slice
199      ORDER BY dur;
200      """,
201        out=Csv("""
202      "dur"
203      0
204      0
205      """))
206
207  # Tests when counter_tack.machine_id is not null.
208  def test_android_system_property_counter_machine_id(self):
209    return DiffTestBlueprint(
210        trace=TextProto(r"""
211        packet {
212          timestamp: 1000
213          android_system_property {
214            values {
215              name: "debug.tracing.screen_state"
216              value: "2"
217            }
218            values {
219              name: "debug.tracing.device_state"
220              value: "some_state_from_sysprops"
221            }
222          }
223          machine_id: 1001
224        }
225        packet {
226          ftrace_events {
227            cpu: 1
228            event {
229              timestamp: 2000
230              pid: 1
231              print {
232                buf: "C|1000|ScreenState|1\n"
233              }
234            }
235            event {
236              timestamp: 3000
237              pid: 1
238              print {
239                buf: "N|1000|DeviceStateChanged|some_state_from_atrace\n"
240              }
241            }
242          }
243          machine_id: 1001
244        }
245        """),
246        query="""
247        SELECT t.type, t.name, c.id, c.ts, c.type, c.value
248        FROM counter_track t JOIN counter c ON t.id = c.track_id
249        WHERE name = 'ScreenState'
250          AND t.machine_id IS NOT NULL;
251        """,
252        out=Csv("""
253        "type","name","id","ts","type","value"
254        "counter_track","ScreenState",0,1000,"counter",2.000000
255        "counter_track","ScreenState",1,2000,"counter",1.000000
256        """))
257