/* * Copyright (C) 2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "level_zero/tools/source/metrics/metric.h" #include "level_zero/tools/source/metrics/metric_oa_enumeration_imp.h" #include "level_zero/tools/source/metrics/metric_oa_query_imp.h" #include "level_zero/tools/source/metrics/metric_oa_streamer_imp.h" namespace NEO { class OsLibrary; } // namespace NEO namespace L0 { class OaMetricSourceImp : public MetricSource { public: OaMetricSourceImp(const MetricDeviceContext &metricDeviceContext); ~OaMetricSourceImp() override; void enable() override; bool isAvailable() override; ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) override; ze_result_t appendMetricMemoryBarrier(CommandList &commandList) override; bool loadDependencies(); bool isInitialized(); void setInitializationState(const ze_result_t state); Device &getDevice(); MetricsLibrary &getMetricsLibrary(); MetricEnumeration &getMetricEnumeration(); MetricStreamer *getMetricStreamer(); void setMetricStreamer(MetricStreamer *pMetricStreamer); void setMetricsLibrary(MetricsLibrary &metricsLibrary); void setMetricEnumeration(MetricEnumeration &metricEnumeration); ze_result_t activateMetricGroups(); ze_result_t activateMetricGroupsDeferred(const uint32_t count, zet_metric_group_handle_t *phMetricGroups); bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const; bool isMetricGroupActivated() const; void setUseCompute(const bool useCompute); bool isComputeUsed() const; uint32_t getSubDeviceIndex(); bool isImplicitScalingCapable() const; const MetricDeviceContext &getMetricDeviceContext() const { return metricDeviceContext; } static std::unique_ptr create(const MetricDeviceContext &metricDeviceContext); using OsLibraryLoadPtr = std::add_pointer::type; static OsLibraryLoadPtr osLibraryLoadFunction; protected: ze_result_t initializationState = ZE_RESULT_ERROR_UNINITIALIZED; const MetricDeviceContext &metricDeviceContext; std::unique_ptr metricEnumeration = nullptr; std::unique_ptr metricsLibrary = nullptr; MetricStreamer *pMetricStreamer = nullptr; bool useCompute = false; }; template <> OaMetricSourceImp &MetricDeviceContext::getMetricSource() const; } // namespace L0