Skip to content

Commit 6ed20ab

Browse files
Add mutex to AUB subcapture manager
Related-To: NEO-2747 Change-Id: I11a2fdb54f832607b7cff5d99dfd943aa0842748 Signed-off-by: Milczarek, Slawomir <[email protected]>
1 parent 432e41c commit 6ed20ab

File tree

4 files changed

+57
-7
lines changed

4 files changed

+57
-7
lines changed

runtime/command_stream/aub_subcapture.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,25 @@ AubSubCaptureManager::AubSubCaptureManager(const std::string &fileName)
2020

2121
AubSubCaptureManager::~AubSubCaptureManager() = default;
2222

23+
bool AubSubCaptureManager::isSubCaptureEnabled() const {
24+
auto guard = this->lock();
25+
26+
return subCaptureIsActive || subCaptureWasActive;
27+
}
28+
29+
void AubSubCaptureManager::disableSubCapture() {
30+
auto guard = this->lock();
31+
32+
subCaptureIsActive = subCaptureWasActive = false;
33+
};
34+
2335
bool AubSubCaptureManager::activateSubCapture(const MultiDispatchInfo &dispatchInfo) {
2436
if (dispatchInfo.empty()) {
2537
return false;
2638
}
2739

40+
auto guard = this->lock();
41+
2842
subCaptureWasActive = subCaptureIsActive;
2943
subCaptureIsActive = false;
3044

@@ -47,6 +61,8 @@ bool AubSubCaptureManager::activateSubCapture(const MultiDispatchInfo &dispatchI
4761
}
4862

4963
const std::string &AubSubCaptureManager::getSubCaptureFileName(const MultiDispatchInfo &dispatchInfo) {
64+
auto guard = this->lock();
65+
5066
if (useExternalFileName) {
5167
currentFileName = getExternalFileName();
5268
}
@@ -130,14 +146,18 @@ bool AubSubCaptureManager::isSubCaptureFilterActive(const MultiDispatchInfo &dis
130146
void AubSubCaptureManager::setDebugManagerFlags() const {
131147
DebugManager.flags.MakeEachEnqueueBlocking.set(!subCaptureIsActive);
132148
DebugManager.flags.ForceCsrFlushing.set(false);
133-
DebugManager.flags.OmitTimestampPacketDependencies.set(false);
134149
if (!subCaptureIsActive && subCaptureWasActive) {
135150
DebugManager.flags.ForceCsrFlushing.set(true);
136151
}
137152
DebugManager.flags.ForceCsrReprogramming.set(false);
153+
DebugManager.flags.OmitTimestampPacketDependencies.set(false);
138154
if (subCaptureIsActive && !subCaptureWasActive) {
139155
DebugManager.flags.ForceCsrReprogramming.set(true);
140156
DebugManager.flags.OmitTimestampPacketDependencies.set(true);
141157
}
142158
}
159+
160+
std::unique_lock<std::mutex> AubSubCaptureManager::lock() const {
161+
return std::unique_lock<std::mutex>{mutex};
162+
}
143163
} // namespace NEO

runtime/command_stream/aub_subcapture.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#pragma once
99
#include <memory>
10+
#include <mutex>
1011
#include <string>
1112

1213
namespace NEO {
@@ -34,12 +35,9 @@ class AubSubCaptureManager {
3435
return subCaptureMode > SubCaptureMode::Off;
3536
}
3637

37-
inline bool isSubCaptureEnabled() const {
38-
return subCaptureIsActive || subCaptureWasActive;
39-
}
40-
inline void disableSubCapture() {
41-
subCaptureIsActive = subCaptureWasActive = false;
42-
};
38+
bool isSubCaptureEnabled() const;
39+
40+
void disableSubCapture();
4341

4442
bool activateSubCapture(const MultiDispatchInfo &dispatchInfo);
4543

@@ -56,6 +54,7 @@ class AubSubCaptureManager {
5654
MOCKABLE_VIRTUAL std::string generateToggleFileName(const MultiDispatchInfo &dispatchInfo) const;
5755
bool isKernelIndexInSubCaptureRange(uint32_t kernelIdx, uint32_t rangeStartIdx, uint32_t rangeEndIdx) const;
5856
void setDebugManagerFlags() const;
57+
MOCKABLE_VIRTUAL std::unique_lock<std::mutex> lock() const;
5958

6059
bool subCaptureIsActive = false;
6160
bool subCaptureWasActive = false;
@@ -65,5 +64,6 @@ class AubSubCaptureManager {
6564
std::string initialFileName;
6665
std::string currentFileName;
6766
std::unique_ptr<SettingsReader> settingsReader;
67+
mutable std::mutex mutex;
6868
};
6969
} // namespace NEO

unit_tests/command_stream/aub_subcapture_tests.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,3 +550,26 @@ TEST_F(AubSubCaptureTest, givenSubCaptureManagerInFilterModeWhenKernelNameIsSpec
550550
EXPECT_FALSE(active);
551551
EXPECT_FALSE(aubSubCaptureManager.isSubCaptureActive());
552552
}
553+
554+
TEST_F(AubSubCaptureTest, givenSubCaptureManagerWhenPublicInterfacIsCalledThenLockShouldBeAcquired) {
555+
AubSubCaptureManagerMock aubSubCaptureManager("");
556+
DispatchInfo dispatchInfo;
557+
MultiDispatchInfo multiDispatchInfo;
558+
multiDispatchInfo.push(dispatchInfo);
559+
560+
aubSubCaptureManager.isLocked = false;
561+
aubSubCaptureManager.isSubCaptureEnabled();
562+
EXPECT_TRUE(aubSubCaptureManager.isLocked);
563+
564+
aubSubCaptureManager.isLocked = false;
565+
aubSubCaptureManager.disableSubCapture();
566+
EXPECT_TRUE(aubSubCaptureManager.isLocked);
567+
568+
aubSubCaptureManager.isLocked = false;
569+
aubSubCaptureManager.activateSubCapture(multiDispatchInfo);
570+
EXPECT_TRUE(aubSubCaptureManager.isLocked);
571+
572+
aubSubCaptureManager.isLocked = false;
573+
aubSubCaptureManager.getSubCaptureFileName(multiDispatchInfo);
574+
EXPECT_TRUE(aubSubCaptureManager.isLocked);
575+
}

unit_tests/mocks/mock_aub_subcapture_manager.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,16 @@ class AubSubCaptureManagerMock : public AubSubCaptureManager {
5757
return externalFileName;
5858
}
5959

60+
std::unique_lock<std::mutex> lock() const override {
61+
isLocked = true;
62+
return std::unique_lock<std::mutex>{mutex};
63+
}
64+
6065
using AubSubCaptureManager::generateFilterFileName;
6166
using AubSubCaptureManager::generateToggleFileName;
6267

68+
mutable bool isLocked = false;
69+
6370
protected:
6471
bool isToggledOn = false;
6572
std::string externalFileName = "";

0 commit comments

Comments
 (0)