blob: aca4edf98b0d8c481a54158b97515192428ca484 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License a
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from python.generators.diff_tests.testing import Path, DataPath, Metric
from python.generators.diff_tests.testing import Csv, Json, TextProto
from python.generators.diff_tests.testing import DiffTestBlueprint
from python.generators.diff_tests.testing import TestSuite
class Memory(TestSuite):
# Contains test for Android memory metrics. ION metric
def test_android_ion(self):
return DiffTestBlueprint(
trace=Path('android_ion.py'),
query=Metric('android_ion'),
out=TextProto(r"""
android_ion {
buffer {
name: "adsp"
avg_size_bytes: 1000.0
min_size_bytes: 1000.0
max_size_bytes: 1100.0
total_alloc_size_bytes: 1100.0
}
buffer {
name: "system"
avg_size_bytes: 1497.4874371859296
min_size_bytes: 1000.0
max_size_bytes: 2000.0
total_alloc_size_bytes: 2000.0
}
}
"""))
def test_android_ion_stat(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
ftrace_events {
cpu: 0
event {
timestamp: 100
pid: 1
ion_stat {
buffer_id: 123
len: 1000
total_allocated: 2000
}
}
}
}
packet {
ftrace_events {
cpu: 0
event {
timestamp: 200
pid: 1
ion_stat {
buffer_id: 123
len: -1000
total_allocated: 1000
}
}
}
}
"""),
query=Metric('android_ion'),
out=TextProto(r"""
android_ion {
buffer {
name: "all"
avg_size_bytes: 2000.0
min_size_bytes: 1000.0
max_size_bytes: 2000.0
total_alloc_size_bytes: 1000.0
}
}
"""))
# DMA-BUF heap Metric
def test_android_dma_heap_stat(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
ftrace_events {
cpu: 0
event {
timestamp: 100
pid: 1
dma_heap_stat {
inode: 123
len: 1024
total_allocated: 2048
}
}
}
}
packet {
ftrace_events {
cpu: 0
event {
timestamp: 200
pid: 1
dma_heap_stat {
inode: 123
len: -1024
total_allocated: 1024
}
}
}
}
"""),
query=Metric('android_dma_heap'),
out=TextProto(r"""
android_dma_heap {
avg_size_bytes: 2048.0
min_size_bytes: 1024.0
max_size_bytes: 2048.0
total_alloc_size_bytes: 1024.0
}
"""))
def test_android_dma_buffer_tracks(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
ftrace_events {
cpu: 0
event {
timestamp: 100
pid: 1
dma_heap_stat {
inode: 123
len: 1024
total_allocated: 2048
}
}
}
}
packet {
ftrace_events {
cpu: 0
event {
timestamp: 200
pid: 1
dma_heap_stat {
inode: 123
len: -1024
total_allocated: 1024
}
}
}
}
"""),
query="""
SELECT track.name, slice.ts, slice.dur, slice.name
FROM slice JOIN track ON slice.track_id = track.id
WHERE track.name = 'mem.dma_buffer';
""",
out=Csv("""
"name","ts","dur","name"
"mem.dma_buffer",100,100,"1 kB"
"""))
# fastrpc metric
def test_android_fastrpc_dma_stat(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
ftrace_events {
cpu: 0
event {
timestamp: 100
pid: 1
fastrpc_dma_stat {
cid: 1
len: 1000
total_allocated: 2000
}
}
}
}
packet {
ftrace_events {
cpu: 0
event {
timestamp: 200
pid: 1
fastrpc_dma_stat {
cid: 1
len: -1000
total_allocated: 1000
}
}
}
}
"""),
query=Metric('android_fastrpc'),
out=TextProto(r"""
android_fastrpc {
subsystem {
name: "MDSP"
avg_size_bytes: 2000.0
min_size_bytes: 1000.0
max_size_bytes: 2000.0
total_alloc_size_bytes: 1000.0
}
}
"""))
# shrink slab
def test_shrink_slab(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
ftrace_events {
cpu: 7
event {
timestamp: 36448185787847
pid: 156
mm_shrink_slab_start {
cache_items: 1
delta: 0
gfp_flags: 3264
nr_objects_to_shrink: 0
shr: 18446743882920355600
shrink: 90
total_scan: 0
nid: 0
priority: 12
}
}
}
}
packet {
ftrace_events {
cpu: 7
event {
timestamp: 36448185788539
pid: 156
mm_shrink_slab_end {
new_scan: 0
retval: 0
shr: 18446743882920355600
shrink: 90
total_scan: 0
unused_scan: 0
nid: 0
}
}
}
}
"""),
query="""
SELECT ts, dur, name FROM slice WHERE name = 'mm_vmscan_shrink_slab';
""",
out=Csv("""
"ts","dur","name"
36448185787847,692,"mm_vmscan_shrink_slab"
"""))
# cma alloc
def test_cma(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
system_info {
utsname {
sysname: "Linux"
release: "5.10.0"
}
}
}
packet {
ftrace_events {
cpu: 4
event {
timestamp: 74288080958099
pid: 537
cma_alloc_start {
align: 4
count: 6592
name: "farawimg"
}
}
event {
timestamp: 74288191109751
pid: 537
cma_alloc_info {
align: 4
count: 6592
err_iso: 0
err_mig: 0
err_test: 0
name: "farawimg"
nr_mapped: 832596
nr_migrated: 6365
nr_reclaimed: 7
pfn: 10365824
}
}
}
}
"""),
query="""
SELECT ts, dur, name FROM slice WHERE name = 'mm_cma_alloc';
""",
out=Csv("""
"ts","dur","name"
74288080958099,110151652,"mm_cma_alloc"
"""))