Partager via


Vérification de la prise en charge des ressources du coordinateur d’activités

Cet exemple montre comment les applications peuvent utiliser IsActivityCoordinatorResourceSupported pour détecter la prise en charge des ressources avant de créer une stratégie. Vous pouvez utiliser cette option IsActivityCoordinatorResourceSupported pour rechercher les ACTIVITY_COORDINATOR_RESOURCE prises en charge lors de l’exécution.

Rechercher l’exemple de prise en charge du NPU

L’exemple suivant montre comment vérifier la prise en charge du NPU à l’aide de la nouvelle API de vérification des fonctionnalités pour les ressources. Cette API permet aux applications de rechercher les types de ressources pris en charge lors de l’exécution et de retourner true si la ressource NPU est prise en charge sur le système actuel. Cet exemple crée une stratégie De coordinateur d’activités et définit la condition ACTIVITY_COORDINATOR_CONDITION_GOOD de ressource NPU si elle est prise en charge.

#include <Windows.h>
#include <ActivityCoordinator.h>
#include <wil/resource.h>
#include <apiquery2.h>

// Declare RAII wrappers for the Activity Coordinator policy and subscription.
// These behave like traditional smart pointers and will call their associated
// API cleanup functions when they go out of scope.
using unique_policy = wil::unique_any<
          ACTIVITY_COORDINATOR_POLICY,
          decltype(&DestroyActivityCoordinatorPolicy),
          DestroyActivityCoordinatorPolicy>;

bool
CanUseNpuPolicy()
{
    // Check that the Activity Coordinator feature check API is implemented
    // before calling.
    if (IsApiSetImplemented("ext-ms-win-resourcemanager-activitycoordinator-l1-1-1")) {
        if (IsActivityCoordinatorResourceSupported(ACTIVITY_COORDINATOR_RESOURCE_NPU)) {
            return true;
        }
    }

    return false;
}

int
__cdecl
wmain()
{
    unique_policy policy;

    // Activity Coordinator support for NPUs does not indicate their actual
    // presence on the system. Applications must still detect and target desired
    // hardware using their API or framework of choice.
    //
    // When using system resources not supported by Activity Coordinator, it is
    // recommended that policies always include USER_IDLE in the GOOD condition.
    // This will help minimize the potential for interference with a user's
    // foreground applications utilizing the same resource.
    //
    // The GOOD policy template covers this scenario in addition to other
    // resources that most applications are likely to affect even when targeting
    // dedicated hardware.
    RETURN_IF_FAILED(CreateActivityCoordinatorPolicy(
        ACTIVITY_COORDINATOR_POLICY_TEMPLATE_GOOD,
        &policy));

    if (CanUseNpuPolicy()) {
        RETURN_IF_FAILED(SetActivityCoordinatorPolicyResourceCondition(
            policy.get(),
            ACTIVITY_COORDINATOR_RESOURCE_NPU,
            ACTIVITY_COORDINATOR_CONDITION_GOOD));
    }

    // Proceed to use Activity Coordinator to run opportunistic work. See the
    // example project in the documentation for further details.

    return S_OK;
}

Voir aussi