Commit fee24491 authored by fmalita@chromium.org's avatar fmalita@chromium.org

drawDisplayList should notify the region tracker.


BUG=

Review URL: https://codereview.chromium.org/555703004

git-svn-id: svn://svn.chromium.org/blink/trunk@182002 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 8835f44a
...@@ -100,11 +100,13 @@ struct GraphicsContext::CanvasSaveState { ...@@ -100,11 +100,13 @@ struct GraphicsContext::CanvasSaveState {
}; };
struct GraphicsContext::RecordingState { 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_displayList(displayList)
, m_recorder(recorder) , m_recorder(recorder)
, m_savedCanvas(currentCanvas) , m_savedCanvas(currentCanvas)
, m_savedMatrix(currentMatrix) { } , m_savedMatrix(currentMatrix)
, m_regionTrackingMode(trackingMode) { }
~RecordingState() { } ~RecordingState() { }
...@@ -112,6 +114,7 @@ struct GraphicsContext::RecordingState { ...@@ -112,6 +114,7 @@ struct GraphicsContext::RecordingState {
SkPictureRecorder* m_recorder; SkPictureRecorder* m_recorder;
SkCanvas* m_savedCanvas; SkCanvas* m_savedCanvas;
const SkMatrix m_savedMatrix; const SkMatrix m_savedMatrix;
RegionTrackingMode m_regionTrackingMode;
}; };
GraphicsContext::GraphicsContext(SkCanvas* canvas, DisabledMode disableContextOrPainting) GraphicsContext::GraphicsContext(SkCanvas* canvas, DisabledMode disableContextOrPainting)
...@@ -534,7 +537,11 @@ void GraphicsContext::beginRecording(const FloatRect& bounds, uint32_t recordFla ...@@ -534,7 +537,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() PassRefPtr<DisplayList> GraphicsContext::endRecording()
...@@ -546,6 +553,7 @@ PassRefPtr<DisplayList> GraphicsContext::endRecording() ...@@ -546,6 +553,7 @@ PassRefPtr<DisplayList> GraphicsContext::endRecording()
recording.m_displayList->setPicture(recording.m_recorder->endRecording()); recording.m_displayList->setPicture(recording.m_recorder->endRecording());
m_canvas = recording.m_savedCanvas; m_canvas = recording.m_savedCanvas;
setRegionTrackingMode(recording.m_regionTrackingMode);
delete recording.m_recorder; delete recording.m_recorder;
m_recordingStateStack.removeLast(); m_recordingStateStack.removeLast();
...@@ -586,6 +594,14 @@ void GraphicsContext::drawDisplayList(DisplayList* displayList) ...@@ -586,6 +594,14 @@ void GraphicsContext::drawDisplayList(DisplayList* displayList)
m_canvas->drawPicture(displayList->picture()); 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) if (performClip || performTransform)
restore(); restore();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment