blob: 20f5cacd2d670fb4971e64085b1d3f1ccd7f48c0 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#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_ = sk_make_sp<PaintOpBuffer>();
canvas_.emplace(buffer_.get(), bounds);
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