stack_trace_element.h revision b0fa5dc7769c1e054032f39de0a3f6d6dd06f8cf
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ART_RUNTIME_MIRROR_STACK_TRACE_ELEMENT_H_ 18#define ART_RUNTIME_MIRROR_STACK_TRACE_ELEMENT_H_ 19 20#include "object.h" 21#include "object_callbacks.h" 22 23namespace art { 24 25template<class T> class SirtRef; 26struct StackTraceElementOffsets; 27 28namespace mirror { 29 30// C++ mirror of java.lang.StackTraceElement 31class MANAGED StackTraceElement : public Object { 32 public: 33 String* GetDeclaringClass() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 34 return GetFieldObject<String>(OFFSET_OF_OBJECT_MEMBER(StackTraceElement, declaring_class_)); 35 } 36 37 String* GetMethodName() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 38 return GetFieldObject<String>(OFFSET_OF_OBJECT_MEMBER(StackTraceElement, method_name_)); 39 } 40 41 String* GetFileName() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 42 return GetFieldObject<String>(OFFSET_OF_OBJECT_MEMBER(StackTraceElement, file_name_)); 43 } 44 45 int32_t GetLineNumber() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 46 return GetField32(OFFSET_OF_OBJECT_MEMBER(StackTraceElement, line_number_)); 47 } 48 49 static StackTraceElement* Alloc(Thread* self, 50 SirtRef<String>& declaring_class, 51 SirtRef<String>& method_name, 52 SirtRef<String>& file_name, 53 int32_t line_number) 54 SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); 55 56 static void SetClass(Class* java_lang_StackTraceElement); 57 static void ResetClass(); 58 static void VisitRoots(RootCallback* callback, void* arg) 59 SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); 60 61 private: 62 // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses". 63 HeapReference<String> declaring_class_; 64 HeapReference<String> file_name_; 65 HeapReference<String> method_name_; 66 int32_t line_number_; 67 68 template<bool kTransactionActive> 69 void Init(SirtRef<String>& declaring_class, SirtRef<String>& method_name, 70 SirtRef<String>& file_name, int32_t line_number) 71 SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); 72 73 static Class* GetStackTraceElement() { 74 DCHECK(java_lang_StackTraceElement_ != NULL); 75 return java_lang_StackTraceElement_; 76 } 77 78 static Class* java_lang_StackTraceElement_; 79 80 friend struct art::StackTraceElementOffsets; // for verifying offset information 81 DISALLOW_IMPLICIT_CONSTRUCTORS(StackTraceElement); 82}; 83 84} // namespace mirror 85} // namespace art 86 87#endif // ART_RUNTIME_MIRROR_STACK_TRACE_ELEMENT_H_ 88