mirror of
https://github.com/opencv/opencv.git
synced 2024-11-28 13:10:12 +08:00
ocl: silence warning in case of async cleanup
- OpenCL kernel cleanup processing is asynchronous and can be called even after forced clFinish() - buffers are released later in asynchronous mode - silence these false positive cases for asynchronous cleanup
This commit is contained in:
parent
fc0f9da7a7
commit
b3755e617c
@ -80,6 +80,7 @@ UMatData::~UMatData()
|
||||
CV_Assert(mapcount == 0);
|
||||
data = origdata = 0;
|
||||
size = 0;
|
||||
bool isAsyncCleanup = !!(flags & UMatData::ASYNC_CLEANUP);
|
||||
flags = 0;
|
||||
handle = 0;
|
||||
userdata = 0;
|
||||
@ -106,7 +107,7 @@ UMatData::~UMatData()
|
||||
showWarn = true;
|
||||
if (zero_Ref && zero_URef) // oops, we need to free resources
|
||||
{
|
||||
showWarn = true;
|
||||
showWarn = !isAsyncCleanup;
|
||||
// simulate UMat::deallocate
|
||||
u->currAllocator->deallocate(u);
|
||||
}
|
||||
|
@ -1154,6 +1154,30 @@ TEST(UMat, map_unmap_counting)
|
||||
}
|
||||
|
||||
|
||||
static void process_with_async_cleanup(Mat& frame)
|
||||
{
|
||||
UMat blurResult;
|
||||
{
|
||||
UMat umat_buffer = frame.getUMat(ACCESS_READ);
|
||||
cv::blur(umat_buffer, blurResult, Size(3, 3)); // UMat doesn't support inplace, this call is not synchronized
|
||||
}
|
||||
Mat result;
|
||||
blurResult.copyTo(result);
|
||||
swap(result, frame);
|
||||
// umat_buffer cleanup is done asynchronously, silence warning about original 'frame' cleanup here (through 'result')
|
||||
// - release input 'frame' (as 'result')
|
||||
// - release 'umat_buffer' asynchronously and silence warning about "parent" buffer (in debug builds)
|
||||
}
|
||||
TEST(UMat, async_cleanup_without_call_chain_warning)
|
||||
{
|
||||
Mat frame(Size(640, 480), CV_8UC1, Scalar::all(128));
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
process_with_async_cleanup(frame);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////// oclCleanupCallback threadsafe check (#5062) /////////////////////
|
||||
|
||||
// Case 1: reuse of old src Mat in OCL pipe. Hard to catch!
|
||||
|
Loading…
Reference in New Issue
Block a user