OLD | NEW |
---|---|
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 23 matching lines...) Expand all Loading... | |
34 #include "heap-profiler.h" | 34 #include "heap-profiler.h" |
35 #include "hydrogen.h" | 35 #include "hydrogen.h" |
36 #include "lithium-allocator.h" | 36 #include "lithium-allocator.h" |
37 #include "log.h" | 37 #include "log.h" |
38 #include "runtime-profiler.h" | 38 #include "runtime-profiler.h" |
39 #include "serialize.h" | 39 #include "serialize.h" |
40 | 40 |
41 namespace v8 { | 41 namespace v8 { |
42 namespace internal { | 42 namespace internal { |
43 | 43 |
44 static Mutex* init_once_mutex = OS::CreateMutex(); | |
45 static bool init_once_called = false; | |
46 | |
44 bool V8::is_running_ = false; | 47 bool V8::is_running_ = false; |
45 bool V8::has_been_setup_ = false; | 48 bool V8::has_been_setup_ = false; |
46 bool V8::has_been_disposed_ = false; | 49 bool V8::has_been_disposed_ = false; |
47 bool V8::has_fatal_error_ = false; | 50 bool V8::has_fatal_error_ = false; |
48 bool V8::use_crankshaft_ = true; | 51 bool V8::use_crankshaft_ = true; |
49 | 52 |
50 | 53 |
51 bool V8::Initialize(Deserializer* des) { | 54 bool V8::Initialize(Deserializer* des) { |
55 InitializeOncePerProcess(); | |
56 | |
52 // The current thread may not yet had entered an isolate to run. | 57 // The current thread may not yet had entered an isolate to run. |
53 // Note the Isolate::Current() may be non-null because for various | 58 // Note the Isolate::Current() may be non-null because for various |
54 // initialization purposes an initializing thread may be assigned an isolate | 59 // initialization purposes an initializing thread may be assigned an isolate |
55 // but not actually enter it. | 60 // but not actually enter it. |
56 if (i::Isolate::CurrentPerIsolateThreadData() == NULL) { | 61 if (i::Isolate::CurrentPerIsolateThreadData() == NULL) { |
57 i::Isolate::EnterDefaultIsolate(); | 62 i::Isolate::EnterDefaultIsolate(); |
58 } | 63 } |
59 | 64 |
60 ASSERT(i::Isolate::CurrentPerIsolateThreadData() != NULL); | 65 ASSERT(i::Isolate::CurrentPerIsolateThreadData() != NULL); |
61 ASSERT(i::Isolate::CurrentPerIsolateThreadData()->thread_id() == | 66 ASSERT(i::Isolate::CurrentPerIsolateThreadData()->thread_id() == |
62 i::Thread::GetThreadLocalInt(i::Isolate::thread_id_key())); | 67 i::Thread::GetThreadLocalInt(i::Isolate::thread_id_key())); |
63 ASSERT(i::Isolate::CurrentPerIsolateThreadData()->isolate() == | 68 ASSERT(i::Isolate::CurrentPerIsolateThreadData()->isolate() == |
64 i::Isolate::Current()); | 69 i::Isolate::Current()); |
65 | 70 |
66 if (IsDead()) return false; | 71 if (IsDead()) return false; |
67 | 72 |
68 Isolate* isolate = Isolate::Current(); | 73 Isolate* isolate = Isolate::Current(); |
69 if (isolate->IsInitialized()) return true; | 74 if (isolate->IsInitialized()) return true; |
70 | 75 |
71 #if defined(V8_TARGET_ARCH_ARM) && !defined(USE_ARM_EABI) | |
72 use_crankshaft_ = false; | |
73 #else | |
74 use_crankshaft_ = FLAG_crankshaft; | |
75 #endif | |
76 | |
77 // Peephole optimization might interfere with deoptimization. | |
78 FLAG_peephole_optimization = !use_crankshaft_; | |
79 | |
80 is_running_ = true; | 76 is_running_ = true; |
81 has_been_setup_ = true; | 77 has_been_setup_ = true; |
82 has_fatal_error_ = false; | 78 has_fatal_error_ = false; |
83 has_been_disposed_ = false; | 79 has_been_disposed_ = false; |
84 | 80 |
85 return isolate->Init(des); | 81 return isolate->Init(des); |
86 } | 82 } |
87 | 83 |
88 | 84 |
89 void V8::SetFatalError() { | 85 void V8::SetFatalError() { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
181 // by computing: | 177 // by computing: |
182 // ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)). | 178 // ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)). |
183 const double binary_million = 1048576.0; | 179 const double binary_million = 1048576.0; |
184 r->double_value = binary_million; | 180 r->double_value = binary_million; |
185 r->uint64_t_value |= random_bits; | 181 r->uint64_t_value |= random_bits; |
186 r->double_value -= binary_million; | 182 r->double_value -= binary_million; |
187 | 183 |
188 return heap_number; | 184 return heap_number; |
189 } | 185 } |
190 | 186 |
187 | |
188 void V8::InitializeOncePerProcess() { | |
189 ScopedLock lock(init_once_mutex); | |
190 if (init_once_called) return; | |
191 init_once_called = true; | |
192 | |
193 // Setup the platform OS support. | |
194 OS::Setup(); | |
195 | |
196 #if defined(V8_TARGET_ARCH_ARM) && !defined(USE_ARM_EABI) | |
197 use_crankshaft_ = false; | |
198 #else | |
199 use_crankshaft_ = FLAG_crankshaft; | |
200 #endif | |
201 | |
202 if (Serializer::enabled()) { | |
203 use_crankshaft_ = false; | |
204 } | |
205 | |
206 CPU::Setup(); | |
207 if (!CPU::SupportsCrankshaft()) { | |
208 use_crankshaft_ = false; | |
209 } | |
210 | |
211 // Peephole optimization might interfere with deoptimization. | |
Mads Ager (chromium)
2011/03/31 13:48:21
This is fine. Maybe we should file a bug report on
| |
212 FLAG_peephole_optimization = !use_crankshaft_; | |
213 } | |
214 | |
191 } } // namespace v8::internal | 215 } } // namespace v8::internal |
OLD | NEW |