Index: cc/paint/paint_recorder.cc |
diff --git a/cc/paint/paint_recorder.cc b/cc/paint/paint_recorder.cc |
index 672f0712725d4f1c20b56631d66061c737455c40..2ed17c74e29d02ee54f07a326ebc63cdcea935e6 100644 |
--- a/cc/paint/paint_recorder.cc |
+++ b/cc/paint/paint_recorder.cc |
@@ -4,9 +4,36 @@ |
#include "cc/paint/paint_recorder.h" |
+#include "cc/paint/paint_op_buffer.h" |
+ |
namespace cc { |
PaintRecorder::PaintRecorder() = default; |
+ |
PaintRecorder::~PaintRecorder() = default; |
+PaintCanvas* PaintRecorder::beginRecording(const SkRect& bounds) { |
+ buffer_.reset(new PaintOpBuffer(bounds)); |
+ canvas_.emplace(buffer_.get()); |
+ return getRecordingCanvas(); |
+} |
+ |
+sk_sp<PaintRecord> PaintRecorder::finishRecordingAsPicture() { |
+ // SkPictureRecorder users expect that their saves are automatically |
+ // closed for them. |
+ // |
+ // NOTE: Blink paint in general doesn't appear to need this, but the |
+ // RecordingImageBufferSurface::fallBackToRasterCanvas finishing off the |
+ // current frame depends on this. Maybe we could remove this assumption and |
+ // just have callers do it. |
+ canvas_->restoreToCount(1); |
+ |
+ // Some users (e.g. printing) use the existence of the recording canvas |
+ // to know if recording is finished, so reset it here. |
+ canvas_.reset(); |
+ |
+ buffer_->ShrinkToFit(); |
+ return std::move(buffer_); |
+} |
+ |
} // namespace cc |