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:
Milczarek, Slawomir
2019-05-17 01:14:06 +02:00
committed by sys_ocldev
parent 432e41c07f
commit 6ed20ab762
4 changed files with 57 additions and 7 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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 = "";