diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index bbbcf4c671..80c7f612a4 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -2309,6 +2309,16 @@ static bool read_pixels_pays_for_y_flip(GrSurfaceOrigin origin, const GrGLCaps& } bool GrGLGpu::readPixelsSupported(GrRenderTarget* target, GrPixelConfig readConfig) { +#ifdef SK_BUILD_FOR_MAC + // Chromium may ask us to read back from locked IOSurfaces. Calling the command buffer's + // glGetIntegerv() with GL_IMPLEMENTATION_COLOR_READ_FORMAT/_TYPE causes the command buffer + // to make a call to check the framebuffer status which can hang the driver. So in Mac Chromium + // we always use a temporary surface to test for read pixels support. + // https://www.crbug.com/662802 + if (this->glContext().driver() == kChromium_GrGLDriver) { + return this->readPixelsSupported(target->config(), readConfig); + } +#endif auto bindRenderTarget = [this, target]() -> bool { this->flushRenderTarget(static_cast(target), &SkIRect::EmptyIRect()); return true;