Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
fml
platform
android
scoped_java_ref.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 "flutter/fml/platform/android/scoped_java_ref.h"
6
7
#include "flutter/fml/logging.h"
8
#include "flutter/fml/platform/android/jni_util.h"
9
10
namespace
fml
{
11
namespace
jni {
12
13
static
const
int
kDefaultLocalFrameCapacity
= 16;
14
15
ScopedJavaLocalFrame::ScopedJavaLocalFrame
(JNIEnv*
env
) : env_(
env
) {
16
[[maybe_unused]]
int
failed =
17
env_->PushLocalFrame(
kDefaultLocalFrameCapacity
);
18
FML_DCHECK
(!failed);
19
}
20
21
ScopedJavaLocalFrame::ScopedJavaLocalFrame
(JNIEnv*
env
,
int
capacity)
22
: env_(
env
) {
23
[[maybe_unused]]
int
failed = env_->PushLocalFrame(capacity);
24
FML_DCHECK
(!failed);
25
}
26
27
ScopedJavaLocalFrame::~ScopedJavaLocalFrame
() {
28
env_->PopLocalFrame(NULL);
29
}
30
31
JavaRef<jobject>::JavaRef
() : obj_(NULL) {}
32
33
JavaRef<jobject>::JavaRef
(JNIEnv*
env
, jobject obj) : obj_(obj) {
34
if
(
obj
) {
35
FML_DCHECK
(
env
&&
env
->GetObjectRefType(
obj
) == JNILocalRefType);
36
}
37
}
38
39
JavaRef<jobject>::~JavaRef
() =
default
;
40
41
JNIEnv*
JavaRef<jobject>::SetNewLocalRef
(JNIEnv*
env
, jobject obj) {
42
if
(!
env
) {
43
env
=
AttachCurrentThread
();
44
}
else
{
45
FML_DCHECK
(
env
==
AttachCurrentThread
());
// Is |env| on correct thread.
46
}
47
if
(obj) {
48
obj =
env
->NewLocalRef(obj);
49
}
50
if
(obj_) {
51
env
->DeleteLocalRef(obj_);
52
}
53
obj_ = obj;
54
return
env
;
55
}
56
57
void
JavaRef<jobject>::SetNewGlobalRef
(JNIEnv*
env
, jobject obj) {
58
if
(!
env
) {
59
env
=
AttachCurrentThread
();
60
}
else
{
61
FML_DCHECK
(
env
==
AttachCurrentThread
());
// Is |env| on correct thread.
62
}
63
if
(obj) {
64
obj =
env
->NewGlobalRef(obj);
65
}
66
if
(obj_) {
67
env
->DeleteGlobalRef(obj_);
68
}
69
obj_ = obj;
70
}
71
72
void
JavaRef<jobject>::ResetLocalRef
(JNIEnv*
env
) {
73
if
(obj_) {
74
FML_DCHECK
(
env
==
AttachCurrentThread
());
// Is |env| on correct thread.
75
env
->DeleteLocalRef(obj_);
76
obj_ = NULL;
77
}
78
}
79
80
void
JavaRef<jobject>::ResetGlobalRef
() {
81
if
(obj_) {
82
AttachCurrentThread
()->DeleteGlobalRef(obj_);
83
obj_ = NULL;
84
}
85
}
86
87
jobject
JavaRef<jobject>::ReleaseInternal
() {
88
jobject obj = obj_;
89
obj_ = NULL;
90
return
obj;
91
}
92
93
}
// namespace jni
94
}
// namespace fml
fml::jni::JavaRef
Definition
scoped_java_ref.h:76
fml::jni::JavaRef::obj
T obj() const
Definition
scoped_java_ref.h:78
fml::jni::JavaRef::JavaRef
JavaRef()
Definition
scoped_java_ref.h:81
fml::jni::JavaRef::~JavaRef
~JavaRef()
Definition
scoped_java_ref.h:82
fml::jni::ScopedJavaLocalFrame::ScopedJavaLocalFrame
ScopedJavaLocalFrame(JNIEnv *env)
Definition
scoped_java_ref.cc:15
fml::jni::ScopedJavaLocalFrame::~ScopedJavaLocalFrame
~ScopedJavaLocalFrame()
Definition
scoped_java_ref.cc:27
FML_DCHECK
#define FML_DCHECK(condition)
Definition
logging.h:103
env
Definition
__init__.py:1
fml::jni::AttachCurrentThread
JNIEnv * AttachCurrentThread()
Definition
jni_util.cc:34
fml::jni::kDefaultLocalFrameCapacity
static const int kDefaultLocalFrameCapacity
Definition
scoped_java_ref.cc:13
fml
Definition
ascii_trie.cc:9
Generated on Fri Apr 26 2024 06:14:05 for Flutter Engine by
1.9.8