/* * Copyright (C) 2023-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/helpers/non_copyable_or_moveable.h" #include "shared/source/utilities/stackvec.h" namespace NEO { class CommandStreamReceiver; class TagNodeBase; class TimestampPacketContainer : public NonCopyableClass { public: TimestampPacketContainer() = default; TimestampPacketContainer(TimestampPacketContainer &&) = default; TimestampPacketContainer &operator=(TimestampPacketContainer &&) = default; MOCKABLE_VIRTUAL ~TimestampPacketContainer(); const StackVec &peekNodes() const { return timestampPacketNodes; } void add(TagNodeBase *timestampPacketNode); void swapNodes(TimestampPacketContainer ×tampPacketContainer); void assignAndIncrementNodesRefCounts(const TimestampPacketContainer &inputTimestampPacketContainer); void makeResident(CommandStreamReceiver &commandStreamReceiver); void moveNodesToNewContainer(TimestampPacketContainer ×tampPacketContainer); void releaseNodes(); protected: StackVec timestampPacketNodes; }; struct TimestampPacketDependencies : public NonCopyableClass { TimestampPacketContainer cacheFlushNodes; TimestampPacketContainer previousEnqueueNodes; TimestampPacketContainer barrierNodes; TimestampPacketContainer auxToNonAuxNodes; TimestampPacketContainer nonAuxToAuxNodes; TimestampPacketContainer multiCsrDependencies; void moveNodesToNewContainer(TimestampPacketContainer ×tampPacketContainer); }; } // namespace NEO