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