Use internal ref counts to reference objects encapsulated by surface.

Change-Id: I4fa78637806b67c6dcc7bf1d2ef812c770a49583
Signed-off-by: Mrozek, Michal <michal.mrozek@intel.com>
This commit is contained in:
Mrozek, Michal
2019-07-19 11:51:51 +02:00
committed by sys_ocldev
parent 9cd56612a5
commit af91147c5d
2 changed files with 10 additions and 3 deletions

View File

@ -83,10 +83,10 @@ class HostPtrSurface : public Surface {
class MemObjSurface : public Surface {
public:
MemObjSurface(MemObj *memObj) : Surface(memObj->getGraphicsAllocation()->isCoherent()), memObj(memObj) {
memObj->retain();
memObj->incRefInternal();
}
~MemObjSurface() override {
memObj->release();
memObj->decRefInternal();
memObj = nullptr;
};

View File

@ -477,7 +477,14 @@ TEST_F(InternalsEventTest, processBlockedCommandsKernelOperation) {
std::vector<Surface *> v;
MockBuffer buffer;
buffer.retain();
auto initialRefCount = buffer.getRefApiCount();
auto initialInternalCount = buffer.getRefInternalCount();
auto bufferSurf = new MemObjSurface(&buffer);
EXPECT_EQ(initialInternalCount + 1, buffer.getRefInternalCount());
EXPECT_EQ(initialRefCount, buffer.getRefApiCount());
PreemptionMode preemptionMode = pDevice->getPreemptionMode();
v.push_back(bufferSurf);
auto cmd = new CommandComputeKernel(cmdQ, std::unique_ptr<KernelOperation>(blockedCommandsData), v, false, false, false, nullptr, preemptionMode, pKernel, 1);
@ -490,7 +497,7 @@ TEST_F(InternalsEventTest, processBlockedCommandsKernelOperation) {
event.submitCommand(false);
EXPECT_EQ(refCount - 1, buffer.getRefApiCount());
EXPECT_EQ(refCount, buffer.getRefApiCount());
EXPECT_EQ(refInternal - 1, buffer.getRefInternalCount());
auto taskLevelAfter = csr.peekTaskLevel();