113 lines
3.1 KiB
Python
113 lines
3.1 KiB
Python
import platform
|
|
import subprocess
|
|
import sys
|
|
|
|
from optparse import OptionParser
|
|
|
|
TARGET_REFRESH_RATE = {
|
|
"11.20": "53.00",
|
|
"default": "60.00",
|
|
}
|
|
|
|
TARGET_RESOLUTION = {"default": "1920 x 1080"}
|
|
|
|
|
|
def get_os_version():
|
|
(release, versioninfo, machine) = platform.mac_ver()
|
|
versionNums = release.split(".")[:2]
|
|
os_version = "%s.%s" % (versionNums[0], versionNums[1].ljust(2, "0"))
|
|
return os_version
|
|
|
|
|
|
def get_target_rate():
|
|
if platform.system() == "Darwin":
|
|
os_version = get_os_version()
|
|
if os_version in TARGET_REFRESH_RATE:
|
|
return TARGET_REFRESH_RATE[os_version]
|
|
return TARGET_REFRESH_RATE["default"]
|
|
return 0
|
|
|
|
|
|
def get_target_resolution():
|
|
if platform.system() == "Darwin":
|
|
os_version = get_os_version()
|
|
if os_version in TARGET_RESOLUTION:
|
|
return TARGET_RESOLUTION[os_version]
|
|
return TARGET_RESOLUTION["default"]
|
|
return 0
|
|
|
|
|
|
def get_refresh_rate():
|
|
if platform.system() == "Darwin":
|
|
# 11.20/aarch64 (mac mini m1) - always has 53.00
|
|
# 14.70 - mix between 60.00 and 24.00
|
|
cmd = "system_profiler SPDisplaysDataType | grep 'UI' | cut -d '@' -f 2 | cut -d ' ' -f 2 | sed 's/Hz//'"
|
|
else:
|
|
return 0
|
|
|
|
target_rate = get_target_rate()
|
|
|
|
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
refresh_rate = result.stdout.strip()
|
|
try:
|
|
refresh_rate = "%.02f" % refresh_rate
|
|
except TypeError:
|
|
pass # have non numeric type
|
|
print(f"Refresh Rate: {refresh_rate} Hz")
|
|
|
|
if str(refresh_rate) != str(target_rate):
|
|
print(
|
|
f"ERROR: expected refresh rate = {target_rate}, instead got {refresh_rate}."
|
|
)
|
|
return 1
|
|
return 0
|
|
|
|
|
|
def get_resolution():
|
|
if platform.system() == "Darwin":
|
|
"""
|
|
system_profiler SPDisplaysDataType | grep Resolution
|
|
Resolution: 1920 x 1080 (1080p FHD - Full High Definition)
|
|
"""
|
|
cmd = "system_profiler SPDisplaysDataType | grep 'Resolution' | cut -d '(' -f 1 | cut -d ':' -f 2"
|
|
else:
|
|
return 0
|
|
|
|
target_resolution = get_target_resolution()
|
|
|
|
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
resolution = result.stdout.strip()
|
|
print(f"Resolution: {resolution}")
|
|
|
|
if str(resolution) != str(target_resolution):
|
|
print(
|
|
f"ERROR: expected resolution = {target_resolution}, instead got {resolution}."
|
|
)
|
|
return 1
|
|
return 0
|
|
|
|
|
|
def main():
|
|
# NOTE: this script is only designed for macosx.
|
|
parser = OptionParser()
|
|
parser.add_option(
|
|
"--check",
|
|
dest="check",
|
|
type="string",
|
|
default="resolution",
|
|
help="Determines the test to run (refresh-rate || resolution).",
|
|
)
|
|
(options, args) = parser.parse_args()
|
|
if options.check == "resolution":
|
|
retVal = get_resolution()
|
|
else:
|
|
retVal = get_refresh_rate()
|
|
|
|
os_version = get_os_version()
|
|
# Currently the 10.15 machines are not all consistent with proper kvm, resolution, refresh rate
|
|
if os_version == "10.15":
|
|
return 0
|
|
return retVal
|
|
|
|
|
|
sys.exit(main())
|