mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-27 15:53:13 +08:00
Add mutex to AUB subcapture manager
Related-To: NEO-2747 Change-Id: I11a2fdb54f832607b7cff5d99dfd943aa0842748 Signed-off-by: Milczarek, Slawomir <slawomir.milczarek@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
432e41c07f
commit
6ed20ab762
@@ -20,11 +20,25 @@ AubSubCaptureManager::AubSubCaptureManager(const std::string &fileName)
|
||||
|
||||
AubSubCaptureManager::~AubSubCaptureManager() = default;
|
||||
|
||||
bool AubSubCaptureManager::isSubCaptureEnabled() const {
|
||||
auto guard = this->lock();
|
||||
|
||||
return subCaptureIsActive || subCaptureWasActive;
|
||||
}
|
||||
|
||||
void AubSubCaptureManager::disableSubCapture() {
|
||||
auto guard = this->lock();
|
||||
|
||||
subCaptureIsActive = subCaptureWasActive = false;
|
||||
};
|
||||
|
||||
bool AubSubCaptureManager::activateSubCapture(const MultiDispatchInfo &dispatchInfo) {
|
||||
if (dispatchInfo.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto guard = this->lock();
|
||||
|
||||
subCaptureWasActive = subCaptureIsActive;
|
||||
subCaptureIsActive = false;
|
||||
|
||||
@@ -47,6 +61,8 @@ bool AubSubCaptureManager::activateSubCapture(const MultiDispatchInfo &dispatchI
|
||||
}
|
||||
|
||||
const std::string &AubSubCaptureManager::getSubCaptureFileName(const MultiDispatchInfo &dispatchInfo) {
|
||||
auto guard = this->lock();
|
||||
|
||||
if (useExternalFileName) {
|
||||
currentFileName = getExternalFileName();
|
||||
}
|
||||
@@ -130,14 +146,18 @@ bool AubSubCaptureManager::isSubCaptureFilterActive(const MultiDispatchInfo &dis
|
||||
void AubSubCaptureManager::setDebugManagerFlags() const {
|
||||
DebugManager.flags.MakeEachEnqueueBlocking.set(!subCaptureIsActive);
|
||||
DebugManager.flags.ForceCsrFlushing.set(false);
|
||||
DebugManager.flags.OmitTimestampPacketDependencies.set(false);
|
||||
if (!subCaptureIsActive && subCaptureWasActive) {
|
||||
DebugManager.flags.ForceCsrFlushing.set(true);
|
||||
}
|
||||
DebugManager.flags.ForceCsrReprogramming.set(false);
|
||||
DebugManager.flags.OmitTimestampPacketDependencies.set(false);
|
||||
if (subCaptureIsActive && !subCaptureWasActive) {
|
||||
DebugManager.flags.ForceCsrReprogramming.set(true);
|
||||
DebugManager.flags.OmitTimestampPacketDependencies.set(true);
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> AubSubCaptureManager::lock() const {
|
||||
return std::unique_lock<std::mutex>{mutex};
|
||||
}
|
||||
} // namespace NEO
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#pragma once
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
namespace NEO {
|
||||
@@ -34,12 +35,9 @@ class AubSubCaptureManager {
|
||||
return subCaptureMode > SubCaptureMode::Off;
|
||||
}
|
||||
|
||||
inline bool isSubCaptureEnabled() const {
|
||||
return subCaptureIsActive || subCaptureWasActive;
|
||||
}
|
||||
inline void disableSubCapture() {
|
||||
subCaptureIsActive = subCaptureWasActive = false;
|
||||
};
|
||||
bool isSubCaptureEnabled() const;
|
||||
|
||||
void disableSubCapture();
|
||||
|
||||
bool activateSubCapture(const MultiDispatchInfo &dispatchInfo);
|
||||
|
||||
@@ -56,6 +54,7 @@ class AubSubCaptureManager {
|
||||
MOCKABLE_VIRTUAL std::string generateToggleFileName(const MultiDispatchInfo &dispatchInfo) const;
|
||||
bool isKernelIndexInSubCaptureRange(uint32_t kernelIdx, uint32_t rangeStartIdx, uint32_t rangeEndIdx) const;
|
||||
void setDebugManagerFlags() const;
|
||||
MOCKABLE_VIRTUAL std::unique_lock<std::mutex> lock() const;
|
||||
|
||||
bool subCaptureIsActive = false;
|
||||
bool subCaptureWasActive = false;
|
||||
@@ -65,5 +64,6 @@ class AubSubCaptureManager {
|
||||
std::string initialFileName;
|
||||
std::string currentFileName;
|
||||
std::unique_ptr<SettingsReader> settingsReader;
|
||||
mutable std::mutex mutex;
|
||||
};
|
||||
} // namespace NEO
|
||||
|
||||
@@ -550,3 +550,26 @@ TEST_F(AubSubCaptureTest, givenSubCaptureManagerInFilterModeWhenKernelNameIsSpec
|
||||
EXPECT_FALSE(active);
|
||||
EXPECT_FALSE(aubSubCaptureManager.isSubCaptureActive());
|
||||
}
|
||||
|
||||
TEST_F(AubSubCaptureTest, givenSubCaptureManagerWhenPublicInterfacIsCalledThenLockShouldBeAcquired) {
|
||||
AubSubCaptureManagerMock aubSubCaptureManager("");
|
||||
DispatchInfo dispatchInfo;
|
||||
MultiDispatchInfo multiDispatchInfo;
|
||||
multiDispatchInfo.push(dispatchInfo);
|
||||
|
||||
aubSubCaptureManager.isLocked = false;
|
||||
aubSubCaptureManager.isSubCaptureEnabled();
|
||||
EXPECT_TRUE(aubSubCaptureManager.isLocked);
|
||||
|
||||
aubSubCaptureManager.isLocked = false;
|
||||
aubSubCaptureManager.disableSubCapture();
|
||||
EXPECT_TRUE(aubSubCaptureManager.isLocked);
|
||||
|
||||
aubSubCaptureManager.isLocked = false;
|
||||
aubSubCaptureManager.activateSubCapture(multiDispatchInfo);
|
||||
EXPECT_TRUE(aubSubCaptureManager.isLocked);
|
||||
|
||||
aubSubCaptureManager.isLocked = false;
|
||||
aubSubCaptureManager.getSubCaptureFileName(multiDispatchInfo);
|
||||
EXPECT_TRUE(aubSubCaptureManager.isLocked);
|
||||
}
|
||||
|
||||
@@ -57,9 +57,16 @@ class AubSubCaptureManagerMock : public AubSubCaptureManager {
|
||||
return externalFileName;
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> lock() const override {
|
||||
isLocked = true;
|
||||
return std::unique_lock<std::mutex>{mutex};
|
||||
}
|
||||
|
||||
using AubSubCaptureManager::generateFilterFileName;
|
||||
using AubSubCaptureManager::generateToggleFileName;
|
||||
|
||||
mutable bool isLocked = false;
|
||||
|
||||
protected:
|
||||
bool isToggledOn = false;
|
||||
std::string externalFileName = "";
|
||||
|
||||
Reference in New Issue
Block a user