Flutter Impeller
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 
10 namespace impeller::android {
11 
12 SurfaceControl::SurfaceControl(ANativeWindow* window, const char* debug_name) {
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 
35 ASurfaceControl* 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
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::SurfaceTransaction
A wrapper for ASurfaceTransaction. https://developer.android.com/ndk/reference/group/native-activity#...
Definition: surface_transaction.h:34
impeller::android::SurfaceControl::~SurfaceControl
~SurfaceControl()
Removes the surface control from the presentation hierarchy managed by the system compositor and rele...
Definition: surface_control.cc:24
impeller::android::SurfaceControl::IsAvailableOnPlatform
static bool IsAvailableOnPlatform()
Definition: surface_control.cc:50
surface_control.h
impeller::android::SurfaceControl::IsValid
bool IsValid() const
Definition: surface_control.cc:31
validation.h
impeller::android
Definition: choreographer.cc:9
impeller::android::SurfaceControl::RemoveFromParent
bool RemoveFromParent() const
Remove the surface control from the hierarchy of nodes presented by the system compositor.
Definition: surface_control.cc:39
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::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::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::SurfaceControl::SurfaceControl
SurfaceControl(ANativeWindow *window, const char *debug_name=nullptr)
Creates a new surface control and adds it as a child of the given window.
Definition: surface_control.cc:12