blob: 8cbf8e56edeb54c316b10b86bb756ba56ef2b8bb [file] [log] [blame]
/*
* Copyright (C) 2019 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 at
*
* 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.
*/
package com.android.server.stats;
import static com.android.server.stats.IonMemoryUtil.parseIonHeapSizeFromDebugfs;
import static com.android.server.stats.IonMemoryUtil.parseProcessIonHeapSizesFromDebugfs;
import static com.google.common.truth.Truth.assertThat;
import androidx.test.filters.SmallTest;
import com.android.server.stats.IonMemoryUtil.IonAllocations;
import org.junit.Test;
/**
* Build/Install/Run:
* atest FrameworksServicesTests:IonMemoryUtilTest
*/
@SmallTest
public class IonMemoryUtilTest {
// Repeated lines have been removed.
private static final String DEBUG_SYSTEM_ION_HEAP_CONTENTS = String.join(
"\n",
" client pid size",
"----------------------------------------------------",
" audio@2.0-servi 765 4096",
" audio@2.0-servi 765 61440",
" audio@2.0-servi 765 4096",
" voip_client 96 8192",
" voip_client 96 4096",
" system_server 1232 16728064",
" surfaceflinger 611 50642944",
"----------------------------------------------------",
"orphaned allocations (info is from last known client):",
"----------------------------------------------------",
" total orphaned 0",
" total 55193600",
" deferred free 0",
"----------------------------------------------------",
"0 order 4 highmem pages in uncached pool = 0 total",
"0 order 4 lowmem pages in uncached pool = 0 total",
"1251 order 4 lowmem pages in cached pool = 81985536 total",
"VMID 8: 0 order 4 highmem pages in secure pool = 0 total",
"VMID 8: 0 order 4 lowmem pages in secure pool = 0 total",
"--------------------------------------------",
"uncached pool = 4096 cached pool = 83566592 secure pool = 0",
"pool total (uncached + cached + secure) = 83570688",
"--------------------------------------------");
// Repeated lines have been removed.
private static final String DEBUG_SYSTEM_ION_HEAP_CONTENTS_SARGO = String.join(
"\n",
" client pid size page counts"
+ "-------------------------------------------------- 4K 8K "
+ "16K 32K 64K 128K 256K 512K 1M 2M "
+ "4M >=8M",
" system_server 1705 58097664 13120 532 "
+ "0 0 0 0 0 0 0 0 "
+ "0 0M",
" audio@2.0-servi 851 16384 0 2 0 "
+ "0 0 0 0 0 0 0 "
+ "0 0M",
" audio@2.0-servi 851 4096 1 0 0 "
+ " 0 0 0 0 0 0 0 0 "
+ "0M",
" audio@2.0-servi 851 4096 1 0 "
+ " 0 0 0 0 0 0 0 0 "
+ "0 0M",
"----------------------------------------------------",
"orphaned allocations (info is from last known client):",
"----------------------------------------------------",
" total orphaned 0",
" total 159928320",
" deferred free 0",
"----------------------------------------------------",
"0 order 4 highmem pages in uncached pool = 0 total",
"0 order 4 lowmem pages in uncached pool = 0 total",
"1251 order 4 lowmem pages in cached pool = 81985536 total",
"VMID 8: 0 order 4 highmem pages in secure pool = 0 total",
"VMID 8: 0 order 4 lowmem pages in secure pool = 0 total",
"--------------------------------------------",
"uncached pool = 4096 cached pool = 83566592 secure pool = 0",
"pool total (uncached + cached + secure) = 83570688",
"--------------------------------------------");
@Test
public void testParseIonHeapSizeFromDebugfs_emptyContents() {
assertThat(parseIonHeapSizeFromDebugfs("")).isEqualTo(0);
}
@Test
public void testParseIonHeapSizeFromDebugfs_invalidValue() {
assertThat(parseIonHeapSizeFromDebugfs("<<no-value>>")).isEqualTo(0);
assertThat(parseIonHeapSizeFromDebugfs("\ntotal 12345678901234567890\n")).isEqualTo(0);
}
@Test
public void testParseIonHeapSizeFromDebugfs_correctValue() {
assertThat(parseIonHeapSizeFromDebugfs(DEBUG_SYSTEM_ION_HEAP_CONTENTS))
.isEqualTo(55193600);
assertThat(parseIonHeapSizeFromDebugfs(DEBUG_SYSTEM_ION_HEAP_CONTENTS_SARGO))
.isEqualTo(159928320);
}
@Test
public void testParseProcessIonHeapSizesFromDebugfs_emptyContents() {
assertThat(parseProcessIonHeapSizesFromDebugfs("")).hasSize(0);
}
@Test
public void testParseProcessIonHeapSizesFromDebugfs_invalidValue() {
assertThat(parseProcessIonHeapSizesFromDebugfs("<<no-value>>").size()).isEqualTo(0);
}
@Test
public void testParseProcessIonHeapSizesFromDebugfs_correctValue1() {
assertThat(parseProcessIonHeapSizesFromDebugfs(DEBUG_SYSTEM_ION_HEAP_CONTENTS))
.containsExactly(
createIonAllocations(765, 61440 + 4096 + 4096, 3, 61440),
createIonAllocations(96, 8192 + 4096, 2, 8192),
createIonAllocations(1232, 16728064, 1, 16728064),
createIonAllocations(611, 50642944, 1, 50642944));
}
@Test
public void testParseProcessIonHeapSizesFromDebugfs_correctValue2() {
assertThat(parseProcessIonHeapSizesFromDebugfs(DEBUG_SYSTEM_ION_HEAP_CONTENTS_SARGO))
.containsExactly(
createIonAllocations(1705, 58097664, 1, 58097664),
createIonAllocations(851, 16384 + 4096 + 4096, 3, 16384));
}
private static IonAllocations createIonAllocations(int pid, long totalSizeInBytes, int count,
long maxSizeInBytes) {
IonAllocations allocations = new IonAllocations();
allocations.pid = pid;
allocations.totalSizeInBytes = totalSizeInBytes;
allocations.count = count;
allocations.maxSizeInBytes = maxSizeInBytes;
return allocations;
}
}