Skip to content

Commit 5fea1ca

Browse files
committed
Merge branch 'master' into master
1 parent 26fc29f commit 5fea1ca

3 files changed

Lines changed: 103 additions & 0 deletions

File tree

bindings/sysman/python/source/examples/pyzes_black_box_test.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,28 @@ def test_frequency_domains(device_handle, device_index):
10961096
for i in range(freq_count.value):
10971097
print_verbose(f"\n Frequency Domain {i}:")
10981098

1099+
freq_properties = pz.zes_freq_properties_t()
1100+
freq_properties.stype = pz.ZES_STRUCTURE_TYPE_FREQ_PROPERTIES
1101+
freq_properties.pNext = None
1102+
1103+
rc = pz.zesFrequencyGetProperties(freq_handles[i], byref(freq_properties))
1104+
if not check_rc(f"zesFrequencyGetProperties(frequency {i})", rc):
1105+
continue
1106+
1107+
print_verbose(" Frequency Properties:")
1108+
print_verbose(
1109+
f" Type: {get_frequency_domain_string(freq_properties.type)}"
1110+
)
1111+
print_verbose(f" Can Control: {bool(freq_properties.canControl)}")
1112+
print_verbose(
1113+
" Throttle Event Supported: "
1114+
f"{bool(freq_properties.isThrottleEventSupported)}"
1115+
)
1116+
print_verbose(f" Minimum Frequency: {freq_properties.min:.1f} MHz")
1117+
print_verbose(f" Maximum Frequency: {freq_properties.max:.1f} MHz")
1118+
if freq_properties.onSubdevice:
1119+
print_verbose(f" Subdevice ID: {freq_properties.subdeviceId}")
1120+
10991121
available_clock_count = c_uint32(0)
11001122
rc = pz.zesFrequencyGetAvailableClocks(
11011123
freq_handles[i], byref(available_clock_count), None

bindings/sysman/python/source/pyzes.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,21 @@ class zes_power_energy_counter_t(_PrintableStructure):
673673

674674

675675
## Frequency structures ##
676+
class zes_freq_properties_t(_PrintableStructure):
677+
_fields_ = [
678+
("stype", c_int32),
679+
("pNext", c_void_p),
680+
("type", zes_freq_domain_t),
681+
("onSubdevice", ze_bool_t),
682+
("subdeviceId", c_uint32),
683+
("canControl", ze_bool_t),
684+
("isThrottleEventSupported", ze_bool_t),
685+
("min", c_double),
686+
("max", c_double),
687+
]
688+
_fmt_ = {"min": "%.1f MHz", "max": "%.1f MHz"}
689+
690+
676691
class zes_freq_range_t(_PrintableStructure):
677692
_fields_ = [
678693
("min", c_double),
@@ -1274,6 +1289,26 @@ def zesDeviceEnumFrequencyDomains(hDevice, pCount, phFrequency):
12741289
return retVal
12751290

12761291

1292+
def zesFrequencyGetProperties(hFrequency, pProperties):
1293+
"""Wraps API:
1294+
ze_result_t zesFrequencyGetProperties(
1295+
zes_freq_handle_t hFrequency,
1296+
zes_freq_properties_t* pProperties)
1297+
1298+
Parameters:
1299+
hFrequency: frequency handle
1300+
pProperties: POINTER(zes_freq_properties_t) - properties structure to fill
1301+
Returns:
1302+
ze_result_t - return code only, properties are filled into pProperties
1303+
"""
1304+
funcPtr = getFunctionPointerList("zesFrequencyGetProperties")
1305+
funcPtr.argtypes = [zes_freq_handle_t, POINTER(zes_freq_properties_t)]
1306+
funcPtr.restype = ze_result_t
1307+
1308+
retVal = funcPtr(hFrequency, pProperties)
1309+
return retVal
1310+
1311+
12771312
def zesFrequencyGetState(hFrequency, pState):
12781313
"""Wraps API:
12791314
ze_result_t zesFrequencyGetState(

bindings/sysman/python/test/unit_tests/test_frequency.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,52 @@ def mock_enum_frequency_domains(device_handle, count_ptr, handles_ptr):
5050
mock_get_func.assert_called_with("zesDeviceEnumFrequencyDomains")
5151
mock_func.assert_called_once()
5252

53+
def test_GivenValidFrequencyHandleWhenCallingZesFrequencyGetPropertiesThenCallSucceedsWithProperties(
54+
self, mock_get_func
55+
):
56+
mock_type = self.pyzes.ZES_FREQ_DOMAIN_GPU
57+
mock_on_subdevice = True
58+
mock_subdevice_id = 1
59+
mock_can_control = True
60+
mock_is_throttle_event_supported = True
61+
mock_min = 300.0
62+
mock_max = 1800.0
63+
64+
def mock_get_properties(frequency_handle, properties_ptr):
65+
properties_ptr._obj.type = mock_type
66+
properties_ptr._obj.onSubdevice = mock_on_subdevice
67+
properties_ptr._obj.subdeviceId = mock_subdevice_id
68+
properties_ptr._obj.canControl = mock_can_control
69+
properties_ptr._obj.isThrottleEventSupported = (
70+
mock_is_throttle_event_supported
71+
)
72+
properties_ptr._obj.min = mock_min
73+
properties_ptr._obj.max = mock_max
74+
return self.pyzes.ZE_RESULT_SUCCESS
75+
76+
mock_func = MagicMock(side_effect=mock_get_properties)
77+
mock_get_func.return_value = mock_func
78+
79+
frequency_handle = self.pyzes.zes_freq_handle_t()
80+
properties = self.pyzes.zes_freq_properties_t()
81+
82+
result = self.pyzes.zesFrequencyGetProperties(
83+
frequency_handle, byref(properties)
84+
)
85+
86+
self.assertEqual(result, self.pyzes.ZE_RESULT_SUCCESS)
87+
self.assertEqual(properties.type, mock_type)
88+
self.assertEqual(properties.onSubdevice, mock_on_subdevice)
89+
self.assertEqual(properties.subdeviceId, mock_subdevice_id)
90+
self.assertEqual(properties.canControl, mock_can_control)
91+
self.assertEqual(
92+
properties.isThrottleEventSupported, mock_is_throttle_event_supported
93+
)
94+
self.assertEqual(properties.min, mock_min)
95+
self.assertEqual(properties.max, mock_max)
96+
mock_get_func.assert_called_with("zesFrequencyGetProperties")
97+
mock_func.assert_called_once()
98+
5399
def test_GivenValidFrequencyHandleWhenCallingZesFrequencyGetStateThenCallSucceedsWithState(
54100
self, mock_get_func
55101
):

0 commit comments

Comments
 (0)