diff options
Diffstat (limited to 'runtime/art_method.cc')
| -rw-r--r-- | runtime/art_method.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/runtime/art_method.cc b/runtime/art_method.cc index 64416d2137..5dbea529c5 100644 --- a/runtime/art_method.cc +++ b/runtime/art_method.cc @@ -30,6 +30,7 @@ #include "interpreter/interpreter.h" #include "jit/jit.h" #include "jit/jit_code_cache.h" +#include "jit/profiling_info.h" #include "jni_internal.h" #include "mapping_table.h" #include "mirror/abstract_method.h" @@ -579,4 +580,16 @@ const uint8_t* ArtMethod::GetQuickenedInfo() { return oat_method.GetVmapTable(); } +ProfilingInfo* ArtMethod::CreateProfilingInfo() { + ProfilingInfo* info = ProfilingInfo::Create(this); + MemberOffset offset = ArtMethod::EntryPointFromJniOffset(sizeof(void*)); + uintptr_t pointer = reinterpret_cast<uintptr_t>(this) + offset.Uint32Value(); + if (!reinterpret_cast<Atomic<ProfilingInfo*>*>(pointer)-> + CompareExchangeStrongSequentiallyConsistent(nullptr, info)) { + return GetProfilingInfo(); + } else { + return info; + } +} + } // namespace art |