Index: content/browser/compositor/io_surface_layer_mac.mm |
diff --git a/content/browser/compositor/io_surface_layer_mac.mm b/content/browser/compositor/io_surface_layer_mac.mm |
index 1262386d41e544e367754db266939bec00d6b511..c0ea9e156593cb988f1c42796385db1701760bb4 100644 |
--- a/content/browser/compositor/io_surface_layer_mac.mm |
+++ b/content/browser/compositor/io_surface_layer_mac.mm |
@@ -4,6 +4,8 @@ |
#include "content/browser/compositor/io_surface_layer_mac.h" |
+#include <sstream> |
+ |
#include <CoreFoundation/CoreFoundation.h> |
#include <OpenGL/CGLIOSurface.h> |
#include <OpenGL/CGLRenderers.h> |
@@ -11,6 +13,7 @@ |
#include "base/mac/mac_util.h" |
#include "base/mac/sdk_forward_declarations.h" |
+#include "content/browser/gpu/gpu_data_manager_impl.h" |
#include "content/browser/renderer_host/render_widget_host_impl.h" |
#include "content/browser/renderer_host/render_widget_host_view_mac.h" |
#include "ui/base/cocoa/animation_utils.h" |
@@ -24,6 +27,16 @@ |
LOG_IF(ERROR, gl_error != GL_NO_ERROR) << "GL Error: " << gl_error; \ |
} while (0) |
+// Helper function for logging error codes. |
+namespace { |
+template<typename T> |
+std::string to_string(T value) { |
+ std::ostringstream stream; |
+ stream << value; |
+ return stream.str(); |
+} |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// IOSurfaceLayer(Private) |
@@ -159,7 +172,10 @@ void IOSurfaceLayerHelper::TimerFired() { |
io_surface_.reset(IOSurfaceLookup(io_surface_id)); |
io_surface_texture_dirty_ = true; |
if (!io_surface_) { |
- LOG(ERROR) << "Failed to open IOSurface for frame"; |
+ content::GpuDataManagerImpl::GetInstance()->AddLogMessage( |
+ logging::LOG_ERROR, |
+ "IOSurfaceLayer", |
+ "Failed to open IOSurface in gotFrameWithIOSurface"); |
if (client_) |
client_->IOSurfaceLayerHitError(); |
} |
@@ -274,10 +290,14 @@ void IOSurfaceLayerHelper::TimerFired() { |
attribs.push_back(static_cast<CGLPixelFormatAttribute>(0)); |
GLint number_virtual_screens = 0; |
base::ScopedTypeRef<CGLPixelFormatObj> pixel_format; |
- CGLError error = CGLChoosePixelFormat( |
+ CGLError cgl_error = CGLChoosePixelFormat( |
&attribs.front(), pixel_format.InitializeInto(), &number_virtual_screens); |
- if (error != kCGLNoError) { |
- LOG(ERROR) << "Failed to create pixel format object."; |
+ if (cgl_error != kCGLNoError) { |
+ content::GpuDataManagerImpl::GetInstance()->AddLogMessage( |
+ logging::LOG_ERROR, |
+ "IOSurfaceLayer", |
+ std::string("Failed to create pixel format object with CGL error ") + |
+ to_string(static_cast<int>(cgl_error))); |
return NULL; |
} |
return CGLRetainPixelFormat(pixel_format); |
@@ -331,7 +351,11 @@ void IOSurfaceLayerHelper::TimerFired() { |
0 /* plane */); |
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); |
if (cgl_error != kCGLNoError) { |
- LOG(ERROR) << "CGLTexImageIOSurface2D failed with " << cgl_error; |
+ content::GpuDataManagerImpl::GetInstance()->AddLogMessage( |
+ logging::LOG_ERROR, |
+ "IOSurfaceLayer", |
+ std::string("CGLTexImageIOSurface2D failed with CGL error ") + |
+ to_string(cgl_error)); |
glDeleteTextures(1, &io_surface_texture_); |
io_surface_texture_ = 0; |
if (client_) |
@@ -384,6 +408,10 @@ void IOSurfaceLayerHelper::TimerFired() { |
glBegin(GL_TRIANGLES); |
glEnd(); |
} else { |
+ content::GpuDataManagerImpl::GetInstance()->AddLogMessage( |
+ logging::LOG_ERROR, |
+ "IOSurfaceLayer", |
+ std::string("No texture to draw, clearing to white")); |
glClearColor(1, 1, 1, 1); |
glClear(GL_COLOR_BUFFER_BIT); |
} |
@@ -395,15 +423,22 @@ void IOSurfaceLayerHelper::TimerFired() { |
if (cgl_error == kCGLNoError) { |
cgl_renderer_id_ &= kCGLRendererIDMatchingMask; |
} else { |
- LOG(ERROR) << "CGLGetParameter for kCGLCPCurrentRendererID failed with " |
- << cgl_error; |
+ content::GpuDataManagerImpl::GetInstance()->AddLogMessage( |
+ logging::LOG_ERROR, |
+ "IOSurfaceLayer", |
+ std::string("CGLGetParameter for kCGLCPCurrentRendererID failed ") + |
+ std::string("with CGL error ") + to_string(cgl_error)); |
cgl_renderer_id_ = 0; |
} |
} |
// If we hit any errors, tell the client. |
while (GLenum gl_error = glGetError()) { |
- LOG(ERROR) << "Hit GL error " << gl_error; |
+ content::GpuDataManagerImpl::GetInstance()->AddLogMessage( |
+ logging::LOG_ERROR, |
+ "IOSurfaceLayer", |
+ std::string("Hit GL error ") + to_string(gl_error) + |
+ std::string(" in drawInCGLContext")); |
if (client_) |
client_->IOSurfaceLayerHitError(); |
} |