summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerikchen <erikchen@chromium.org>2016-03-22 17:07:58 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-23 00:09:12 +0000
commitf38d1ce51f77c495dffb59d9c8d557881f3df448 (patch)
tree74771f464cb5db66520656b1bb8e45694afa1797
parentab1bb29984068b61637741beaa03fc50a91c17dc (diff)
downloadchromium_src-f38d1ce51f77c495dffb59d9c8d557881f3df448.zip
chromium_src-f38d1ce51f77c495dffb59d9c8d557881f3df448.tar.gz
chromium_src-f38d1ce51f77c495dffb59d9c8d557881f3df448.tar.bz2
Disable IOSurface clearing on OS X 10.9.
Doing so triggers PDF rendering problems on some GPUs. BUG=594343 TBR=avi@chromium.org Review URL: https://codereview.chromium.org/1826613002 Cr-Commit-Position: refs/heads/master@{#382739}
-rw-r--r--ui/gfx/mac/io_surface.cc19
-rw-r--r--ui/gl/test/gl_image_test_template.h12
2 files changed, 25 insertions, 6 deletions
diff --git a/ui/gfx/mac/io_surface.cc b/ui/gfx/mac/io_surface.cc
index e6079c7..e48a813 100644
--- a/ui/gfx/mac/io_surface.cc
+++ b/ui/gfx/mac/io_surface.cc
@@ -8,6 +8,7 @@
#include <stdint.h>
#include "base/logging.h"
+#include "base/mac/mac_util.h"
#include "base/mac/mach_logging.h"
#include "base/macros.h"
#include "ui/gfx/buffer_format_util.h"
@@ -150,12 +151,18 @@ IOSurfaceRef CreateIOSurface(const gfx::Size& size, gfx::BufferFormat format) {
IOSurfaceRef surface = IOSurfaceCreate(properties);
- // Zero-initialize the IOSurface. Calling IOSurfaceLock/IOSurfaceUnlock
- // appears to be sufficient. https://crbug.com/584760#c17
- IOReturn r = IOSurfaceLock(surface, 0, nullptr);
- DCHECK_EQ(kIOReturnSuccess, r);
- r = IOSurfaceUnlock(surface, 0, nullptr);
- DCHECK_EQ(kIOReturnSuccess, r);
+ // For unknown reasons, triggering this lock on OS X 10.9, on certain GPUs,
+ // causes PDFs to render incorrectly. Hopefully this check can be removed once
+ // pdfium switches to a Skia backend on Mac.
+ // https://crbug.com/594343.
+ if (!base::mac::IsOSMavericks()) {
+ // Zero-initialize the IOSurface. Calling IOSurfaceLock/IOSurfaceUnlock
+ // appears to be sufficient. https://crbug.com/584760#c17
+ IOReturn r = IOSurfaceLock(surface, 0, nullptr);
+ DCHECK_EQ(kIOReturnSuccess, r);
+ r = IOSurfaceUnlock(surface, 0, nullptr);
+ DCHECK_EQ(kIOReturnSuccess, r);
+ }
return surface;
}
diff --git a/ui/gl/test/gl_image_test_template.h b/ui/gl/test/gl_image_test_template.h
index 28567bc..e10c64c 100644
--- a/ui/gl/test/gl_image_test_template.h
+++ b/ui/gl/test/gl_image_test_template.h
@@ -13,6 +13,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/strings/stringize_macros.h"
#include "base/strings/stringprintf.h"
+#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/buffer_types.h"
@@ -25,6 +26,10 @@
#include "ui/gl/test/gl_image_test_support.h"
#include "ui/gl/test/gl_test_helper.h"
+#if defined(OS_MACOSX)
+#include "base/mac/mac_util.h"
+#endif
+
namespace gl {
namespace {
@@ -178,6 +183,13 @@ class GLImageZeroInitializeTest : public GLImageTest<GLImageTestDelegate> {};
TYPED_TEST_CASE_P(GLImageZeroInitializeTest);
TYPED_TEST_P(GLImageZeroInitializeTest, ZeroInitialize) {
+#if defined(OS_MACOSX)
+ // This functionality is disabled on Mavericks because it breaks PDF
+ // rendering. https://crbug.com/594343.
+ if (base::mac::IsOSMavericks())
+ return;
+#endif
+
const gfx::Size image_size(256, 256);
GLuint framebuffer =