using RecordedResourcesMap = DenseMap<ResourceKey, ResourceT>;
- SimpleResourceManager(
- ExecutionSession &ES,
- HandleRemoveFunction HandleRemove = HandleRemoveFunction(),
- HandleTransferFunction HandleTransfer = HandleTransferFunction())
- : ES(ES), HandleRemove(std::move(HandleRemove)),
- HandleTransfer(std::move(HandleTransfer)) {
-
- // If HandleRemvoe is not supplied then use the default.
- if (!this->HandleRemove)
- this->HandleRemove = [&](ResourceKey K) -> Error {
- ES.runSessionLocked([&] { removeResource(K); });
- return Error::success();
- };
-
- // If HandleTransfer is not supplied then use the default.
- if (!this->HandleTransfer)
- this->HandleTransfer = [this](ResourceKey DstKey, ResourceKey SrcKey) {
- transferResources(DstKey, SrcKey);
- };
+ SimpleResourceManager(ExecutionSession &ES) : ES(ES) {
+ HandleRemove = [&](ResourceKey K) -> Error {
+ ES.runSessionLocked([&] { removeResource(K); });
+ return Error::success();
+ };
+
+ HandleTransfer = [this](ResourceKey DstKey, ResourceKey SrcKey) {
+ transferResources(DstKey, SrcKey);
+ };
ES.registerResourceManager(*this);
}
~SimpleResourceManager() { ES.deregisterResourceManager(*this); }
+ /// Set the HandleRemove function object.
+ void setHandleRemove(HandleRemoveFunction HandleRemove) {
+ this->HandleRemove = std::move(HandleRemove);
+ }
+
+ /// Set the HandleTransfer function object.
+ void setHandleTransfer(HandleTransferFunction HandleTransfer) {
+ this->HandleTransfer = std::move(HandleTransfer);
+ }
+
/// Create an association between the given key and resource.
template <typename MergeOp = std::plus<ResourceT>>
void recordResource(ResourceKey K, ResourceT Val = ResourceT(),
BasicDefineAndRemoveAllBeforeMaterializing) {
bool ResourceManagerGotRemove = false;
- SimpleResourceManager<> SRM(ES, [&](ResourceKey K) -> Error {
+ SimpleResourceManager<> SRM(ES);
+ SRM.setHandleRemove([&](ResourceKey K) -> Error {
ResourceManagerGotRemove = true;
EXPECT_EQ(SRM.getRecordedResources().size(), 0U)
<< "Unexpected resources recorded";
TEST_F(ResourceTrackerStandardTest, BasicDefineAndRemoveAllAfterMaterializing) {
bool ResourceManagerGotRemove = false;
- SimpleResourceManager<> SRM(ES, [&](ResourceKey K) -> Error {
+ SimpleResourceManager<> SRM(ES);
+ SRM.setHandleRemove([&](ResourceKey K) -> Error {
ResourceManagerGotRemove = true;
EXPECT_EQ(SRM.getRecordedResources().size(), 1U)
<< "Unexpected number of resources recorded";
TEST_F(ResourceTrackerStandardTest, BasicDefineAndRemoveAllWhileMaterializing) {
bool ResourceManagerGotRemove = false;
- SimpleResourceManager<> SRM(ES, [&](ResourceKey K) -> Error {
+ SimpleResourceManager<> SRM(ES);
+ SRM.setHandleRemove([&](ResourceKey K) -> Error {
ResourceManagerGotRemove = true;
EXPECT_EQ(SRM.getRecordedResources().size(), 0U)
<< "Unexpected resources recorded";
BasicDefineAndExplicitTransferBeforeMaterializing) {
bool ResourceManagerGotTransfer = false;
- SimpleResourceManager<> SRM(
- ES,
- [&](ResourceKey K) -> Error {
- SRM.removeResource(K);
- return Error::success();
- },
- [&](ResourceKey DstKey, ResourceKey SrcKey) {
- ResourceManagerGotTransfer = true;
- auto &RR = SRM.getRecordedResources();
- EXPECT_EQ(RR.size(), 0U) << "Expected no resources recorded yet";
- });
+ SimpleResourceManager<> SRM(ES);
+ SRM.setHandleTransfer([&](ResourceKey DstKey, ResourceKey SrcKey) {
+ ResourceManagerGotTransfer = true;
+ auto &RR = SRM.getRecordedResources();
+ EXPECT_EQ(RR.size(), 0U) << "Expected no resources recorded yet";
+ });
auto MakeMU = [&](SymbolStringPtr Name, JITEvaluatedSymbol Sym) {
return std::make_unique<SimpleMaterializationUnit>(
BasicDefineAndExplicitTransferAfterMaterializing) {
bool ResourceManagerGotTransfer = false;
- SimpleResourceManager<> SRM(
- ES,
- [&](ResourceKey K) -> Error {
- SRM.removeResource(K);
- return Error::success();
- },
- [&](ResourceKey DstKey, ResourceKey SrcKey) {
- ResourceManagerGotTransfer = true;
- SRM.transferResources(DstKey, SrcKey);
- });
+ SimpleResourceManager<> SRM(ES);
+ SRM.setHandleTransfer([&](ResourceKey DstKey, ResourceKey SrcKey) {
+ ResourceManagerGotTransfer = true;
+ SRM.transferResources(DstKey, SrcKey);
+ });
auto MakeMU = [&](SymbolStringPtr Name, JITEvaluatedSymbol Sym) {
return std::make_unique<SimpleMaterializationUnit>(
BasicDefineAndExplicitTransferWhileMaterializing) {
bool ResourceManagerGotTransfer = false;
- SimpleResourceManager<> SRM(
- ES,
- [&](ResourceKey K) -> Error {
- SRM.removeResource(K);
- return Error::success();
- },
- [&](ResourceKey DstKey, ResourceKey SrcKey) {
- ResourceManagerGotTransfer = true;
- SRM.transferResources(DstKey, SrcKey);
- });
+ SimpleResourceManager<> SRM(ES);
+ SRM.setHandleTransfer([&](ResourceKey DstKey, ResourceKey SrcKey) {
+ ResourceManagerGotTransfer = true;
+ SRM.transferResources(DstKey, SrcKey);
+ });
auto FooRT = JD.createResourceTracker();
std::unique_ptr<MaterializationResponsibility> FooMR;