google performace 测试用python实现

便于在windows上进行google performance测试,提前发现问题。

# coding=utf-8
# author = ao.deng

import subprocess
import time
import re

import sys

ONE_KB = 1024
ONE_GB = 1048576
FIVE_TWELVE_MB = 524288
PASS = "PASS"
FAIL = "FAIL"
REDUCE = "REDUCE"
OPTIMAL = "OPTIMAL"
SCREEN_TYPE_VGA = "VGA"
SCREEN_TYPE_WVGA = "WVGA"
SCREEN_TYPE_QHD = "QHD"
SCREEN_TYPE_HD = "HD"

MAX_PERSISTENT_MEMORY = 90 * ONE_KB

MIN_FREE_MEMORY_FOR_ONE_GB_VGA = 600 * ONE_KB
MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_VGA = 135 * ONE_KB
MAX_LAUNCHER_MEMORY_VGA = 40 * ONE_KB
MAX_SYSTEM_UI_MEMORY_VGA = 50 * ONE_KB
MAX_SYSTEM_SERVER_MEMORY_VGA = 65 * ONE_KB
MAX_USED_KERNEL_MEMORY_VGA = 70 * ONE_KB

MIN_FREE_MEMORY_FOR_ONE_GB_WVGA = 530 * ONE_KB
MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_WVGA = 125 * ONE_KB
MAX_LAUNCHER_MEMORY_WVGA = 45 * ONE_KB
MAX_SYSTEM_UI_MEMORY_WVGA = 60 * ONE_KB
MAX_SYSTEM_SERVER_MEMORY_WVGA = 75 * ONE_KB
MAX_USED_KERNEL_MEMORY_WVGA = 80 * ONE_KB

MIN_FREE_MEMORY_FOR_ONE_GB_QHD = 510 * ONE_KB
MAX_LAUNCHER_MEMORY_QHD = 50 * ONE_KB
MAX_SYSTEM_UI_MEMORY_QHD = 65 * ONE_KB
MAX_SYSTEM_SERVER_MEMORY_QHD = 80 * ONE_KB
MAX_USED_KERNEL_MEMORY_QHD = 85 * ONE_KB

MIN_FREE_MEMORY_FOR_ONE_GB_HD = 430 * ONE_KB
MAX_LAUNCHER_MEMORY_HD = 55 * ONE_KB
MAX_SYSTEM_UI_MEMORY_HD = 75 * ONE_KB
MAX_SYSTEM_SERVER_MEMORY_HD = 90 * ONE_KB
MAX_USED_KERNEL_MEMORY_HD = 95 * ONE_KB

MAX_MEMORY_CARVEOUT_MT6580M_ONE_GB = 61 * ONE_KB
MAX_MEMORY_CARVEOUT_MT6580M_FIVE_TWELVE_MB = 45 * ONE_KB

MAX_MEMORY_CARVEOUT_MT6737M_ONE_GB = 107 * ONE_KB
MAX_MEMORY_CARVEOUT_MT6737M_FIVE_TWELVE_MB = 89 * ONE_KB

MAX_MEMORY_CARVEOUT_MT6739_ENG_ONE_GB = 129 * ONE_KB
MAX_MEMORY_CARVEOUT_MT6739_ENG_FIVE_TWELVE_MB = 95 * ONE_KB

MAX_MEMORY_CARVEOUT_MSM8909_ONE_GB = 120 * ONE_KB
MAX_MEMORY_CARVEOUT_MSM8909_FIVE_TWELVE_MB = 120 * ONE_KB

MAX_MEMORY_CARVEOUT_MSM8917_ONE_GB = 135 * ONE_KB
MAX_MEMORY_CARVEOUT_MSM8917_FIVE_TWELVE_MB = 120 * ONE_KB

SECTION_SEPARATOR = "----------------------------------------------------------------------"
WAIT_FOR_DEVICE_TIME = 2
wait_time = 300

outputFileName = ''


# 执行命令
def getCmdEexcuteResult(cmd):
    ps = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
    data = ps.stdout.readlines()
    return data


def writeFile(filename, data):
    with open(filename, "a+", encoding="utf-8") as f:
        f.write(data + "\n")
        f.close()


def printString(str):
    print(str)
    writeFile(outputFileName, str)


def get_device_serial():
    device_serial_array = getCmdEexcuteResult("adb devices")[1:-1]
    #print(device_serial_array)

    device_count = len(device_serial_array)

    if device_count < 1:
        print("No device found")
        sys.exit(1)
    elif device_count == 1:
        device_serial = bytes.decode(device_serial_array[0]).split("\t")[0]
        return device_serial
    elif device_count > 1:
        print("Too much device")
        sys.exit(1)


def wait_for_device():
    print("Waiting for device to come online ...",end="")
    time.sleep(WAIT_FOR_DEVICE_TIME)
    cmd = "adb wait-for-device"
    getCmdEexcuteResult(cmd)
    boot_completed = getCmdEexcuteResult("adb shell getprop sys.boot_completed")
    # print(boot_completed)
    if boot_completed != [] and boot_completed != [b'\r\n']:
        boot_completed_flag = int((bytes.decode(boot_completed[0])).strip('\r\n'))
    else:
        boot_completed_flag = 0

    while boot_completed_flag != 1:
        print(".", end="", flush=True)
        time.sleep(WAIT_FOR_DEVICE_TIME)
        boot_completed = getCmdEexcuteResult("adb shell getprop sys.boot_completed")
        if boot_completed != [] and boot_completed != [b'\r\n']:
            boot_completed_flag = int((bytes.decode(boot_completed[0])).strip('\r\n'))
        else:
            boot_completed_flag = 0

    time.sleep(WAIT_FOR_DEVICE_TIME)
    print("")


def formatData(dataKB):
    intDataKB = 0
    if dataKB.find(",") > -1:
        dataKB_array = dataKB.split(",")
        dataKB_len = len(dataKB_array)
        for i in range(dataKB_len):
            intDataKB += int(dataKB_array[i]) * (1000 ** (dataKB_len - i - 1))
    else:
        intDataKB = int(dataKB)
    return intDataKB


def formatCompareData(currentData, standardData):
    deviationData = currentData - standardData
    return "    {} - {}(Standard)={}".format(currentData, standardData, deviationData)


# Tests if the device has required memory metrics.
#
# Arguments:
#    Device RAM size
#    Free memory on device
#    Used kernel memory
#    System server Pss
#    System UI Pss
#    Launcher Pss
def test_pss_metrics(total_ram_size, free_memory, kernel_memory, system_server_memory, system_ui_memory,
                     launcher_memory, memory_carveout):
    screen_size = bytes.decode(getCmdEexcuteResult('''adb shell "wm size|cut -d ':' -f 2"''')[0]).strip("\r\n").split(
        "x")
    width = int(screen_size[0])
    height = int(screen_size[1])

    if height <= width:
        short_side = height
        long_side = width
    else:
        short_side = width
        long_side = height

    free_memory_test_result = "N/A"
    launcher_memory_test_result = "N/A"
    kernel_memory_test_result = "N/A"
    system_server_memory_test_result = "N/A"
    system_ui_memory_test_result = "N/A"
    device_screen_type = "N/A"
    if short_side <= 480 and long_side <= 640:  # vga
        device_screen_type = SCREEN_TYPE_VGA
        if total_ram_size == ONE_GB:
            if free_memory >= MIN_FREE_MEMORY_FOR_ONE_GB_VGA:
                free_memory_test_result = PASS + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_VGA)
            else:
                free_memory_test_result = FAIL + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_VGA)
        elif total_ram_size == FIVE_TWELVE_MB:
            if free_memory >= MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_VGA:
                free_memory_test_result = PASS + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_VGA)
            else:
                free_memory_test_result = FAIL + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_VGA)

        if launcher_memory <= MAX_LAUNCHER_MEMORY_VGA:
            launcher_memory_test_result = PASS + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_VGA)
        else:
            launcher_memory_test_result = FAIL + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_VGA)

        if kernel_memory <= MAX_USED_KERNEL_MEMORY_VGA:
            kernel_memory_test_result = OPTIMAL + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_VGA)
        else:
            kernel_memory_test_result = REDUCE + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_VGA)

        if system_server_memory <= MAX_SYSTEM_SERVER_MEMORY_VGA:
            system_server_memory_test_result = OPTIMAL + formatCompareData(system_server_memory,
                                                                           MAX_SYSTEM_SERVER_MEMORY_VGA)
        else:
            system_server_memory_test_result = REDUCE + formatCompareData(system_server_memory,
                                                                          MAX_SYSTEM_SERVER_MEMORY_VGA)

        if system_ui_memory <= MAX_SYSTEM_UI_MEMORY_VGA:
            system_ui_memory_test_result = OPTIMAL + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_VGA)
        else:
            system_ui_memory_test_result = REDUCE + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_VGA)
    elif short_side <= 480 and long_side <= 854:  # wvga
        device_screen_type = SCREEN_TYPE_WVGA
        if total_ram_size == ONE_GB:
            if free_memory >= MIN_FREE_MEMORY_FOR_ONE_GB_WVGA:
                free_memory_test_result = PASS + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_WVGA)
            else:
                free_memory_test_result = FAIL + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_WVGA)
        elif total_ram_size == FIVE_TWELVE_MB:
            if free_memory >= MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_WVGA:
                free_memory_test_result = PASS + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_WVGA)
            else:
                free_memory_test_result = FAIL + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_FIVE_TWELVE_MB_WVGA)

        if launcher_memory <= MAX_LAUNCHER_MEMORY_WVGA:
            launcher_memory_test_result = OPTIMAL + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_WVGA)
        else:
            launcher_memory_test_result = REDUCE + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_WVGA)

        if kernel_memory <= MAX_USED_KERNEL_MEMORY_WVGA:
            kernel_memory_test_result = OPTIMAL + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_WVGA)
        else:
            kernel_memory_test_result = REDUCE + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_WVGA)

        if system_server_memory <= MAX_SYSTEM_SERVER_MEMORY_WVGA:
            system_server_memory_test_result = OPTIMAL + formatCompareData(system_server_memory,
                                                                           MAX_SYSTEM_SERVER_MEMORY_WVGA)
        else:
            system_server_memory_test_result = REDUCE + formatCompareData(system_server_memory,
                                                                          MAX_SYSTEM_SERVER_MEMORY_WVGA)

        if system_ui_memory <= MAX_SYSTEM_UI_MEMORY_WVGA:
            system_ui_memory_test_result = OPTIMAL + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_WVGA)
        else:
            system_ui_memory_test_result = REDUCE + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_WVGA)
    elif short_side <= 540 and long_side <= 960:  # qhd
        device_screen_type = SCREEN_TYPE_QHD
        if total_ram_size == ONE_GB:
            if free_memory >= MIN_FREE_MEMORY_FOR_ONE_GB_QHD:
                free_memory_test_result = PASS + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_QHD)
            else:
                free_memory_test_result = FAIL + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_QHD)

        if launcher_memory <= MAX_LAUNCHER_MEMORY_QHD:
            launcher_memory_test_result = PASS + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_QHD)
        else:
            launcher_memory_test_result = FAIL + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_QHD)

        if kernel_memory <= MAX_USED_KERNEL_MEMORY_QHD:
            kernel_memory_test_result = OPTIMAL + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_QHD)
        else:
            kernel_memory_test_result = REDUCE + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_QHD)

        if system_server_memory <= MAX_SYSTEM_SERVER_MEMORY_QHD:
            system_server_memory_test_result = OPTIMAL + formatCompareData(system_server_memory,
                                                                           MAX_SYSTEM_SERVER_MEMORY_QHD)
        else:
            system_server_memory_test_result = REDUCE + formatCompareData(system_server_memory,
                                                                          MAX_SYSTEM_SERVER_MEMORY_QHD)

        if system_ui_memory <= MAX_SYSTEM_UI_MEMORY_QHD:
            system_ui_memory_test_result = OPTIMAL + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_QHD)
        else:
            system_ui_memory_test_result = REDUCE + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_QHD)
    else:  # "hd"
        device_screen_type = SCREEN_TYPE_HD
        if total_ram_size == ONE_GB:
            if free_memory >= MIN_FREE_MEMORY_FOR_ONE_GB_HD:
                free_memory_test_result = PASS + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_HD)
            else:
                free_memory_test_result = FAIL + formatCompareData(free_memory, MIN_FREE_MEMORY_FOR_ONE_GB_HD)

        if launcher_memory <= MAX_LAUNCHER_MEMORY_HD:
            launcher_memory_test_result = PASS + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_HD)
        else:
            launcher_memory_test_result = FAIL + formatCompareData(launcher_memory, MAX_LAUNCHER_MEMORY_HD)

        if kernel_memory <= MAX_USED_KERNEL_MEMORY_HD:
            kernel_memory_test_result = OPTIMAL + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_HD)
        else:
            kernel_memory_test_result = REDUCE + formatCompareData(kernel_memory, MAX_USED_KERNEL_MEMORY_HD)

        if system_server_memory <= MAX_SYSTEM_SERVER_MEMORY_HD:
            system_server_memory_test_result = OPTIMAL + formatCompareData(system_server_memory,
                                                                           MAX_SYSTEM_SERVER_MEMORY_HD)
        else:
            system_server_memory_test_result = REDUCE + formatCompareData(system_server_memory,
                                                                          MAX_SYSTEM_SERVER_MEMORY_HD)

        if system_ui_memory <= MAX_SYSTEM_UI_MEMORY_HD:
            system_ui_memory_test_result = OPTIMAL + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_HD)
        else:
            system_ui_memory_test_result = REDUCE + formatCompareData(system_ui_memory, MAX_SYSTEM_UI_MEMORY_HD)
    chipset_info = bytes.decode(getCmdEexcuteResult('adb shell "cat /proc/cpuinfo |grep -m 1 -i hardware"')[0]).strip(
        "\r\n")
    # print(chipset_info)
    memory_carveout_test_result = "N/A"

    if "MT6580M" in chipset_info:
        if total_ram_size == ONE_GB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MT6580M_ONE_GB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MT6580M_ONE_GB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MT6580M_ONE_GB)
        elif total_ram_size == FIVE_TWELVE_MB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MT6580M_FIVE_TWELVE_MB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MT6580M_FIVE_TWELVE_MB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MT6580M_FIVE_TWELVE_MB)
    elif "MT6737M" in chipset_info:
        if total_ram_size == ONE_GB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MT6737M_ONE_GB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MT6737M_ONE_GB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MT6737M_ONE_GB)
        elif total_ram_size == FIVE_TWELVE_MB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MT6737M_FIVE_TWELVE_MB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MT6737M_FIVE_TWELVE_MB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MT6737M_FIVE_TWELVE_MB)
    elif "MT6739-ENG" in chipset_info:
        if total_ram_size == ONE_GB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MT6739_ENG_ONE_GB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MT6739_ENG_ONE_GB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MT6739_ENG_ONE_GB)
        elif total_ram_size == FIVE_TWELVE_MB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MT6739_ENG_FIVE_TWELVE_MB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MT6739_ENG_FIVE_TWELVE_MB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MT6739_ENG_FIVE_TWELVE_MB)
    elif "MSM8909" in chipset_info:
        if total_ram_size == ONE_GB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MSM8909_ONE_GB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MSM8909_ONE_GB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MSM8909_ONE_GB)
        elif total_ram_size == FIVE_TWELVE_MB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MSM8909_FIVE_TWELVE_MB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MSM8909_FIVE_TWELVE_MB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MSM8909_FIVE_TWELVE_MB)
    elif "MSM8917" in chipset_info:
        if total_ram_size == ONE_GB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MSM8917_ONE_GB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MSM8917_ONE_GB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MSM8917_ONE_GB)
        elif total_ram_size == FIVE_TWELVE_MB:
            if memory_carveout <= MAX_MEMORY_CARVEOUT_MSM8917_FIVE_TWELVE_MB:
                memory_carveout_test_result = OPTIMAL + formatCompareData(memory_carveout,
                                                                          MAX_MEMORY_CARVEOUT_MSM8917_FIVE_TWELVE_MB)
            else:
                memory_carveout_test_result = REDUCE + formatCompareData(memory_carveout,
                                                                         MAX_MEMORY_CARVEOUT_MSM8917_FIVE_TWELVE_MB)

    max_cpu_freq = bytes.decode(
        getCmdEexcuteResult("adb shell cat sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq")[0]).strip("\r\n")
    return '''Chipset Info: %s
Max CPU frequency: %s\n
Build approval metrics (Tested in GTS)
Device screen type: %s
Free memory test: %s
Launcher memory test: %s\n
Metrics impacting free memory and persistent memory
Kernel memory test: %s
System server memory test: %s
System UI memory test: %s
Memory carveout test: %s ''' % (chipset_info, max_cpu_freq, device_screen_type, free_memory_test_result,
                                launcher_memory_test_result, kernel_memory_test_result,
                                system_server_memory_test_result,
                                system_ui_memory_test_result, memory_carveout_test_result)


def get_post_boot_metrics(meminfo_text_strip, device_serial):
    cached_process_array = re.findall("Cached(.*?)Total PSS by category", meminfo_text_strip)
    # print(cached_process_array)
    cached_process_pid_array = re.findall("\(pid (.*?)\)", cached_process_array[0])
    # print(cached_process_pid_array)

    mem_available_kB = getCmdEexcuteResult('''adb shell "cat /proc/meminfo| grep 'MemAvailable:'"''')
    # print(mem_available_kB)
    mem_available = re.findall(".*?(\d+).*?", bytes.decode(mem_available_kB[0]))[0]
    # print(mem_available)
    cache_proc_dirty = int(mem_available)
    for pid in cached_process_pid_array:
        process_cache_info = bytes.decode(
            getCmdEexcuteResult('''adb shell "dumpsys meminfo %s |grep 'TOTAL'||echo ''"''' % pid)[0])

        # print(process_cache_info)
        process_cache_info_array = re.findall(".*?(\d+).*?", process_cache_info)
        # print(process_cache_info_array)
        if len(process_cache_info_array) < 3:
            printString("Error parsing dumpsys meminfo %s. Exiting ..." % pid)
            sys.exit(1)
        cache_proc_dirty += int(process_cache_info_array[1]) + int(process_cache_info_array[2])

    android_build_fingerprint = getCmdEexcuteResult('adb shell getprop "ro.build.fingerprint"')

    printString("Device serial: %s" % device_serial)
    printString("Build fingerprint: %s" % bytes.decode(android_build_fingerprint[0]).strip("\r\n"))
    printString("MemAvailable: %s KB" % mem_available)
    printString("MemAvailable + Dirty Cache: %s KB" % cache_proc_dirty)

    launcher_memory = \
        re.findall(".*?((\d,?){1,}).*?", re.findall("Total PSS by process:(.*?)launcher", meminfo_text_strip)[0])[-1][0]
    launcher_memory = formatData(launcher_memory)
    printString("Launcher Memory: %s KB" % launcher_memory)

    ion_cma = getCmdEexcuteResult('''adb shell "cat /proc/vmallocinfo | grep 'ion_cma'|| echo 0"''')
    print("ion_cma_memory %s" % ion_cma)
    ion_cma_memory = 0
    kernel_memory_base = \
        re.findall(".*?((\d,?){1,}).*?", re.findall("Total PSS by process:(.*?)Used RAM:", meminfo_text_strip)[0])[-1][
            0]
    kernel_memory = formatData(kernel_memory_base) - int(ion_cma_memory)
    printString("Kernel Memory: %s KB" % kernel_memory)

    system_server_memory = \
        re.findall(".*?((\d,?){1,}).*?", re.findall("Total PSS by process:(.*?)system \(", meminfo_text_strip)[0])[-1][
            0]
    system_server_memory = formatData(system_server_memory)
    printString("System server memory: %s KB" % system_server_memory)

    system_ui_memory = re.findall(".*?((\d,?){1,}).*?",
                                  re.findall("Total PSS by process:(.*?)com.android.systemui", meminfo_text_strip)[0])[
        -1][0]
    system_ui_memory = formatData(system_ui_memory)
    printString("System UI Memory: %s KB" % system_ui_memory)

    total_ram = re.findall("Total RAM:.*?(\d.*?)K", meminfo_text_strip)[0]
    total_ram = formatData(total_ram)
    printString("Total RAM: %s" % total_ram)

    if total_ram >= FIVE_TWELVE_MB and total_ram <= ONE_GB:
        memory_carveout = ONE_GB - total_ram
        pss_metrics_test_results = test_pss_metrics(ONE_GB, cache_proc_dirty, kernel_memory, system_server_memory,
                                                    system_ui_memory, launcher_memory, memory_carveout)
    elif total_ram > 0 and total_ram < FIVE_TWELVE_MB:
        memory_carveout = FIVE_TWELVE_MB - total_ram
        pss_metrics_test_results = test_pss_metrics(FIVE_TWELVE_MB, cache_proc_dirty, kernel_memory,
                                                    system_server_memory,
                                                    system_ui_memory, launcher_memory, memory_carveout)
    else:
        pss_metrics_test_results = "Pss metrics test: N/A"
        memory_carveout = 0

    if memory_carveout > 0:
        printString("Memory Carveout: %s KB" % memory_carveout)


    if re.search("Persistent Service",meminfo_text_strip) is None:
        persistent_processes_array = re.findall("Persistent(.*?)Foreground", meminfo_text_strip)[0]
    else:
        persistent_processes_array = re.findall("Persistent(.*?)Persistent Service", meminfo_text_strip)[0]
    #print(persistent_processes_array)
    persistent_processes_array = re.findall("(\d.*?)\(pid .*?\)", persistent_processes_array)
    persistent_memory_array = re.findall(".*?((\d,?){1,}).*?", "".join(persistent_processes_array))
    #print(persistent_memory_array)
    persistent_memory = 0
    for persistent_memory_item in persistent_memory_array:
        persistent_memory += formatData(persistent_memory_item[0])
    # print(persistent_memory_array)
    printString("Total persistent Memory: %s KB" % persistent_memory)
    if persistent_memory < MAX_PERSISTENT_MEMORY:
        persistent_memory_test_result = PASS + formatCompareData(persistent_memory, MAX_PERSISTENT_MEMORY)
    else:
        persistent_memory_test_result = FAIL + formatCompareData(persistent_memory, MAX_PERSISTENT_MEMORY)

    #print(persistent_processes_array)
    for i in range(len(persistent_processes_array)):
        if i == 0:
            printString("")
            printString("--------------------")
            printString("Persistent processes")
            printString("--------------------")
        printString(persistent_processes_array[i])

    printString("")
    printString(SECTION_SEPARATOR)
    printString("%s" % pss_metrics_test_results)
    printString("Persistent memory test: %s" % persistent_memory_test_result)
    printString(SECTION_SEPARATOR)


def main():
    device_serial = get_device_serial()
    global outputFileName
    outputFileName = "post_boot_metrics-%s-%s.txt" % (device_serial, int(time.time()))
    printString("Rebooting device")
    cmd = "adb reboot"
    getCmdEexcuteResult(cmd)

    wait_for_device()
    cmd ="adb wait-for-device"
    getCmdEexcuteResult(cmd)
    cmd = "adb shell wm dismiss-keyguard"
    getCmdEexcuteResult(cmd)
    cmd = "adb shell svc power stayon true"
    getCmdEexcuteResult(cmd)

    printString("Sleeping for %s seconds before taking measurement" % wait_time)

    time.sleep(wait_time)

    meminfo_text_bytes = getCmdEexcuteResult("adb shell dumpsys -t 30 meminfo")
    meminfo_text = ''
    meminfo_text_strip = ''
    for item in meminfo_text_bytes:
        meminfo_text += (bytes.decode(item))
        meminfo_text_strip += (bytes.decode(item)).strip("\r\n")


    get_post_boot_metrics(meminfo_text_strip, device_serial)

    # printString("------------------------------- DEBUG INFO START ------------------------------- ")
    # printString(meminfo_text)
    # printString("------------------------------- DEBUG INFO END ------------------------------- ")

if __name__ == "__main__":
    main()
    subprocess.call("pause", shell=True)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值