Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2005)

Unified Diff: Source/platform/graphics/GraphicsContext.cpp

Issue 555703004: drawDisplayList should notify the region tracker. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Disable region tracking during record. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698