Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/jfr/support/jfrFlush.cpp
41149 views
1
/*
2
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#include "precompiled.hpp"
26
#include "jfr/recorder/jfrEventSetting.inline.hpp"
27
#include "jfr/recorder/storage/jfrStorage.hpp"
28
#include "jfr/recorder/stacktrace/jfrStackTraceRepository.hpp"
29
#include "jfr/support/jfrFlush.hpp"
30
#include "jfr/support/jfrThreadLocal.hpp"
31
#include "runtime/thread.inline.hpp"
32
#include "utilities/debug.hpp"
33
34
JfrFlush::JfrFlush(JfrStorage::BufferPtr old, size_t used, size_t requested, Thread* thread) :
35
_result(JfrStorage::flush(old, used, requested, true, thread)) {
36
}
37
38
template <typename T>
39
class LessThanHalfBufferSize : AllStatic {
40
public:
41
static bool evaluate(T* t) {
42
assert(t != NULL, "invariant");
43
return t->free_size() < t->size() / 2;
44
}
45
};
46
47
template <typename T>
48
class LessThanSize : AllStatic {
49
public:
50
static bool evaluate(T* t, size_t size) {
51
assert(t != NULL, "invariant");
52
return t->free_size() < size;
53
}
54
};
55
56
bool jfr_is_event_enabled(JfrEventId id) {
57
return JfrEventSetting::is_enabled(id);
58
}
59
60
bool jfr_has_stacktrace_enabled(JfrEventId id) {
61
return JfrEventSetting::has_stacktrace(id);
62
}
63
64
void jfr_conditional_flush(JfrEventId id, size_t size, Thread* thread) {
65
if (thread->jfr_thread_local()->has_native_buffer()) {
66
JfrStorage::BufferPtr buffer = thread->jfr_thread_local()->native_buffer();
67
if (LessThanSize<JfrStorage::Buffer>::evaluate(buffer, size)) {
68
JfrFlush f(buffer, 0, 0, thread);
69
}
70
}
71
}
72
73
bool jfr_save_stacktrace(Thread* thread) {
74
JfrThreadLocal* const tl = thread->jfr_thread_local();
75
if (tl->has_cached_stack_trace()) {
76
return false; // no ownership
77
}
78
tl->set_cached_stack_trace_id(JfrStackTraceRepository::record(thread));
79
return true;
80
}
81
82
void jfr_clear_stacktrace(Thread* thread) {
83
thread->jfr_thread_local()->clear_cached_stack_trace();
84
}
85
86