summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-08 23:25:39 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-08 23:25:39 +0000
commitf684678cc7d1a8678e5cd1ece6f96c181f3e52c9 (patch)
tree0986a1a6372149ac12a713a499aa15e4e2ab28cc /gpu
parent233d67f1cc050a8d02001a18a9a9fe92be77c97b (diff)
downloadchromium_src-f684678cc7d1a8678e5cd1ece6f96c181f3e52c9.zip
chromium_src-f684678cc7d1a8678e5cd1ece6f96c181f3e52c9.tar.gz
chromium_src-f684678cc7d1a8678e5cd1ece6f96c181f3e52c9.tar.bz2
Fix 2 Dr. Memory issues
1) Unit tests were incorrectly using TextureInfo 2) GLES2Implementation::TexSubImageImpl was reading 1-7 bytes too many. TEST=ran with Dr.Memory BUG=91786 Review URL: http://codereview.chromium.org/7541074 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95906 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/client/gles2_implementation.cc7
-rw-r--r--gpu/command_buffer/service/texture_manager_unittest.cc5
2 files changed, 7 insertions, 5 deletions
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index d3fcf87..06108d4 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -1416,7 +1416,8 @@ void GLES2Implementation::TexSubImage2DImpl(
static_cast<GLsizeiptr>(1));
while (height) {
GLint num_rows = std::min(height, max_rows);
- GLsizeiptr part_size = num_rows * padded_row_size;
+ GLsizeiptr part_size =
+ (num_rows - 1) * padded_row_size + unpadded_row_size;
void* buffer = transfer_buffer_.Alloc(part_size);
GLint y;
if (unpack_flip_y_) {
@@ -1433,7 +1434,7 @@ void GLES2Implementation::TexSubImage2DImpl(
transfer_buffer_id_, transfer_buffer_.GetOffset(buffer), internal);
transfer_buffer_.FreePendingToken(buffer, helper_->InsertToken());
yoffset += num_rows;
- source += part_size;
+ source += num_rows * padded_row_size;
height -= num_rows;
}
} else {
@@ -1805,7 +1806,7 @@ void GLES2Implementation::ReadPixels(
// Compute how much space those rows will take. The last row will not
// include padding.
GLsizeiptr part_size =
- unpadded_row_size + (padded_row_size * std::max(num_rows - 1, 0));
+ unpadded_row_size + padded_row_size * (num_rows - 1);
void* buffer = transfer_buffer_.Alloc(part_size);
*result = 0; // mark as failed.
helper_->ReadPixels(
diff --git a/gpu/command_buffer/service/texture_manager_unittest.cc b/gpu/command_buffer/service/texture_manager_unittest.cc
index 356453d..dd634e8 100644
--- a/gpu/command_buffer/service/texture_manager_unittest.cc
+++ b/gpu/command_buffer/service/texture_manager_unittest.cc
@@ -308,10 +308,11 @@ class TextureInfoTest : public testing::Test {
::gfx::GLInterface::SetGLInterface(gl_.get());
manager_.CreateTextureInfo(&feature_info_, kClient1Id, kService1Id);
info_ = manager_.GetTextureInfo(kClient1Id);
- ASSERT_TRUE(info_ != NULL);
+ ASSERT_TRUE(info_.get() != NULL);
}
virtual void TearDown() {
+ info_ = NULL;
::gfx::GLInterface::SetGLInterface(NULL);
gl_.reset();
}
@@ -319,7 +320,7 @@ class TextureInfoTest : public testing::Test {
// Use StrictMock to make 100% sure we know how GL will be called.
scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
TextureManager manager_;
- TextureManager::TextureInfo* info_;
+ TextureManager::TextureInfo::Ref info_;
FeatureInfo feature_info_;
};