Flutter Impeller
surface_transaction.cc
Go to the documentation of this file.
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 
6 
10 
11 namespace impeller::android {
12 
14  : transaction_(GetProcTable().ASurfaceTransaction_create()) {}
15 
17 
19  return transaction_.is_valid();
20 }
21 
24 };
25 
27  if (!IsValid()) {
28  return false;
29  }
30 
31  if (!callback) {
32  callback = []() {};
33  }
34 
35  const auto& proc_table = GetProcTable();
36 
37  auto data = std::make_unique<TransactionInFlightData>();
38  data->callback = callback;
39  proc_table.ASurfaceTransaction_setOnComplete(
40  transaction_.get(), //
41  data.release(), //
42  [](void* context, ASurfaceTransactionStats* stats) -> void {
43  auto data = reinterpret_cast<TransactionInFlightData*>(context);
44  data->callback();
45  delete data;
46  });
47  proc_table.ASurfaceTransaction_apply(transaction_.get());
48 
49  // Transactions may not be applied over and over.
50  transaction_.reset();
51  return true;
52 }
53 
55  const HardwareBuffer* buffer) {
56  if (control == nullptr || buffer == nullptr) {
57  VALIDATION_LOG << "Invalid control or buffer.";
58  return false;
59  }
60  GetProcTable().ASurfaceTransaction_setBuffer(transaction_.get(), //
61  control->GetHandle(), //
62  buffer->GetHandle(), //
63  -1);
64  return true;
65 }
66 
68  const Color& color) {
69  if (!IsValid() || !control.IsValid()) {
70  return false;
71  }
72  GetProcTable().ASurfaceTransaction_setColor(transaction_.get(), //
73  control.GetHandle(), //
74  color.red, //
75  color.green, //
76  color.blue, //
77  color.alpha, //
78  ADATASPACE_SRGB_LINEAR //
79  );
80  return true;
81 }
82 
84  const SurfaceControl* new_parent) {
85  if (!IsValid() || !control.IsValid()) {
86  return false;
87  }
88  if (new_parent && !new_parent->IsValid()) {
89  return false;
90  }
91  GetProcTable().ASurfaceTransaction_reparent(
92  transaction_.get(), //
93  control.GetHandle(), //
94  new_parent == nullptr ? nullptr : new_parent->GetHandle() //
95  );
96  return true;
97 }
98 
100  return GetProcTable().IsValid() &&
101  GetProcTable().ASurfaceTransaction_create.IsAvailable();
102 }
103 
104 } // namespace impeller::android
hardware_buffer.h
impeller::android::SurfaceTransaction::SetParent
bool SetParent(const SurfaceControl &control, const SurfaceControl *new_parent=nullptr)
Set the new parent control of the given control. If the new parent is null, it is removed from the co...
Definition: surface_transaction.cc:83
impeller::android::TransactionInFlightData::callback
SurfaceTransaction::OnCompleteCallback callback
Definition: surface_transaction.cc:23
impeller::android::SurfaceTransaction::~SurfaceTransaction
~SurfaceTransaction()
surface_control.h
impeller::Color
Definition: color.h:124
impeller::android::SurfaceControl
A wrapper for ASurfaceControl. https://developer.android.com/ndk/reference/group/native-activity#asur...
Definition: surface_control.h:22
impeller::android::SurfaceControl::IsValid
bool IsValid() const
Definition: surface_control.cc:31
impeller::Color::alpha
Scalar alpha
Definition: color.h:143
impeller::android::SurfaceTransaction::SetBackgroundColor
bool SetBackgroundColor(const SurfaceControl &control, const Color &color)
Encodes the updated background color of the surface control. The update will not be committed till th...
Definition: surface_transaction.cc:67
impeller::android::SurfaceTransaction::SetContents
bool SetContents(const SurfaceControl *control, const HardwareBuffer *buffer)
Encodes that the updated contents of a surface control are specified by the given hardware buffer....
Definition: surface_transaction.cc:54
validation.h
impeller::Color::green
Scalar green
Definition: color.h:133
impeller::android
Definition: choreographer.cc:9
impeller::android::HardwareBuffer
A wrapper for AHardwareBuffer https://developer.android.com/ndk/reference/group/a-hardware-buffer.
Definition: hardware_buffer.h:88
impeller::android::SurfaceTransaction::Apply
bool Apply(OnCompleteCallback callback=nullptr)
Applies the updated encoded in the transaction and invokes the callback when the updated are complete...
Definition: surface_transaction.cc:26
impeller::android::TransactionInFlightData
Definition: surface_transaction.cc:22
impeller::Color::red
Scalar red
Definition: color.h:128
impeller::android::ProcTable::IsValid
bool IsValid() const
If a valid proc table could be setup. This may fail in case of setup on non-Android platforms.
Definition: proc_table.cc:65
impeller::android::SurfaceTransaction::IsValid
bool IsValid() const
Definition: surface_transaction.cc:18
impeller::android::HardwareBuffer::GetHandle
AHardwareBuffer * GetHandle() const
Definition: hardware_buffer.cc:73
impeller::android::SurfaceControl::GetHandle
ASurfaceControl * GetHandle() const
Definition: surface_control.cc:35
VALIDATION_LOG
#define VALIDATION_LOG
Definition: validation.h:73
surface_transaction.h
impeller::android::GetProcTable
const ProcTable & GetProcTable()
Definition: proc_table.cc:12
impeller::android::SurfaceTransaction::OnCompleteCallback
std::function< void(void)> OnCompleteCallback
Definition: surface_transaction.h:83
impeller::android::SurfaceTransaction::SurfaceTransaction
SurfaceTransaction()
Definition: surface_transaction.cc:13
impeller::android::SurfaceTransaction::IsAvailableOnPlatform
static bool IsAvailableOnPlatform()
Definition: surface_transaction.cc:99
impeller::Color::blue
Scalar blue
Definition: color.h:138