Flutter Engine
Loading...
Searching...
No Matches
handle.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
5
#include "
handle.h
"
6
7
#include "
flutter/fml/logging.h
"
8
9
#include <iostream>
10
#include <vector>
11
12
#include <zircon/syscalls.h>
13
14
static
void
HandleFree
(
void
* isolate_callback_data,
void
* peer) {
15
FML_CHECK
(peer);
16
zircon_dart_handle_t
* handle =
reinterpret_cast<
zircon_dart_handle_t
*
>
(peer);
17
zircon_dart_handle_free
(handle);
18
}
19
20
static
void
HandlePairFree
(
void
* isolate_callback_data,
void
* peer) {
21
FML_CHECK
(peer);
22
zircon_dart_handle_pair_t
* handle_pair =
23
reinterpret_cast<
zircon_dart_handle_pair_t
*
>
(peer);
24
free(handle_pair);
25
}
26
27
void
zircon_dart_handle_free
(
zircon_dart_handle_t
* handle) {
28
FML_CHECK
(handle);
29
if
(handle->
handle
!= ZX_HANDLE_INVALID) {
30
zircon_dart_handle_close
(handle);
31
}
32
free(handle);
33
}
34
35
int32_t
zircon_dart_handle_close
(
zircon_dart_handle_t
* handle) {
36
FML_CHECK
(handle->
handle
!= ZX_HANDLE_INVALID);
37
zx_status_t status = zx_handle_close(handle->
handle
);
38
handle->
handle
= ZX_HANDLE_INVALID;
39
if
(status == ZX_OK) {
40
return
1;
41
}
else
{
42
return
0;
43
}
44
}
45
46
int32_t
zircon_dart_handle_is_valid
(
zircon_dart_handle_t
* handle) {
47
if
(!handle || (handle->
handle
== ZX_HANDLE_INVALID)) {
48
return
0;
49
}
else
{
50
return
1;
51
}
52
}
53
54
int
zircon_dart_handle_attach_finalizer
(Dart_Handle
object
,
55
void
* pointer,
56
intptr_t external_allocation_size) {
57
Dart_FinalizableHandle weak_handle = Dart_NewFinalizableHandle_DL(
58
object
, pointer, external_allocation_size,
HandleFree
);
59
60
if
(weak_handle ==
nullptr
) {
61
FML_LOG
(ERROR) <<
"Unable to attach finalizer: "
<< std::hex << pointer;
62
return
-1;
63
}
64
65
return
1;
66
}
67
68
int
zircon_dart_handle_pair_attach_finalizer
(
69
Dart_Handle
object
,
70
void
* pointer,
71
intptr_t external_allocation_size) {
72
Dart_FinalizableHandle weak_handle = Dart_NewFinalizableHandle_DL(
73
object
, pointer, external_allocation_size,
HandlePairFree
);
74
75
if
(weak_handle ==
nullptr
) {
76
FML_LOG
(ERROR) <<
"Unable to attach finalizer: "
<< std::hex << pointer;
77
return
-1;
78
}
79
80
return
1;
81
}
82
83
// zircon handle list methods.
84
using
HandleVector
= std::vector<zircon_dart_handle_t*>;
85
using
HandleVectorPtr
=
HandleVector
*;
86
87
zircon_dart_handle_list_t
*
zircon_dart_handle_list_create
() {
88
zircon_dart_handle_list_t
* result =
static_cast<
zircon_dart_handle_list_t
*
>
(
89
malloc(
sizeof
(
zircon_dart_handle_list_t
)));
90
result->
size
= 0;
91
result->
data
=
new
HandleVector
();
92
return
result;
93
}
94
95
void
zircon_dart_handle_list_append
(
zircon_dart_handle_list_t
* list,
96
zircon_dart_handle_t
* handle) {
97
FML_CHECK
(list);
98
FML_CHECK
(handle);
99
list->
size
++;
100
auto
data
=
reinterpret_cast<
HandleVectorPtr
>
(list->
data
);
101
data
->push_back(handle);
102
}
103
104
void
zircon_dart_handle_list_free
(
zircon_dart_handle_list_t
* list) {
105
auto
data
=
reinterpret_cast<
HandleVectorPtr
>
(list->
data
);
106
data
->clear();
107
delete
data
;
108
free(list);
109
}
zircon_dart_handle_close
int32_t zircon_dart_handle_close(zircon_dart_handle_t *handle)
Definition
handle.cc:35
zircon_dart_handle_list_append
void zircon_dart_handle_list_append(zircon_dart_handle_list_t *list, zircon_dart_handle_t *handle)
Definition
handle.cc:95
zircon_dart_handle_list_create
zircon_dart_handle_list_t * zircon_dart_handle_list_create()
Definition
handle.cc:87
HandleVectorPtr
HandleVector * HandleVectorPtr
Definition
handle.cc:85
HandlePairFree
static void HandlePairFree(void *isolate_callback_data, void *peer)
Definition
handle.cc:20
zircon_dart_handle_is_valid
int32_t zircon_dart_handle_is_valid(zircon_dart_handle_t *handle)
Definition
handle.cc:46
zircon_dart_handle_free
void zircon_dart_handle_free(zircon_dart_handle_t *handle)
Definition
handle.cc:27
zircon_dart_handle_attach_finalizer
int zircon_dart_handle_attach_finalizer(Dart_Handle object, void *pointer, intptr_t external_allocation_size)
Definition
handle.cc:54
HandleVector
std::vector< zircon_dart_handle_t * > HandleVector
Definition
handle.cc:84
zircon_dart_handle_list_free
void zircon_dart_handle_list_free(zircon_dart_handle_list_t *list)
Definition
handle.cc:104
zircon_dart_handle_pair_attach_finalizer
int zircon_dart_handle_pair_attach_finalizer(Dart_Handle object, void *pointer, intptr_t external_allocation_size)
Definition
handle.cc:68
HandleFree
static void HandleFree(void *isolate_callback_data, void *peer)
Definition
handle.cc:14
handle.h
logging.h
FML_LOG
#define FML_LOG(severity)
Definition
logging.h:101
FML_CHECK
#define FML_CHECK(condition)
Definition
logging.h:104
zircon_dart_handle_list_t
Definition
handle.h:27
zircon_dart_handle_list_t::data
void * data
Definition
handle.h:29
zircon_dart_handle_list_t::size
uint32_t size
Definition
handle.h:30
zircon_dart_handle_pair_t
Definition
handle.h:22
zircon_dart_handle_t
Definition
handle.h:18
zircon_dart_handle_t::handle
uint32_t handle
Definition
handle.h:19
data
std::shared_ptr< const fml::Mapping > data
Definition
texture_gles.cc:68
shell
platform
fuchsia
dart-pkg
zircon_ffi
handle.cc
Generated on Thu Nov 6 2025 16:11:27 for Flutter Engine by
1.9.8