Chromium Code Reviews| Index: Source/core/html/HTMLCanvasElement.cpp |
| diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp |
| index 20be42fdda8dafac636a49de66da9d208560df53..46703c5054e18e7ecf0a368dddc480aa77633a63 100644 |
| --- a/Source/core/html/HTMLCanvasElement.cpp |
| +++ b/Source/core/html/HTMLCanvasElement.cpp |
| @@ -39,6 +39,7 @@ |
| #include "core/page/Frame.h" |
| #include "RuntimeEnabledFeatures.h" |
| #include "core/page/Settings.h" |
| +#include "core/platform/HistogramSupport.h" |
| #include "core/platform/MIMETypeRegistry.h" |
| #include "core/platform/graphics/GraphicsContextStateSaver.h" |
| #include "core/platform/graphics/ImageBuffer.h" |
| @@ -152,6 +153,13 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas |
| // context is already 2D, just return that. If the existing context is WebGL, then destroy it |
| // before creating a new 2D context. Vice versa when requesting a WebGL canvas. Requesting a |
| // context with any other type string will destroy any existing context. |
| + enum ContextType { |
| + Context2d, |
| + ContextWebkit3d, |
| + ContextExperimentalWebgl, |
| + ContextWebgl, |
| + ContextTypeCount, |
| + }; |
|
Mark P
2013/08/02 15:40:55
Please add a note that new elements should only be
Sami
2013/08/02 16:05:25
Done.
|
| // FIXME - The code depends on the context not going away once created, to prevent JS from |
| // seeing a dangling pointer. So for now we will disallow the context from being changed |
| @@ -160,6 +168,7 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas |
| if (m_context && !m_context->is2d()) |
| return 0; |
| if (!m_context) { |
| + HistogramSupport::histogramEnumeration("Canvas.ContextType", Context2d, ContextTypeCount); |
| m_context = CanvasRenderingContext2D::create(this, RuntimeEnabledFeatures::experimentalCanvasFeaturesEnabled() ? static_cast<Canvas2DContextAttributes*>(attrs) : 0, document()->inQuirksMode()); |
| if (m_context) |
| scheduleLayerUpdate(); |
| @@ -169,17 +178,24 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas |
| Settings* settings = document()->settings(); |
| if (settings && settings->webGLEnabled()) { |
| - |
| // Accept the legacy "webkit-3d" name as well as the provisional "experimental-webgl" name. |
| - bool is3dContext = (type == "webkit-3d") || (type == "experimental-webgl"); |
| - |
| // Now that WebGL is ratified, we will also accept "webgl" as the context name in Chrome. |
| - is3dContext |= (type == "webgl"); |
| + ContextType contextType; |
| + bool is3dContext = true; |
| + if (type == "webkit-3d") |
| + contextType = ContextWebkit3d; |
| + else if (type == "experimental-webgl") |
| + contextType = ContextExperimentalWebgl; |
| + else if (type == "webgl") |
| + contextType = ContextWebgl; |
| + else |
| + is3dContext = false; |
| if (is3dContext) { |
| if (m_context && !m_context->is3d()) |
| return 0; |
| if (!m_context) { |
| + HistogramSupport::histogramEnumeration("Canvas.ContextType", contextType, ContextTypeCount); |
| m_context = WebGLRenderingContext::create(this, static_cast<WebGLContextAttributes*>(attrs)); |
| if (m_context) |
| scheduleLayerUpdate(); |