| Index: Source/platform/graphics/GraphicsContext.cpp
|
| diff --git a/Source/platform/graphics/GraphicsContext.cpp b/Source/platform/graphics/GraphicsContext.cpp
|
| index 0f15c1dea38969b7375b9f66ee024899f61e475a..d11bb290ab8f4d614e59f417e35d53fa633e406e 100644
|
| --- a/Source/platform/graphics/GraphicsContext.cpp
|
| +++ b/Source/platform/graphics/GraphicsContext.cpp
|
| @@ -100,11 +100,13 @@ struct GraphicsContext::CanvasSaveState {
|
| };
|
|
|
| struct GraphicsContext::RecordingState {
|
| - RecordingState(SkPictureRecorder* recorder, SkCanvas* currentCanvas, const SkMatrix& currentMatrix, PassRefPtr<DisplayList> displayList)
|
| + RecordingState(SkPictureRecorder* recorder, SkCanvas* currentCanvas, const SkMatrix& currentMatrix,
|
| + PassRefPtr<DisplayList> displayList, RegionTrackingMode trackingMode)
|
| : m_displayList(displayList)
|
| , m_recorder(recorder)
|
| , m_savedCanvas(currentCanvas)
|
| - , m_savedMatrix(currentMatrix) { }
|
| + , m_savedMatrix(currentMatrix)
|
| + , m_regionTrackingMode(trackingMode) { }
|
|
|
| ~RecordingState() { }
|
|
|
| @@ -112,6 +114,7 @@ struct GraphicsContext::RecordingState {
|
| SkPictureRecorder* m_recorder;
|
| SkCanvas* m_savedCanvas;
|
| const SkMatrix m_savedMatrix;
|
| + RegionTrackingMode m_regionTrackingMode;
|
| };
|
|
|
| GraphicsContext::GraphicsContext(SkCanvas* canvas, DisabledMode disableContextOrPainting)
|
| @@ -519,7 +522,11 @@ void GraphicsContext::beginRecording(const FloatRect& bounds, uint32_t recordFla
|
| }
|
| }
|
|
|
| - m_recordingStateStack.append(RecordingState(recorder, savedCanvas, savedMatrix, displayList));
|
| + m_recordingStateStack.append(RecordingState(recorder, savedCanvas, savedMatrix, displayList,
|
| + static_cast<RegionTrackingMode>(m_regionTrackingMode)));
|
| +
|
| + // Disable region tracking during recording.
|
| + setRegionTrackingMode(RegionTrackingDisabled);
|
| }
|
|
|
| PassRefPtr<DisplayList> GraphicsContext::endRecording()
|
| @@ -531,6 +538,7 @@ PassRefPtr<DisplayList> GraphicsContext::endRecording()
|
| recording.m_displayList->setPicture(recording.m_recorder->endRecording());
|
|
|
| m_canvas = recording.m_savedCanvas;
|
| + setRegionTrackingMode(recording.m_regionTrackingMode);
|
| delete recording.m_recorder;
|
| m_recordingStateStack.removeLast();
|
|
|
| @@ -570,6 +578,14 @@ void GraphicsContext::drawDisplayList(DisplayList* displayList)
|
| m_canvas->drawPicture(displayList->picture());
|
| }
|
|
|
| + if (regionTrackingEnabled()) {
|
| + // Since we don't track regions within display lists, conservatively
|
| + // mark the bounds as non-opaque.
|
| + SkPaint paint;
|
| + paint.setXfermodeMode(SkXfermode::kClear_Mode);
|
| + m_trackedRegion.didDrawBounded(this, displayList->bounds(), paint);
|
| + }
|
| +
|
| if (performClip || performTransform)
|
| restore();
|
| }
|
|
|