Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1426)

Unified Diff: content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc

Issue 806653006: Update GPU memory buffers to use StrideInBytes internally. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed nit Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc b/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
index 5572c1fa2a92ab8422d61ebe7d65efef2b0818ae..2f95d61ebfe77356084c2b8bbf120805622463c1 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
@@ -35,7 +35,17 @@ scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImplSharedMemory::Create(
const gfx::Size& size,
Format format) {
scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
- if (!shared_memory->CreateAnonymous(size.GetArea() * BytesPerPixel(format)))
+
+ size_t stride_in_bytes = 0;
+ if (!StrideInBytes(size.width(), format, &stride_in_bytes))
+ return scoped_ptr<GpuMemoryBufferImpl>();
+
+ base::CheckedNumeric<size_t> size_in_bytes = stride_in_bytes;
+ size_in_bytes *= size.height();
+ if (!size_in_bytes.IsValid())
+ return scoped_ptr<GpuMemoryBufferImpl>();
+
+ if (!shared_memory->CreateAnonymous(size_in_bytes.ValueOrDie()))
return scoped_ptr<GpuMemoryBufferImpl>();
return make_scoped_ptr(new GpuMemoryBufferImplSharedMemory(
@@ -49,9 +59,12 @@ GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(
const gfx::Size& size,
Format format,
base::ProcessHandle child_process) {
- base::CheckedNumeric<int> buffer_size = size.width();
+ size_t stride_in_bytes = 0;
+ if (!StrideInBytes(size.width(), format, &stride_in_bytes))
+ return gfx::GpuMemoryBufferHandle();
+
+ base::CheckedNumeric<int> buffer_size = stride_in_bytes;
buffer_size *= size.height();
- buffer_size *= BytesPerPixel(format);
if (!buffer_size.IsValid())
return gfx::GpuMemoryBufferHandle();
@@ -101,7 +114,17 @@ bool GpuMemoryBufferImplSharedMemory::IsFormatSupported(Format format) {
void* GpuMemoryBufferImplSharedMemory::Map() {
DCHECK(!mapped_);
- if (!shared_memory_->Map(size_.GetArea() * BytesPerPixel(format_)))
+
+ size_t stride_in_bytes = 0;
+ if (!StrideInBytes(size_.width(), format_, &stride_in_bytes))
+ return NULL;
+
+ base::CheckedNumeric<size_t> size_in_bytes = stride_in_bytes;
+ size_in_bytes *= size_.height();
+ if (!size_in_bytes.IsValid())
+ return NULL;
+
+ if (!shared_memory_->Map(size_in_bytes.ValueOrDie()))
return NULL;
mapped_ = true;
return shared_memory_->memory();
@@ -114,7 +137,10 @@ void GpuMemoryBufferImplSharedMemory::Unmap() {
}
uint32 GpuMemoryBufferImplSharedMemory::GetStride() const {
- return size_.width() * BytesPerPixel(format_);
+ size_t stride_in_bytes = 0;
+ bool valid_stride = StrideInBytes(size_.width(), format_, &stride_in_bytes);
+ DCHECK(valid_stride);
+ return stride_in_bytes;
}
gfx::GpuMemoryBufferHandle GpuMemoryBufferImplSharedMemory::GetHandle() const {

Powered by Google App Engine
This is Rietveld 408576698