| // Copyright 2023 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| @available(added=20) |
| library fuchsia.scheduler; |
| |
| using zx; |
| |
| const MAX_NAME_LENGTH int32 = 2048; |
| const MAX_PARAMETER_KEY_LENGTH int32 = 512; |
| const MAX_PARAMETER_VALUE_LENGTH int32 = 2048; |
| const MAX_PARAMETER_COUNT int32 = 512; |
| |
| // The value type used by input/output parameters. |
| type ParameterValue = flexible union { |
| 1: float_value float64; |
| 2: int_value int64; |
| 3: string_value string:MAX_PARAMETER_VALUE_LENGTH; |
| }; |
| |
| // Input/output parameter type used by SetRole. |
| type Parameter = struct { |
| key string:MAX_PARAMETER_KEY_LENGTH; |
| value ParameterValue; |
| }; |
| |
| // The string name of a role. |
| // TODO(https://fxbug.dev/42158155): Ideally this would just be an alias of |
| // `string:MAX_NAME_LENGTH`, but that is not supported in FIDL yet; see |
| // https://fuchsia.dev/error/fi-0062 for more information. |
| type RoleName = struct { |
| role string:MAX_NAME_LENGTH; |
| }; |
| |
| /// A Zircon object to which a profile can be applied. |
| /// Currently, only threads and vmars are supported. |
| type RoleTarget = flexible resource union { |
| 1: thread zx.Handle:THREAD; |
| 2: vmar zx.Handle:VMAR; |
| }; |
| |
| /// Allows callers to modify the runtime profiles of zircon objects. |
| @discoverable |
| open protocol RoleManager { |
| /// Sets the given object's performance parameters based on the requested |
| /// role. The exact parameters of the role are system dependent and may |
| /// vary based on device-specific tuning and/or runtime system goals. |
| /// |
| /// + request `target` is a handle to a zircon object to which a profile |
| /// can be applied. |
| /// + request `role` is the name of the role to apply to the target. |
| /// + request `input_parameters` is a vector of key/value pairs used to |
| /// distinguish between multiple variants of the same role. |
| /// - response `output_parameters` is a vector of key/value pairs that |
| /// roles can be configured to emit. |
| /// * error a zx_status value indicating success or failure. |
| flexible SetRole(resource table { |
| 1: target RoleTarget; |
| 2: role RoleName; |
| 3: input_parameters vector<Parameter>:MAX_PARAMETER_COUNT; |
| }) -> (resource table { |
| 1: output_parameters vector<Parameter>:MAX_PARAMETER_COUNT; |
| }) error zx.Status; |
| }; |