Index: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp |
index a9c898469e5fd847cdd14895c6d4f72aee46e878..8a19735c891aa8d43d6180556aa1e0ecf200bb50 100644 |
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp |
@@ -331,7 +331,7 @@ SkCanvas* Canvas2DLayerBridge::canvas() |
return m_recorder->getRecordingCanvas(); |
} |
-void Canvas2DLayerBridge::disableDeferral() |
+void Canvas2DLayerBridge::disableDeferral(DisableDeferralReason reason) |
{ |
// Disabling deferral is permanent: once triggered by disableDeferral() |
// we stay in immediate mode indefinitely. This is a performance heuristic |
@@ -345,6 +345,7 @@ void Canvas2DLayerBridge::disableDeferral() |
if (!m_isDeferralEnabled) |
return; |
+ Platform::current()->histogramEnumeration("Canvas.GPUAccelerated2DCanvasDisableDeferralReason", reason, DisableDeferralReasonCount); |
CanvasMetrics::countCanvasContextUsage(CanvasMetrics::GPUAccelerated2DCanvasDeferralDisabled); |
flushRecordingOnly(); |
// Because we will be discarding the recorder, if the flush failed |
@@ -601,7 +602,7 @@ bool Canvas2DLayerBridge::prepareMailbox(WebExternalTextureMailbox* outMailbox, |
return false; |
} |
- RefPtr<SkImage> image = newImageSnapshot(PreferAcceleration); |
+ RefPtr<SkImage> image = newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown); |
if (!image || !image->getTexture()) |
return false; |
@@ -738,7 +739,7 @@ void Canvas2DLayerBridge::didDraw(const FloatRect& rect) |
IntRect pixelBounds = enclosingIntRect(rect); |
m_recordingPixelCount += pixelBounds.width() * pixelBounds.height(); |
if (m_recordingPixelCount >= (m_size.width() * m_size.height() * ExpensiveCanvasHeuristicParameters::ExpensiveOverdrawThreshold)) { |
- disableDeferral(); |
+ disableDeferral(DisableDeferralReasonExpensiveOverdrawHeuristic); |
} |
} |
if (!m_isRegisteredTaskObserver) { |
@@ -794,7 +795,7 @@ void Canvas2DLayerBridge::willProcessTask() |
ASSERT_NOT_REACHED(); |
} |
-PassRefPtr<SkImage> Canvas2DLayerBridge::newImageSnapshot(AccelerationHint hint) |
+PassRefPtr<SkImage> Canvas2DLayerBridge::newImageSnapshot(AccelerationHint hint, SnapshotReason) |
{ |
if (!checkSurfaceValid()) |
return nullptr; |