blob: 07e53416d6517ecf4f4791ad1c71a63939d28ca8 [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 ChromeMemorySnapshots(TestSuite):
def test_memory_snapshot_general_validation(self):
return DiffTestBlueprint(
trace=DataPath('chrome_memory_snapshot.pftrace'),
query="""
SELECT
(
SELECT COUNT(*) FROM memory_snapshot
) AS total_snapshots,
(
SELECT COUNT(*) FROM process
) AS total_processes,
(
SELECT COUNT(*) FROM process_memory_snapshot
) AS total_process_snapshots,
(
SELECT COUNT(*) FROM memory_snapshot_node
) AS total_nodes,
(
SELECT COUNT(*) FROM memory_snapshot_edge
) AS total_edges,
(
SELECT COUNT(DISTINCT args.id)
FROM args
JOIN memory_snapshot_node
ON args.arg_set_id = memory_snapshot_node.arg_set_id
) AS total_node_args,
(
SELECT COUNT(*) FROM profiler_smaps
JOIN memory_snapshot ON timestamp = ts
) AS total_smaps;
""",
out=Path('memory_snapshot_general_validation.out'))
def test_memory_snapshot_os_dump_events(self):
return DiffTestBlueprint(
trace=DataPath('chrome_memory_snapshot.pftrace'),
query=Path('memory_snapshot_os_dump_events_test.sql'),
out=Path('memory_snapshot_os_dump_events.out'))
def test_memory_snapshot_chrome_dump_events(self):
return DiffTestBlueprint(
trace=DataPath('chrome_memory_snapshot.pftrace'),
query="""
SELECT
pms.id AS process_snapshot_id,
upid,
snapshot_id,
timestamp,
detail_level
FROM memory_snapshot ms
LEFT JOIN process_memory_snapshot pms
ON ms.id = pms.snapshot_id;
""",
out=Path('memory_snapshot_chrome_dump_events.out'))
def test_memory_snapshot_nodes(self):
return DiffTestBlueprint(
trace=DataPath('chrome_memory_snapshot.pftrace'),
query="""
SELECT
id,
process_snapshot_id,
parent_node_id,
path,
size,
effective_size
FROM memory_snapshot_node
LIMIT 20;
""",
out=Path('memory_snapshot_nodes.out'))
def test_memory_snapshot_edges(self):
return DiffTestBlueprint(
trace=DataPath('chrome_memory_snapshot.pftrace'),
query="""
SELECT
id,
source_node_id,
target_node_id,
importance
FROM memory_snapshot_edge
LIMIT 20;
""",
out=Path('memory_snapshot_edges.out'))
def test_memory_snapshot_node_args(self):
return DiffTestBlueprint(
trace=DataPath('chrome_memory_snapshot.pftrace'),
query="""
SELECT
node.id AS node_id,
key,
value_type,
int_value,
string_value
FROM memory_snapshot_node node
JOIN args ON node.arg_set_id = args.arg_set_id
LIMIT 20;
""",
out=Path('memory_snapshot_node_args.out'))
def test_memory_snapshot_smaps(self):
return DiffTestBlueprint(
trace=DataPath('chrome_memory_snapshot.pftrace'),
query="""
SELECT
process.upid,
process.name,
smap.ts,
path,
size_kb,
private_dirty_kb,
swap_kb,
file_name,
start_address,
module_timestamp,
module_debugid,
module_debug_path,
protection_flags,
private_clean_resident_kb,
shared_dirty_resident_kb,
shared_clean_resident_kb,
locked_kb,
proportional_resident_kb
FROM process
JOIN profiler_smaps smap ON process.upid = smap.upid
JOIN memory_snapshot ms ON ms.timestamp = smap.ts
LIMIT 20;
""",
out=Path('memory_snapshot_smaps.out'))