• 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.name, c.id, c.ts, 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        "name","id","ts","value"
68        "ScreenState",0,1000,2.000000
69        "ScreenState",1,2000,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.name, s.id, s.ts, s.dur, s.name
110        FROM track t JOIN slice s ON s.track_id = t.id
111        WHERE t.name = 'DeviceStateChanged';
112        """,
113        out=Csv("""
114        "name","id","ts","dur","name"
115        "DeviceStateChanged",0,1000,0,"some_state_from_sysprops"
116        "DeviceStateChanged",1,3000,0,"some_state_from_atrace"
117        """))
118
119  def test_binder_txn_sync_good(self):
120    return DiffTestBlueprint(
121        trace=Systrace(
122            """          client-521390  [005] ..... 137012.464739: binder_command: cmd=0x40406300 BC_TRANSACTION
123          client-521390  [005] ..... 137012.464741: binder_transaction: transaction=5149 dest_node=5143 dest_proc=521383 dest_thread=0 reply=0 flags=0x0 code=0x3
124          server-521383  [004] ..... 137012.464771: binder_transaction_received: transaction=5149
125          server-521383  [004] ..... 137012.464772: binder_return: cmd=0x80407202 BR_TRANSACTION
126          server-521383  [004] ..... 137012.464815: binder_command: cmd=0x40086303 BC_FREE_BUFFER
127          server-521383  [004] ..... 137012.464823: binder_command: cmd=0x40406301 BC_REPLY
128          server-521383  [004] ..... 137012.464826: binder_transaction: transaction=5150 dest_node=0 dest_proc=521390 dest_thread=521390 reply=1 flags=0x20 code=0x3
129          server-521383  [004] ..... 137012.464837: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
130          client-521390  [005] ..... 137012.464847: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
131          client-521390  [005] ..... 137012.464848: binder_transaction_received: transaction=5150
132          client-521390  [005] ..... 137012.464849: binder_return: cmd=0x80407203 BR_REPLY
133          """),
134        query="""
135      SELECT
136        dur
137      FROM slice
138      ORDER BY dur;
139      """,
140        out=Csv("""
141      "dur"
142      55000
143      107000
144      """))
145
146  def test_binder_txn_sync_bad_request(self):
147    return DiffTestBlueprint(
148        trace=Systrace(
149            """          client-521349  [005] ..... 137004.281009: binder_command: cmd=0x40406300 BC_TRANSACTION
150          client-521349  [005] ..... 137004.281010: binder_transaction: transaction=5135 dest_node=5129 dest_proc=521347 dest_thread=0 reply=0 flags=0x0 code=0x3
151          client-521349  [005] ..... 137004.281410: binder_return: cmd=0x7211 BR_FAILED_REPLY
152          """),
153        query="""
154      SELECT
155        dur
156      FROM slice
157      ORDER BY dur;
158      """,
159        out=Csv("""
160      "dur"
161      400000
162      """))
163
164  def test_binder_txn_sync_bad_reply(self):
165    return DiffTestBlueprint(
166        trace=Systrace(
167            """          client-521332  [007] ..... 136996.112660: binder_command: cmd=0x40406300 BC_TRANSACTION
168          client-521332  [007] ..... 136996.112662: binder_transaction: transaction=5120 dest_node=5114 dest_proc=521330 dest_thread=0 reply=0 flags=0x0 code=0x3
169          server-521330  [000] ..... 136996.112714: binder_transaction_received: transaction=5120
170          server-521330  [000] ..... 136996.112715: binder_return: cmd=0x80407202 BR_TRANSACTION
171          server-521330  [000] ..... 136996.112752: binder_command: cmd=0x40086303 BC_FREE_BUFFER
172          server-521330  [000] ..... 136996.112758: binder_command: cmd=0x40406301 BC_REPLY
173          server-521330  [000] ..... 136996.112760: binder_transaction: transaction=5121 dest_node=0 dest_proc=521332 dest_thread=521332 reply=1 flags=0x20 code=0x3
174          server-521330  [000] ..... 136996.113163: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
175          client-521332  [007] ..... 136996.113201: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
176          client-521332  [007] ..... 136996.113201: binder_return: cmd=0x7211 BR_FAILED_REPLY
177          """),
178        query="""
179      SELECT
180        dur
181      FROM slice
182      ORDER BY dur;
183      """,
184        out=Csv("""
185      "dur"
186      46000
187      539000
188      """))
189
190  def test_binder_txn_oneway_good(self):
191    return DiffTestBlueprint(
192        trace=Systrace(
193            """          client-521406  [003] ..... 137020.679833: binder_command: cmd=0x40406300 BC_TRANSACTION
194          client-521406  [003] ..... 137020.679834: binder_transaction: transaction=5161 dest_node=5155 dest_proc=521404 dest_thread=0 reply=0 flags=0x1 code=0x3
195          client-521406  [003] ..... 137020.679843: binder_return: cmd=0x7206 BR_TRANSACTION_COMPLETE
196          server-521404  [006] ..... 137020.679890: binder_transaction_received: transaction=5161
197          server-521404  [006] ..... 137020.679890: binder_return: cmd=0x80407202 BR_TRANSACTION
198          """),
199        query="""
200      SELECT
201        dur
202      FROM slice
203      ORDER BY dur;
204      """,
205        out=Csv("""
206      "dur"
207      0
208      0
209      """))
210
211  # Tests when counter_tack.machine_id is not null.
212  def test_android_system_property_counter_machine_id(self):
213    return DiffTestBlueprint(
214        trace=TextProto(r"""
215        packet {
216          timestamp: 1000
217          android_system_property {
218            values {
219              name: "debug.tracing.screen_state"
220              value: "2"
221            }
222            values {
223              name: "debug.tracing.device_state"
224              value: "some_state_from_sysprops"
225            }
226          }
227          machine_id: 1001
228        }
229        packet {
230          ftrace_events {
231            cpu: 1
232            event {
233              timestamp: 2000
234              pid: 1
235              print {
236                buf: "C|1000|ScreenState|1\n"
237              }
238            }
239            event {
240              timestamp: 3000
241              pid: 1
242              print {
243                buf: "N|1000|DeviceStateChanged|some_state_from_atrace\n"
244              }
245            }
246          }
247          machine_id: 1001
248        }
249        """),
250        query="""
251        SELECT t.name, c.id, c.ts, c.value
252        FROM counter_track t JOIN counter c ON t.id = c.track_id
253        WHERE name = 'ScreenState'
254          AND t.machine_id IS NOT NULL;
255        """,
256        out=Csv("""
257          "name","id","ts","value"
258          "ScreenState",0,1000,2.000000
259          "ScreenState",1,2000,1.000000
260        """))
261