#!/usr/bin/env python2 # Copyright 2019 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import unittest from autotest_lib.client.cros.graphics.graphics_utils import GraphicsKernelMemory class GraphicsKernelMemoryTest(unittest.TestCase): def testParseSysfs_i915_gem_objects(self): """Test parsing kernel 5.x i915_gem_objects""" contents = '''274 shrinkable [0 free] objects, 249675776 bytes frecon: 3 objects, 72192000 bytes (0 active, 0 inactive, 0 unbound, 0 closed) chrome: 6 objects, 74629120 bytes (0 active, 0 inactive, 901120 unbound, 0 closed) chrome: 14 objects, 1765376 bytes (0 active, 552960 inactive, 1212416 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 0 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 75231232 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 155648 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (64241664 active, 60248064 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 106496 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 724992 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 122880 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 122880 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 122880 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 479232 inactive, 1183744 unbound, 0 closed) chrome: 291 objects, 152686592 bytes (0 active, 581632 inactive, 1183744 unbound, 0 closed) [k]contexts: 4 objects, 221184 bytes (0 active, 221184 inactive, 0 unbound, 0 closed)''' expected_results = {'bytes': 249675776, 'objects': 274} self.assertEqual(expected_results, GraphicsKernelMemory._parse_sysfs(contents)) def testParseSysfs_i915_gem_objects_kernel_4_4(self): """Test parsing kernel 4.x i915_gem_objects""" contents = '''557 objects, 100163584 bytes 80 unbound objects, 3653632 bytes 469 bound objects, 95195136 bytes 47 purgeable objects, 2846720 bytes 23 mapped objects, 1757184 bytes 3 display objects (pinned), 8716288 bytes 4294967296 [268435456] gtt total [k]contexts: 46 objects, 2134016 bytes (0 active, 2134016 inactive, 2134016 global, 0 shared, 0 unbound) frecon: 3 objects, 12681216 bytes (0 active, 12681216 inactive, 12681216 global, 0 shared, 0 unbound) chrome: 11 objects, 14626816 bytes (0 active, 12943360 inactive, 12943360 global, 14102528 shared, 1683456 unbound) chrome: 24 objects, 4411392 bytes (0 active, 3117056 inactive, 0 global, 0 shared, 1294336 unbound) chrome: 465 objects, 67448832 bytes (25202688 active, 76062720 inactive, 13443072 global, 14102528 shared, 3227648 unbound) surfaceflinger: 11 objects, 270336 bytes (0 active, 86016 inactive, 0 global, 0 shared, 184320 unbound)''' expected_results = {'bytes': 100163584, 'objects': 557} self.assertEqual(expected_results, GraphicsKernelMemory._parse_sysfs(contents)) def testParseSysfs_i915_gem_gtt(self): """Test parsing kernel 4.x i915_gem_gtt""" contents = ''' ffff88017a138000: 4KiB 41 00 uncached (pinned x 1) (ggtt offset: ffffe000, size: 00001000, normal) (stolen: 00001000) ffff88017a138300: 4KiB 01 01 uncached (pinned x 1) (ggtt offset: ffffd000, size: 00001000, normal) ffff88017a138600: M 92KiB 01 01 uncached dirty (pinned x 1) (ggtt offset: fffe6000, size: 00017000, normal) ffff88017a138900: 16KiB 40 40 uncached dirty (pinned x 1) (ggtt offset: 00080000, size: 00004000, normal) (stolen: 00002000) ffff880147fd4000: 32KiB 76 00 uncached dirty purgeable (pinned x 0) (ggtt offset: 01eae000, size: 00008000, normal) (ppgtt offset: f8010000, size: 00008000) (ppgtt offset: f8000000, size: 00008000) (ppgtt offset: f8010000, size: 00008000) (ppgtt offset: f8010000, size: 00008000) (ppgtt offset: f8010000, size: 00008000) (ppgtt offset: f8000000, size: 00008000) ffff88015bd42700: * 4KiB 02 00 uncached dirty (pinned x 0) (ggtt offset: 01dc9000, size: 00001000, normal) (ppgtt offset: ffffff00d000, size: 00001000) (ppgtt offset: ffffff00d000, size: 00001000) (ppgtt offset: ffffff00d000, size: 00001000) ffff88006409d800: * Y 4KiB 36 00 uncached dirty (pinned x 0) (ppgtt offset: ffffff04b000, size: 00001000) (ppgtt offset: ffffff04b000, size: 00001000) Total 470 objects, 99713024 bytes, 32903168 GTT size''' expected_results = {'bytes': 99713024, 'objects': 470} self.assertEqual(expected_results, GraphicsKernelMemory._parse_sysfs(contents))