зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1145015 - Part 2: Add more checking rules for GrallocBuffer allocation. r=sotaro, r=nical
fix the assert checking.
This commit is contained in:
Родитель
fc1e027e12
Коммит
d726d9fba8
|
@ -111,6 +111,10 @@ bool
|
||||||
ParamTraits<MagicGrallocBufferHandle>::Read(const Message* aMsg,
|
ParamTraits<MagicGrallocBufferHandle>::Read(const Message* aMsg,
|
||||||
void** aIter, paramType* aResult)
|
void** aIter, paramType* aResult)
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(!aResult->mGraphicBuffer.get());
|
||||||
|
MOZ_ASSERT(aResult->mRef.mOwner == 0);
|
||||||
|
MOZ_ASSERT(aResult->mRef.mKey == -1);
|
||||||
|
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
const char* data;
|
const char* data;
|
||||||
int owner;
|
int owner;
|
||||||
|
@ -126,7 +130,7 @@ ParamTraits<MagicGrallocBufferHandle>::Read(const Message* aMsg,
|
||||||
|
|
||||||
size_t nfds = aMsg->num_fds();
|
size_t nfds = aMsg->num_fds();
|
||||||
int fds[nfds];
|
int fds[nfds];
|
||||||
bool sameProcess = (XRE_GetProcessType() == GeckoProcessType_Default);
|
|
||||||
for (size_t n = 0; n < nfds; ++n) {
|
for (size_t n = 0; n < nfds; ++n) {
|
||||||
FileDescriptor fd;
|
FileDescriptor fd;
|
||||||
if (!aMsg->ReadFileDescriptor(aIter, &fd)) {
|
if (!aMsg->ReadFileDescriptor(aIter, &fd)) {
|
||||||
|
@ -144,7 +148,9 @@ ParamTraits<MagicGrallocBufferHandle>::Read(const Message* aMsg,
|
||||||
|
|
||||||
aResult->mRef.mOwner = owner;
|
aResult->mRef.mOwner = owner;
|
||||||
aResult->mRef.mKey = index;
|
aResult->mRef.mKey = index;
|
||||||
if (sameProcess) {
|
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
||||||
|
// If we are in chrome process, we can just get GraphicBuffer directly from
|
||||||
|
// SharedBufferManagerParent.
|
||||||
aResult->mGraphicBuffer = SharedBufferManagerParent::GetGraphicBuffer(aResult->mRef);
|
aResult->mGraphicBuffer = SharedBufferManagerParent::GetGraphicBuffer(aResult->mRef);
|
||||||
} else {
|
} else {
|
||||||
// Deserialize GraphicBuffer
|
// Deserialize GraphicBuffer
|
||||||
|
@ -162,7 +168,7 @@ ParamTraits<MagicGrallocBufferHandle>::Read(const Message* aMsg,
|
||||||
buffer = nullptr;
|
buffer = nullptr;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if(buffer.get() && !aResult->mGraphicBuffer.get()) {
|
if (buffer.get()) {
|
||||||
aResult->mGraphicBuffer = buffer;
|
aResult->mGraphicBuffer = buffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -275,7 +275,9 @@ SharedBufferManagerChild::AllocGrallocBufferNow(const IntSize& aSize,
|
||||||
|
|
||||||
#ifdef MOZ_HAVE_SURFACEDESCRIPTORGRALLOC
|
#ifdef MOZ_HAVE_SURFACEDESCRIPTORGRALLOC
|
||||||
mozilla::layers::MaybeMagicGrallocBufferHandle handle;
|
mozilla::layers::MaybeMagicGrallocBufferHandle handle;
|
||||||
SendAllocateGrallocBuffer(aSize, aFormat, aUsage, &handle);
|
if (!SendAllocateGrallocBuffer(aSize, aFormat, aUsage, &handle)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (handle.type() != mozilla::layers::MaybeMagicGrallocBufferHandle::TMagicGrallocBufferHandle) {
|
if (handle.type() != mozilla::layers::MaybeMagicGrallocBufferHandle::TMagicGrallocBufferHandle) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -283,6 +285,7 @@ SharedBufferManagerChild::AllocGrallocBufferNow(const IntSize& aSize,
|
||||||
|
|
||||||
{
|
{
|
||||||
MutexAutoLock lock(mBufferMutex);
|
MutexAutoLock lock(mBufferMutex);
|
||||||
|
MOZ_ASSERT(mBuffers.count(handle.get_MagicGrallocBufferHandle().mRef.mKey)==0);
|
||||||
mBuffers[handle.get_MagicGrallocBufferHandle().mRef.mKey] = handle.get_MagicGrallocBufferHandle().mGraphicBuffer;
|
mBuffers[handle.get_MagicGrallocBufferHandle().mRef.mKey] = handle.get_MagicGrallocBufferHandle().mGraphicBuffer;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче