runtime.h revision ffe6736397d17457188727510f0a2953f69a383a
16b6b5f0e67ce03f38223a525612955663bc1799bCarl Shapiro// Copyright 2011 Google Inc. All Rights Reserved. 27b21670581d13db32f1384a3b2692bcfc8f57320Carl Shapiro 31fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro#ifndef ART_SRC_RUNTIME_H_ 41fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro#define ART_SRC_RUNTIME_H_ 56b6b5f0e67ce03f38223a525612955663bc1799bCarl Shapiro 661e019d291583029c01b61b93bea750f2b663c37Carl Shapiro#include "src/globals.h" 761e019d291583029c01b61b93bea750f2b663c37Carl Shapiro#include "src/macros.h" 861e019d291583029c01b61b93bea750f2b663c37Carl Shapiro#include "src/stringpiece.h" 9b557353b22c728eecbd1c68593b482622c7782a8Carl Shapiro 106b6b5f0e67ce03f38223a525612955663bc1799bCarl Shapironamespace art { 117b21670581d13db32f1384a3b2692bcfc8f57320Carl Shapiro 1261e019d291583029c01b61b93bea750f2b663c37Carl Shapiroclass ClassLinker; 1361e019d291583029c01b61b93bea750f2b663c37Carl Shapiroclass Heap; 1461e019d291583029c01b61b93bea750f2b663c37Carl Shapiroclass ThreadList; 1561e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 161fb8620309a4e94d11879aabc33364acfa733904Carl Shapiroclass Runtime { 177b21670581d13db32f1384a3b2692bcfc8f57320Carl Shapiro public: 1861e019d291583029c01b61b93bea750f2b663c37Carl Shapiro // Creates and initializes a new runtime. 1961e019d291583029c01b61b93bea750f2b663c37Carl Shapiro static Runtime* Create(); 2061e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 2161e019d291583029c01b61b93bea750f2b663c37Carl Shapiro // Compiles a dex file. 2261e019d291583029c01b61b93bea750f2b663c37Carl Shapiro static void Compile(const StringPiece& filename); 231fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro 24ffe6736397d17457188727510f0a2953f69a383aElliott Hughes // Aborts semi-cleanly. Used in the implementation of LOG(FATAL), which most 25ffe6736397d17457188727510f0a2953f69a383aElliott Hughes // callers should prefer. 26ffe6736397d17457188727510f0a2953f69a383aElliott Hughes // This isn't marked ((noreturn)) because then gcc will merge multiple calls 27ffe6736397d17457188727510f0a2953f69a383aElliott Hughes // in a single function together. This reduces code size slightly, but means 28ffe6736397d17457188727510f0a2953f69a383aElliott Hughes // that the native stack trace we get may point at the wrong call site. 29ffe6736397d17457188727510f0a2953f69a383aElliott Hughes static void Abort(const char* file, int line); 30ffe6736397d17457188727510f0a2953f69a383aElliott Hughes 3161e019d291583029c01b61b93bea750f2b663c37Carl Shapiro // Attaches the current native thread to the runtime. 3261e019d291583029c01b61b93bea750f2b663c37Carl Shapiro bool AttachCurrentThread(); 33b557353b22c728eecbd1c68593b482622c7782a8Carl Shapiro 3461e019d291583029c01b61b93bea750f2b663c37Carl Shapiro // Detaches the current native thread from the runtime. 3561e019d291583029c01b61b93bea750f2b663c37Carl Shapiro bool DetachCurrentThread(); 3661e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 3761e019d291583029c01b61b93bea750f2b663c37Carl Shapiro ~Runtime(); 38b557353b22c728eecbd1c68593b482622c7782a8Carl Shapiro 39b557353b22c728eecbd1c68593b482622c7782a8Carl Shapiro private: 40ffe6736397d17457188727510f0a2953f69a383aElliott Hughes static void PlatformAbort(const char*, int); 41ffe6736397d17457188727510f0a2953f69a383aElliott Hughes 4261e019d291583029c01b61b93bea750f2b663c37Carl Shapiro Runtime() : class_linker_(NULL), heap_(NULL), thread_list_(NULL) {} 4361e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 4461e019d291583029c01b61b93bea750f2b663c37Carl Shapiro // Initializes a new uninitialized runtime. 4561e019d291583029c01b61b93bea750f2b663c37Carl Shapiro bool Init(); 4661e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 4761e019d291583029c01b61b93bea750f2b663c37Carl Shapiro ClassLinker* class_linker_; 4861e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 4961e019d291583029c01b61b93bea750f2b663c37Carl Shapiro Heap* heap_; 5061e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 51b557353b22c728eecbd1c68593b482622c7782a8Carl Shapiro ThreadList* thread_list_; 5261e019d291583029c01b61b93bea750f2b663c37Carl Shapiro 5361e019d291583029c01b61b93bea750f2b663c37Carl Shapiro DISALLOW_COPY_AND_ASSIGN(Runtime); 547b21670581d13db32f1384a3b2692bcfc8f57320Carl Shapiro}; 557b21670581d13db32f1384a3b2692bcfc8f57320Carl Shapiro 566b6b5f0e67ce03f38223a525612955663bc1799bCarl Shapiro} // namespace art 577b21670581d13db32f1384a3b2692bcfc8f57320Carl Shapiro 581fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro#endif // ART_SRC_RUNTIME_H_ 59