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 {
};
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)
......@@ -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()
......@@ -546,6 +553,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();
......@@ -586,6 +594,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();
}
......
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