Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
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
9
10namespace impeller::android {
11
13 if (window == nullptr) {
14 VALIDATION_LOG << "Parent window of surface was null.";
15 return;
16 }
17 if (debug_name == nullptr) {
18 debug_name = "Impeller Layer";
19 }
20 control_.reset(
21 GetProcTable().ASurfaceControl_createFromWindow(window, debug_name));
22}
23
25 if (IsValid() && !RemoveFromParent()) {
26 VALIDATION_LOG << "Surface control could not be removed from its parent. "
27 "Expect a leak.";
28 }
29}
30
32 return control_.is_valid();
33}
34
35ASurfaceControl* SurfaceControl::GetHandle() const {
36 return control_.get();
37}
38
40 if (!IsValid()) {
41 return false;
42 }
43 SurfaceTransaction transaction;
44 if (!transaction.SetParent(*this, nullptr)) {
45 return false;
46 }
47 return transaction.Apply();
48}
49
51 return GetProcTable().IsValid() &&
52 GetProcTable().ASurfaceControl_createFromWindow.IsAvailable();
53}
54
55} // namespace impeller::android
void reset(const T &value=Traits::InvalidValue())
bool is_valid() const
const T & get() const
~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