Move destruction of command stream receiver to execution environment.

- remove other explicit resets, no longer needed.
- change the order of destruction, command stream receiver needs to be
destroyed prior to memory manager.

Change-Id: I3c5db46db15a2cb7dc9f6fdb0e06441806fbd9f2
This commit is contained in:
Mrozek, Michal
2018-07-16 13:01:10 +02:00
parent 0abacce160
commit f6dc90c903
4 changed files with 16 additions and 8 deletions

View File

@@ -182,7 +182,6 @@ LinearStream &CommandStreamReceiver::getCS(size_t minRequiredSize) {
}
void CommandStreamReceiver::cleanupResources() {
auto memoryManager = this->getMemoryManager();
if (!memoryManager)
return;
@@ -210,7 +209,6 @@ void CommandStreamReceiver::cleanupResources() {
tagAllocation = nullptr;
tagAddress = nullptr;
}
experimentalCmdBuffer.reset(nullptr);
}
bool CommandStreamReceiver::waitForCompletionWithTimeout(bool enableTimeout, int64_t timeoutMicroseconds, uint32_t taskCountToWait) {

View File

@@ -106,9 +106,9 @@ Device::~Device() {
if (performanceCounters) {
performanceCounters->shutdown();
}
if (executionEnvironment->commandStreamReceiver) {
executionEnvironment->commandStreamReceiver->flushBatchedSubmissions();
executionEnvironment->commandStreamReceiver.reset(nullptr);
}
if (deviceInfo.sourceLevelDebuggerActive && sourceLevelDebugger) {

View File

@@ -39,7 +39,7 @@ class ExecutionEnvironment : public ReferenceTrackedObject<ExecutionEnvironment>
ExecutionEnvironment();
~ExecutionEnvironment() override;
void initGmm(const HardwareInfo *hwInfo);
std::unique_ptr<CommandStreamReceiver> commandStreamReceiver;
std::unique_ptr<MemoryManager> memoryManager;
std::unique_ptr<CommandStreamReceiver> commandStreamReceiver;
};
} // namespace OCLRT

View File

@@ -27,6 +27,7 @@
#include "runtime/memory_manager/os_agnostic_memory_manager.h"
#include "runtime/helpers/options.h"
#include "runtime/platform/platform.h"
#include "unit_tests/mocks/mock_csr.h"
using namespace OCLRT;
@@ -104,16 +105,24 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDe
struct GmmHelperMock : public GmmHelper {
using GmmHelper::GmmHelper;
~GmmHelperMock() override {
EXPECT_EQ(destructorId, 1u);
EXPECT_EQ(destructorId, 2u);
destructorId++;
}
};
struct MemoryMangerMock : public OsAgnosticMemoryManager {
~MemoryMangerMock() override {
EXPECT_EQ(destructorId, 0u);
EXPECT_EQ(destructorId, 1u);
destructorId++;
}
};
struct CommandStreamReceiverMock : public MockCommandStreamReceiver {
~CommandStreamReceiverMock() override {
EXPECT_EQ(destructorId, 0u);
destructorId++;
};
};
struct MockExecutionEnvironment : ExecutionEnvironment {
using ExecutionEnvironment::gmmHelper;
};
@@ -121,7 +130,8 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDe
std::unique_ptr<MockExecutionEnvironment> executionEnvironment(new MockExecutionEnvironment);
executionEnvironment->gmmHelper.reset(new GmmHelperMock(platformDevices[0]));
executionEnvironment->memoryManager.reset(new MemoryMangerMock);
executionEnvironment->commandStreamReceiver.reset(new CommandStreamReceiverMock);
executionEnvironment.reset(nullptr);
EXPECT_EQ(2u, destructorId);
}
EXPECT_EQ(3u, destructorId);
}