1 | // Copyright 2013 The Flutter Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. |
4 | |
5 | #include "flutter/flow/surface_frame.h" |
6 | #include "flutter/fml/logging.h" |
7 | |
8 | namespace flutter { |
9 | |
10 | SurfaceFrame::SurfaceFrame(sk_sp<SkSurface> surface, |
11 | bool supports_readback, |
12 | const SubmitCallback& submit_callback) |
13 | : surface_(surface), |
14 | supports_readback_(supports_readback), |
15 | submit_callback_(submit_callback) { |
16 | FML_DCHECK(submit_callback_); |
17 | } |
18 | |
19 | SurfaceFrame::SurfaceFrame(sk_sp<SkSurface> surface, |
20 | bool supports_readback, |
21 | const SubmitCallback& submit_callback, |
22 | std::unique_ptr<GLContextResult> context_result) |
23 | : submitted_(false), |
24 | surface_(surface), |
25 | supports_readback_(supports_readback), |
26 | submit_callback_(submit_callback), |
27 | context_result_(std::move(context_result)) { |
28 | FML_DCHECK(submit_callback_); |
29 | } |
30 | |
31 | SurfaceFrame::~SurfaceFrame() { |
32 | if (submit_callback_ && !submitted_) { |
33 | // Dropping without a Submit. |
34 | submit_callback_(*this, nullptr); |
35 | } |
36 | } |
37 | |
38 | bool SurfaceFrame::Submit() { |
39 | if (submitted_) { |
40 | return false; |
41 | } |
42 | |
43 | submitted_ = PerformSubmit(); |
44 | |
45 | return submitted_; |
46 | } |
47 | |
48 | bool SurfaceFrame::IsSubmitted() const { |
49 | return submitted_; |
50 | } |
51 | |
52 | SkCanvas* SurfaceFrame::SkiaCanvas() { |
53 | return surface_ != nullptr ? surface_->getCanvas() : nullptr; |
54 | } |
55 | |
56 | sk_sp<SkSurface> SurfaceFrame::SkiaSurface() const { |
57 | return surface_; |
58 | } |
59 | |
60 | bool SurfaceFrame::PerformSubmit() { |
61 | if (submit_callback_ == nullptr) { |
62 | return false; |
63 | } |
64 | |
65 | if (submit_callback_(*this, SkiaCanvas())) { |
66 | return true; |
67 | } |
68 | |
69 | return false; |
70 | } |
71 | |
72 | } // namespace flutter |
73 | |