Files
compute-runtime/shared/test/common/mocks/mock_direct_submission_hw.h
Dominik Dabek 2b964254d6 performance: debug key for adjust ULLS on battery
ULLS controller timeout settings will be adjusted based on ac line
status and lowest queue throttle from submissions.

Lowest queue throttle is reset when controller stops ULLS.

Related-To: NEO-10800

Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
2024-03-22 14:24:00 +01:00

206 lines
7.6 KiB
C++

/*
* Copyright (C) 2020-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/direct_submission/direct_submission_hw.h"
#include "shared/source/direct_submission/direct_submission_hw_diagnostic_mode.h"
#include "shared/source/memory_manager/graphics_allocation.h"
#include "shared/test/common/mocks/mock_memory_operations_handler.h"
namespace NEO {
template <typename GfxFamily, typename Dispatcher>
struct MockDirectSubmissionHw : public DirectSubmissionHw<GfxFamily, Dispatcher> {
using BaseClass = DirectSubmissionHw<GfxFamily, Dispatcher>;
using BaseClass::activeTiles;
using BaseClass::allocateResources;
using BaseClass::completionFenceAllocation;
using BaseClass::copyCommandBufferIntoRing;
using BaseClass::cpuCachelineFlush;
using BaseClass::currentQueueWorkCount;
using BaseClass::currentRelaxedOrderingQueueSize;
using BaseClass::currentRingBuffer;
using BaseClass::dcFlushRequired;
using BaseClass::deallocateResources;
using BaseClass::deferredTasksListAllocation;
using BaseClass::detectGpuHang;
using BaseClass::diagnostic;
using BaseClass::DirectSubmissionHw;
using BaseClass::disableCacheFlush;
using BaseClass::disableCpuCacheFlush;
using BaseClass::disableMonitorFence;
using BaseClass::dispatchDisablePrefetcher;
using BaseClass::dispatchMonitorFenceRequired;
using BaseClass::dispatchPartitionRegisterConfiguration;
using BaseClass::dispatchPrefetchMitigation;
using BaseClass::dispatchRelaxedOrderingReturnPtrRegs;
using BaseClass::dispatchSemaphoreSection;
using BaseClass::dispatchStartSection;
using BaseClass::dispatchSwitchRingBufferSection;
using BaseClass::dispatchUllsState;
using BaseClass::dispatchWorkloadSection;
using BaseClass::getDiagnosticModeSection;
using BaseClass::getSizeDisablePrefetcher;
using BaseClass::getSizeDispatch;
using BaseClass::getSizeDispatchRelaxedOrderingQueueStall;
using BaseClass::getSizeEnd;
using BaseClass::getSizeNewResourceHandler;
using BaseClass::getSizePartitionRegisterConfigurationSection;
using BaseClass::getSizePrefetchMitigation;
using BaseClass::getSizeSemaphoreSection;
using BaseClass::getSizeStartSection;
using BaseClass::getSizeSwitchRingBufferSection;
using BaseClass::getSizeSystemMemoryFenceAddress;
using BaseClass::hwInfo;
using BaseClass::immWritePostSyncOffset;
using BaseClass::inputMonitorFenceDispatchRequirement;
using BaseClass::isDisablePrefetcherRequired;
using BaseClass::lastSubmittedThrottle;
using BaseClass::miMemFenceRequired;
using BaseClass::osContext;
using BaseClass::partitionConfigSet;
using BaseClass::partitionedMode;
using BaseClass::pciBarrierPtr;
using BaseClass::performDiagnosticMode;
using BaseClass::preinitializedRelaxedOrderingScheduler;
using BaseClass::preinitializedTaskStoreSection;
using BaseClass::relaxedOrderingEnabled;
using BaseClass::relaxedOrderingInitialized;
using BaseClass::relaxedOrderingSchedulerAllocation;
using BaseClass::relaxedOrderingSchedulerRequired;
using BaseClass::reserved;
using BaseClass::ringBuffers;
using BaseClass::ringCommandStream;
using BaseClass::ringStart;
using BaseClass::rootDeviceEnvironment;
using BaseClass::semaphoreData;
using BaseClass::semaphoreGpuVa;
using BaseClass::semaphorePtr;
using BaseClass::semaphores;
using BaseClass::setReturnAddress;
using BaseClass::stopRingBuffer;
using BaseClass::switchRingBuffersAllocations;
using BaseClass::switchRingBuffersNeeded;
using BaseClass::systemMemoryFenceAddressSet;
using BaseClass::unblockGpu;
using BaseClass::useNotifyForPostSync;
using BaseClass::workloadMode;
using BaseClass::workloadModeOneExpectedValue;
using BaseClass::workloadModeOneStoreAddress;
using BaseClass::workPartitionAllocation;
using typename BaseClass::RingBufferUse;
~MockDirectSubmissionHw() override {
if (ringStart) {
stopRingBuffer(false);
}
deallocateResources();
}
bool allocateOsResources() override {
return allocateOsResourcesReturn;
}
void preinitializeRelaxedOrderingSections() override {
preinitializeRelaxedOrderingSectionsCalled++;
BaseClass::preinitializeRelaxedOrderingSections();
}
void dispatchStaticRelaxedOrderingScheduler() override {
dispatchStaticRelaxedOrderingSchedulerCalled++;
BaseClass::dispatchStaticRelaxedOrderingScheduler();
}
void dispatchRelaxedOrderingSchedulerSection(uint32_t value) override {
dispatchRelaxedOrderingSchedulerSectionCalled++;
BaseClass::dispatchRelaxedOrderingSchedulerSection(value);
}
void dispatchRelaxedOrderingQueueStall() override {
dispatchRelaxedOrderingQueueStallCalled++;
BaseClass::dispatchRelaxedOrderingQueueStall();
}
void dispatchTaskStoreSection(uint64_t taskStartSectionVa) override {
dispatchTaskStoreSectionCalled++;
BaseClass::dispatchTaskStoreSection(taskStartSectionVa);
}
void ensureRingCompletion() override {
ensureRingCompletionCalled++;
BaseClass::ensureRingCompletion();
}
bool makeResourcesResident(DirectSubmissionAllocations &allocations) override {
makeResourcesResidentVectorSize = static_cast<uint32_t>(allocations.size());
if (callBaseResident) {
return BaseClass::makeResourcesResident(allocations);
}
return true;
}
bool submit(uint64_t gpuAddress, size_t size) override {
submitGpuAddress = gpuAddress;
submitSize = size;
submitCount++;
return submitReturn;
}
bool handleResidency() override {
handleResidencyCount++;
return handleResidencyReturn;
}
void handleSwitchRingBuffers(ResidencyContainer *allocationsForResidency) override {}
uint64_t updateTagValue(bool requireMonitorFence) override {
return updateTagValueReturn;
}
void getTagAddressValue(TagData &tagData) override {
tagData.tagAddress = tagAddressSetValue;
tagData.tagValue = tagValueSetValue;
}
void performDiagnosticMode() override {
if (!NEO::directSubmissionDiagnosticAvailable) {
disabledDiagnosticCalled++;
}
uint32_t add = 1;
if (diagnostic.get()) {
add += diagnostic->getExecutionsCount();
}
*static_cast<volatile uint32_t *>(workloadModeOneStoreAddress) = workloadModeOneExpectedValue + add;
BaseClass::performDiagnosticMode();
}
bool isCompleted(uint32_t ringBufferIndex) override {
return this->isCompletedReturn;
}
uint64_t updateTagValueReturn = 1ull;
uint64_t tagAddressSetValue = MemoryConstants::pageSize;
uint64_t tagValueSetValue = 1ull;
uint64_t submitGpuAddress = 0ull;
size_t submitSize = 0u;
uint32_t submitCount = 0u;
uint32_t handleResidencyCount = 0u;
uint32_t disabledDiagnosticCalled = 0u;
uint32_t preinitializeRelaxedOrderingSectionsCalled = 0;
uint32_t dispatchStaticRelaxedOrderingSchedulerCalled = 0;
uint32_t dispatchRelaxedOrderingSchedulerSectionCalled = 0;
uint32_t dispatchRelaxedOrderingQueueStallCalled = 0;
uint32_t dispatchTaskStoreSectionCalled = 0;
uint32_t ensureRingCompletionCalled = 0;
uint32_t makeResourcesResidentVectorSize = 0u;
bool allocateOsResourcesReturn = true;
bool submitReturn = true;
bool handleResidencyReturn = true;
bool callBaseResident = false;
bool isCompletedReturn = true;
};
} // namespace NEO