@@ -16,8 +16,6 @@ use std::os::raw::c_char;
16
16
use std:: slice;
17
17
use std:: str:: FromStr ;
18
18
19
- const EMPTY_C_STR : & CStr = unsafe { CStr :: from_bytes_with_nul_unchecked ( b"\0 " ) } ;
20
-
21
19
/// See [`Core`](https://docs.openvino.ai/2024/api/c_cpp_api/group__ov__core__c__api.html).
22
20
pub struct Core {
23
21
ptr : * mut ov_core_t ,
@@ -103,52 +101,10 @@ impl Core {
103
101
Ok ( devices)
104
102
}
105
103
106
- /// Gets properties related to this Core.
107
- /// The method extracts information that can be set via the [set_property] method.
108
- pub fn get_property ( & self , key : PropertyKey ) -> Result < String > {
109
- let ov_prop_key = cstr ! ( key. as_ref( ) ) ;
110
- let mut ov_prop_value = std:: ptr:: null_mut ( ) ;
111
- try_unsafe ! ( ov_core_get_property(
112
- self . ptr,
113
- EMPTY_C_STR . as_ptr( ) ,
114
- ov_prop_key. as_ptr( ) ,
115
- std:: ptr:: addr_of_mut!( ov_prop_value)
116
- ) ) ?;
117
- let rust_prop = unsafe { CStr :: from_ptr ( ov_prop_value) }
118
- . to_str ( )
119
- . unwrap ( )
120
- . to_owned ( ) ;
121
- Ok ( rust_prop)
122
- }
123
-
124
- /// Sets a property for this Core instance.
125
- pub fn set_property ( & mut self , key : RwPropertyKey , value : & str ) -> Result < ( ) > {
126
- let ov_prop_key = cstr ! ( key. as_ref( ) ) ;
127
- let ov_prop_value = cstr ! ( value) ;
128
- try_unsafe ! ( ov_core_set_property(
129
- self . ptr,
130
- EMPTY_C_STR . as_ptr( ) ,
131
- ov_prop_key. as_ptr( ) ,
132
- ov_prop_value. as_ptr( ) ,
133
- ) ) ?;
134
- Ok ( ( ) )
135
- }
136
-
137
- /// Sets properties for this Core instance.
138
- pub fn set_properties < ' a > (
139
- & mut self ,
140
- properties : impl IntoIterator < Item = ( RwPropertyKey , & ' a str ) > ,
141
- ) -> Result < ( ) > {
142
- for ( prop_key, prop_value) in properties {
143
- self . set_property ( prop_key, prop_value) ?;
144
- }
145
- Ok ( ( ) )
146
- }
147
-
148
- /// Gets properties related to device behaviour.
149
- /// The method extracts information that can be set via the [set_device_property] method.
150
- pub fn get_device_property ( & self , device_name : & str , key : PropertyKey ) -> Result < String > {
151
- let ov_device_name = cstr ! ( device_name) ;
104
+ /// Gets properties related to device behaviour for this core.
105
+ /// The method extracts information that can be set via the [`set_property`] method.
106
+ pub fn get_property ( & self , device_name : & DeviceType , key : & PropertyKey ) -> Result < String > {
107
+ let ov_device_name = cstr ! ( device_name. as_ref( ) ) ;
152
108
let ov_prop_key = cstr ! ( key. as_ref( ) ) ;
153
109
let mut ov_prop_value = std:: ptr:: null_mut ( ) ;
154
110
try_unsafe ! ( ov_core_get_property(
@@ -165,13 +121,13 @@ impl Core {
165
121
}
166
122
167
123
/// Sets a property for a device.
168
- pub fn set_device_property (
124
+ pub fn set_property (
169
125
& mut self ,
170
- device_name : & str ,
171
- key : RwPropertyKey ,
126
+ device_name : & DeviceType ,
127
+ key : & RwPropertyKey ,
172
128
value : & str ,
173
129
) -> Result < ( ) > {
174
- let ov_device_name = cstr ! ( device_name) ;
130
+ let ov_device_name = cstr ! ( device_name. as_ref ( ) ) ;
175
131
let ov_prop_key = cstr ! ( key. as_ref( ) ) ;
176
132
let ov_prop_value = cstr ! ( value) ;
177
133
try_unsafe ! ( ov_core_set_property(
@@ -184,13 +140,13 @@ impl Core {
184
140
}
185
141
186
142
/// Sets properties for a device.
187
- pub fn set_device_properties < ' a > (
143
+ pub fn set_properties < ' a > (
188
144
& mut self ,
189
- device_name : & str ,
145
+ device_name : DeviceType ,
190
146
properties : impl IntoIterator < Item = ( RwPropertyKey , & ' a str ) > ,
191
147
) -> Result < ( ) > {
192
148
for ( prop_key, prop_value) in properties {
193
- self . set_device_property ( device_name, prop_key, prop_value) ?;
149
+ self . set_property ( & device_name, & prop_key, prop_value) ?;
194
150
}
195
151
Ok ( ( ) )
196
152
}
@@ -246,6 +202,8 @@ impl Core {
246
202
#[ cfg( test) ]
247
203
mod core_tests {
248
204
use super :: * ;
205
+ use PropertyKey :: * ;
206
+ use RwPropertyKey :: * ;
249
207
250
208
#[ test]
251
209
fn test_new ( ) {
@@ -260,4 +218,76 @@ mod core_tests {
260
218
let model = core. read_model_from_buffer ( model, None ) ;
261
219
assert ! ( model. is_ok( ) ) ;
262
220
}
221
+
222
+ #[ test]
223
+ fn test_get_core_properties_supported ( ) {
224
+ let core = Core :: new ( ) . unwrap ( ) ;
225
+ let supported_keys = vec ! [
226
+ SupportedProperties ,
227
+ AvailableDevices ,
228
+ OptimalNumberOfInferRequests ,
229
+ RangeForAsyncInferRequests ,
230
+ RangeForStreams ,
231
+ DeviceFullName ,
232
+ DeviceCapabilities ,
233
+ ] ;
234
+ for key in supported_keys {
235
+ let supported_properties = core. get_property ( & DeviceType :: CPU , & key) ;
236
+ assert ! (
237
+ supported_properties. is_ok( ) ,
238
+ "Failed on supported key: {:?}" ,
239
+ & key
240
+ ) ;
241
+ }
242
+ }
243
+
244
+ #[ test]
245
+ fn test_get_core_properties_rw ( ) {
246
+ let core = Core :: new ( ) . unwrap ( ) ;
247
+ let rw_keys = vec ! [
248
+ CacheDir ,
249
+ NumStreams ,
250
+ Affinity ,
251
+ InferenceNumThreads ,
252
+ HintEnableCpuPinning ,
253
+ HintEnableHyperThreading ,
254
+ HintPerformanceMode ,
255
+ HintSchedulingCoreType ,
256
+ HintInferencePrecision ,
257
+ HintNumRequests ,
258
+ EnableProfiling ,
259
+ HintExecutionMode ,
260
+ ] ;
261
+ for key in rw_keys {
262
+ let key_clone = key. clone ( ) ;
263
+ let supported_properties = core. get_property ( & DeviceType :: CPU , & key. into ( ) ) ;
264
+ assert ! (
265
+ supported_properties. is_ok( ) ,
266
+ "Failed on rw key: {:?}" ,
267
+ & PropertyKey :: Rw ( key_clone)
268
+ ) ;
269
+ }
270
+ }
271
+
272
+ #[ test]
273
+ fn test_get_core_properties_unsupported ( ) {
274
+ let core = Core :: new ( ) . unwrap ( ) ;
275
+ let unsupported_keys = vec ! [
276
+ HintModelPriority ,
277
+ DevicePriorities ,
278
+ CacheMode ,
279
+ ForceTbbTerminate ,
280
+ EnableMmap ,
281
+ AutoBatchTimeout ,
282
+ ] ;
283
+ for key in unsupported_keys {
284
+ let key_clone = key. clone ( ) ;
285
+ let supported_properties = core. get_property ( & DeviceType :: CPU , & key. into ( ) ) ;
286
+ assert ! (
287
+ supported_properties. is_err( ) ,
288
+ "Failed on unsupported key: {:?}" ,
289
+ & key_clone
290
+ ) ;
291
+ }
292
+ }
263
293
}
0 commit comments