xref: /aosp_15_r20/external/bcc/tests/python/test_free_bcc_memory.py (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1#!/usr/bin/env python3
2#
3# USAGE: test_usdt.py
4#
5# Copyright 2018 Facebook, Inc
6# Licensed under the Apache License, Version 2.0 (the "License")
7
8from __future__ import print_function
9from bcc import BPF
10from unittest import main, skipUnless, TestCase
11from subprocess import Popen, PIPE
12from utils import kernel_version_ge
13import os
14
15class TestFreeLLVMMemory(TestCase):
16    def getRssFile(self):
17        with Popen(["cat", "/proc/" + str(os.getpid()) + "/status"],
18                  stdout=PIPE) as p:
19            rss = None
20            unit = None
21            for line in p.stdout.readlines():
22                if (line.find(b'RssFile') >= 0):
23                    rss  = line.split(b' ')[-2]
24                    unit = line.split(b' ')[-1].rstrip()
25                    break
26
27            return [rss, unit]
28
29    @skipUnless(kernel_version_ge(4,5), "requires kernel >= 4.5")
30    def testFreeLLVMMemory(self):
31        text = b"int test() { return 0; }"
32        b = BPF(text=text)
33
34        # get the RssFile before freeing bcc memory
35        [rss1, unit1] = self.getRssFile()
36        self.assertTrue(rss1 != None)
37
38        # free the bcc memory
39        self.assertTrue(b.free_bcc_memory() == 0)
40
41        # get the RssFile after freeing bcc memory
42        [rss2, unit2] = self.getRssFile()
43        self.assertTrue(rss2 != None)
44
45        self.assertTrue(unit1 == unit2)
46
47        print("Before freeing llvm memory: RssFile: ", rss1, unit1)
48        print("After  freeing llvm memory: RssFile: ", rss2, unit2)
49        self.assertTrue(rss1 > rss2)
50
51if __name__ == "__main__":
52    main()
53