Flutter Engine
The Flutter Engine
surface_control.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
11namespace impeller::android {
12
14 if (window == nullptr) {
15 VALIDATION_LOG << "Parent window of surface was null.";
16 return;
17 }
18 if (debug_name == nullptr) {
19 debug_name = "Impeller Layer";
20 }
21 control_.reset(
22 GetProcTable().ASurfaceControl_createFromWindow(window, debug_name));
23}
24
26 if (IsValid() && !RemoveFromParent()) {
27 VALIDATION_LOG << "Surface control could not be removed from its parent. "
28 "Expect a leak.";
29 }
30}
31
33 return control_.is_valid();
34}
35
36ASurfaceControl* SurfaceControl::GetHandle() const {
37 return control_.get();
38}
39
41 if (!IsValid()) {
42 return false;
43 }
44 SurfaceTransaction transaction;
45 if (!transaction.SetParent(*this, nullptr)) {
46 return false;
47 }
48 return transaction.Apply();
49}
50
52 return GetProcTable().IsValid() &&
53 GetProcTable().ASurfaceControl_createFromWindow.IsAvailable() &&
54 GetProcTable().ASurfaceTransaction_setEnableBackPressure.IsAvailable();
55}
56
57} // namespace impeller::android
void reset(const T &value=Traits::InvalidValue())
Definition: unique_object.h:62
bool is_valid() const
Definition: unique_object.h:89
const T & get() const
Definition: unique_object.h:87
~SurfaceControl()
Removes the surface control from the presentation hierarchy managed by the system compositor and rele...
SurfaceControl(ANativeWindow *window, const char *debug_name=nullptr)
Creates a new surface control and adds it as a child of the given window.
bool RemoveFromParent() const
Remove the surface control from the hierarchy of nodes presented by the system compositor.
ASurfaceControl * GetHandle() const
A wrapper for ASurfaceTransaction. https://developer.android.com/ndk/reference/group/native-activity#...
bool Apply(OnCompleteCallback callback=nullptr)
Applies the updated encoded in the transaction and invokes the callback when the updated are complete...
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...
GLFWwindow * window
Definition: main.cc:45
const ProcTable & GetProcTable()
Definition: proc_table.cc:12
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
#define VALIDATION_LOG
Definition: validation.h:73
struct ANativeWindow ANativeWindow