Commit d4c6c756 authored by Yang Guo's avatar Yang Guo Committed by Commit Bot

[heap] remove heap init from shipping binary.

This reduces the arm32 binary by around 20kB.

R=jkummerow@chromium.org, mstarzinger@chromium.org

Bug: v8:6055
Change-Id: If9098e49793b29dceb8292aff6f668ca28a07728
Reviewed-on: https://chromium-review.googlesource.com/652427Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
Commit-Queue: Yang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#47863}
parent eeadb48c
......@@ -854,7 +854,7 @@ source_set("v8_maybe_snapshot") {
} else {
# Ignore v8_use_external_startup_data setting if no snapshot is used.
public_deps = [
":v8_builtins_setup",
":v8_init",
":v8_nosnapshot",
]
}
......@@ -954,7 +954,7 @@ if (v8_use_external_startup_data) {
}
}
v8_source_set("v8_builtins_generators") {
v8_source_set("v8_initializers") {
visibility = [
":*",
"test/cctest:*",
......@@ -1012,6 +1012,7 @@ v8_source_set("v8_builtins_generators") {
"src/builtins/builtins-utils-gen.h",
"src/builtins/builtins-wasm-gen.cc",
"src/builtins/setup-builtins-internal.cc",
"src/heap/setup-heap-internal.cc",
"src/ic/accessor-assembler.cc",
"src/ic/accessor-assembler.h",
"src/ic/binary-op-assembler.cc",
......@@ -1089,11 +1090,11 @@ v8_source_set("v8_builtins_generators") {
configs = [ ":internal_config" ]
}
v8_source_set("v8_builtins_setup") {
v8_source_set("v8_init") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
deps = [
":v8_builtins_generators",
":v8_initializers",
]
sources = [
......@@ -2641,7 +2642,7 @@ if (current_toolchain == v8_snapshot_toolchain) {
deps = [
":v8_base",
":v8_builtins_setup",
":v8_init",
":v8_libbase",
":v8_libplatform",
":v8_nosnapshot",
......@@ -2754,7 +2755,7 @@ if (is_component_build) {
]
if (v8_use_snapshot) {
public_deps += [ ":v8_builtins_generators" ]
public_deps += [ ":v8_initializers" ]
}
configs = [ ":internal_config" ]
......@@ -2780,7 +2781,7 @@ if (is_component_build) {
]
if (v8_use_snapshot) {
public_deps += [ ":v8_builtins_generators" ]
public_deps += [ ":v8_initializers" ]
}
public_configs = [ ":external_config" ]
......
This diff is collapsed.
This diff is collapsed.
......@@ -2775,7 +2775,11 @@ bool Isolate::Init(StartupDeserializer* des) {
deoptimizer_data_ = new DeoptimizerData(heap()->memory_allocator());
const bool create_heap_objects = (des == NULL);
if (create_heap_objects && !heap_.CreateHeapObjects()) {
if (setup_delegate_ == nullptr) {
setup_delegate_ = new SetupIsolateDelegate(create_heap_objects);
}
if (!setup_delegate_->SetupHeap(&heap_)) {
V8::FatalProcessOutOfMemory("heap object creation");
return false;
}
......@@ -2788,10 +2792,7 @@ bool Isolate::Init(StartupDeserializer* des) {
InitializeThreadLocal();
bootstrapper_->Initialize(create_heap_objects);
if (setup_delegate_ == nullptr) {
setup_delegate_ = new SetupIsolateDelegate();
}
setup_delegate_->SetupBuiltins(this, create_heap_objects);
setup_delegate_->SetupBuiltins(this);
if (create_heap_objects) heap_.CreateFixedStubs();
if (FLAG_log_internal_timer_events) {
......@@ -2815,7 +2816,7 @@ bool Isolate::Init(StartupDeserializer* des) {
if (!create_heap_objects) des->DeserializeInto(this);
load_stub_cache_->Initialize();
store_stub_cache_->Initialize();
setup_delegate_->SetupInterpreter(interpreter_, create_heap_objects);
setup_delegate_->SetupInterpreter(interpreter_);
heap_.NotifyDeserializationComplete();
}
......
......@@ -12,14 +12,13 @@
namespace v8 {
namespace internal {
void SetupIsolateDelegate::SetupBuiltins(Isolate* isolate,
bool create_heap_objects) {
DCHECK(!create_heap_objects);
void SetupIsolateDelegate::SetupBuiltins(Isolate* isolate) {
DCHECK(!create_heap_objects_);
// No actual work to be done; builtins will be deserialized from the snapshot.
}
void SetupIsolateDelegate::SetupInterpreter(
interpreter::Interpreter* interpreter, bool create_heap_objects) {
interpreter::Interpreter* interpreter) {
#if defined(V8_USE_SNAPSHOT) && !defined(V8_USE_SNAPSHOT_WITH_UNWINDING_INFO)
if (FLAG_perf_prof_unwinding_info) {
OFStream os(stdout);
......@@ -31,5 +30,11 @@ void SetupIsolateDelegate::SetupInterpreter(
DCHECK(interpreter->IsDispatchTableInitialized());
}
bool SetupIsolateDelegate::SetupHeap(Heap* heap) {
DCHECK(!create_heap_objects_);
// No actual work to be done; heap will be deserialized from the snapshot.
return true;
}
} // namespace internal
} // namespace v8
......@@ -5,6 +5,7 @@
#include "src/setup-isolate.h"
#include "src/base/logging.h"
#include "src/heap/heap-inl.h"
#include "src/interpreter/interpreter.h"
#include "src/interpreter/setup-interpreter.h"
#include "src/isolate.h"
......@@ -12,9 +13,8 @@
namespace v8 {
namespace internal {
void SetupIsolateDelegate::SetupBuiltins(Isolate* isolate,
bool create_heap_objects) {
if (create_heap_objects) {
void SetupIsolateDelegate::SetupBuiltins(Isolate* isolate) {
if (create_heap_objects_) {
SetupBuiltinsInternal(isolate);
} else {
DCHECK(isolate->snapshot_available());
......@@ -22,13 +22,22 @@ void SetupIsolateDelegate::SetupBuiltins(Isolate* isolate,
}
void SetupIsolateDelegate::SetupInterpreter(
interpreter::Interpreter* interpreter, bool create_heap_objects) {
if (create_heap_objects) {
interpreter::Interpreter* interpreter) {
if (create_heap_objects_) {
interpreter::SetupInterpreter::InstallBytecodeHandlers(interpreter);
} else {
DCHECK(interpreter->IsDispatchTableInitialized());
}
}
bool SetupIsolateDelegate::SetupHeap(Heap* heap) {
if (create_heap_objects_) {
return SetupHeapInternal(heap);
} else {
DCHECK(heap->isolate()->snapshot_available());
return true;
}
}
} // namespace internal
} // namespace v8
......@@ -10,6 +10,7 @@ namespace internal {
class Builtins;
class Code;
class Heap;
class Isolate;
namespace interpreter {
......@@ -31,19 +32,25 @@ class Interpreter;
// linked in by the latter two Delegate implementations.
class SetupIsolateDelegate {
public:
SetupIsolateDelegate() {}
explicit SetupIsolateDelegate(bool create_heap_objects)
: create_heap_objects_(create_heap_objects) {}
virtual ~SetupIsolateDelegate() {}
virtual void SetupBuiltins(Isolate* isolate, bool create_heap_objects);
virtual void SetupBuiltins(Isolate* isolate);
virtual void SetupInterpreter(interpreter::Interpreter* interpreter,
bool create_heap_objects);
virtual void SetupInterpreter(interpreter::Interpreter* interpreter);
virtual bool SetupHeap(Heap* heap);
protected:
static void SetupBuiltinsInternal(Isolate* isolate);
static void AddBuiltin(Builtins* builtins, int index, Code* code);
static void PopulateWithPlaceholders(Isolate* isolate);
static void ReplacePlaceholders(Isolate* isolate);
static bool SetupHeapInternal(Heap* heap);
const bool create_heap_objects_;
};
} // namespace internal
......
......@@ -99,7 +99,7 @@
# The dependency on v8_base should come from a transitive
# dependency however the Android toolchain requires libv8_base.a
# to appear before libv8_snapshot.a so it's listed explicitly.
'dependencies': ['v8_base', 'v8_builtins_setup', 'v8_nosnapshot'],
'dependencies': ['v8_base', 'v8_init', 'v8_nosnapshot'],
}],
['v8_use_snapshot=="true" and v8_use_external_startup_data==0', {
# The dependency on v8_base should come from a transitive
......@@ -133,10 +133,10 @@
]
},
{
'target_name': 'v8_builtins_setup',
'target_name': 'v8_init',
'type': 'static_library',
'dependencies': [
'v8_builtins_generators',
'v8_initializers',
],
'variables': {
'optimize': 'max',
......@@ -157,7 +157,7 @@
],
},
{
'target_name': 'v8_builtins_generators',
'target_name': 'v8_initializers',
'type': 'static_library',
'dependencies': [
'v8_base',
......@@ -216,6 +216,7 @@
'builtins/builtins-utils-gen.h',
'builtins/builtins-wasm-gen.cc',
'builtins/setup-builtins-internal.cc',
'heap/setup-heap-internal.cc',
'ic/accessor-assembler.cc',
'ic/accessor-assembler.h',
'ic/binary-op-assembler.cc',
......@@ -2469,7 +2470,7 @@
'type': 'executable',
'dependencies': [
'v8_base',
'v8_builtins_setup',
'v8_init',
'v8_libbase',
'v8_libplatform',
'v8_nosnapshot',
......
......@@ -326,7 +326,7 @@ v8_executable("cctest") {
deps = [
":resources",
"../..:v8_builtins_generators",
"../..:v8_initializers",
"../..:v8_libbase",
"../..:v8_libplatform",
"../..:wasm_module_runner",
......
......@@ -433,7 +433,7 @@
'dependencies': ['../../src/v8.gyp:v8'],
}],
['v8_use_snapshot=="true"', {
'dependencies': ['../../src/v8.gyp:v8_builtins_generators'],
'dependencies': ['../../src/v8.gyp:v8_initializers'],
}],
],
},
......
......@@ -9,19 +9,25 @@
namespace v8 {
namespace internal {
void SetupIsolateDelegateForTests::SetupBuiltins(Isolate* isolate,
bool create_heap_objects) {
if (create_heap_objects) {
void SetupIsolateDelegateForTests::SetupBuiltins(Isolate* isolate) {
if (create_heap_objects_) {
SetupBuiltinsInternal(isolate);
}
}
void SetupIsolateDelegateForTests::SetupInterpreter(
interpreter::Interpreter* interpreter, bool create_heap_objects) {
if (create_heap_objects) {
interpreter::Interpreter* interpreter) {
if (create_heap_objects_) {
interpreter::SetupInterpreter::InstallBytecodeHandlers(interpreter);
}
}
bool SetupIsolateDelegateForTests::SetupHeap(Heap* heap) {
if (create_heap_objects_) {
return SetupHeapInternal(heap);
}
return true;
}
} // namespace internal
} // namespace v8
......@@ -12,13 +12,15 @@ namespace internal {
class SetupIsolateDelegateForTests : public SetupIsolateDelegate {
public:
SetupIsolateDelegateForTests() : SetupIsolateDelegate() {}
explicit SetupIsolateDelegateForTests(bool create_heap_objects)
: SetupIsolateDelegate(create_heap_objects) {}
virtual ~SetupIsolateDelegateForTests() {}
void SetupBuiltins(Isolate* isolate, bool create_heap_objects) override;
void SetupBuiltins(Isolate* isolate) override;
void SetupInterpreter(interpreter::Interpreter* interpreter,
bool create_heap_objects) override;
void SetupInterpreter(interpreter::Interpreter* interpreter) override;
bool SetupHeap(Heap* heap) override;
};
} // namespace internal
......
......@@ -69,7 +69,7 @@ class TestIsolate : public Isolate {
public:
static v8::Isolate* NewInitialized(bool enable_serializer) {
i::Isolate* isolate = new TestIsolate(enable_serializer);
isolate->setup_delegate_ = new SetupIsolateDelegateForTests();
isolate->setup_delegate_ = new SetupIsolateDelegateForTests(true);
v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate);
v8::Isolate::Scope isolate_scope(v8_isolate);
isolate->Init(NULL);
......@@ -80,14 +80,16 @@ class TestIsolate : public Isolate {
// the production Isolate class has one or the other behavior baked in.
static v8::Isolate* New(const v8::Isolate::CreateParams& params) {
i::Isolate* isolate = new TestIsolate(false);
isolate->setup_delegate_ = new SetupIsolateDelegateForTests();
bool create_heap_objects = params.snapshot_blob == nullptr;
isolate->setup_delegate_ =
new SetupIsolateDelegateForTests(create_heap_objects);
return v8::IsolateNewImpl(isolate, params);
}
explicit TestIsolate(bool enable_serializer) : Isolate(enable_serializer) {
set_array_buffer_allocator(CcTest::array_buffer_allocator());
}
void CreateSetupDelegateForTests() {
setup_delegate_ = new SetupIsolateDelegateForTests();
void SetDeserializeFromSnapshot() {
setup_delegate_ = new SetupIsolateDelegateForTests(false);
}
};
......@@ -164,7 +166,7 @@ v8::Isolate* InitializeFromBlob(StartupBlobs& blobs) {
TestIsolate* isolate = new TestIsolate(false);
v8_isolate = reinterpret_cast<v8::Isolate*>(isolate);
v8::Isolate::Scope isolate_scope(v8_isolate);
isolate->CreateSetupDelegateForTests();
isolate->SetDeserializeFromSnapshot();
isolate->Init(&deserializer);
}
return v8_isolate;
......
......@@ -266,7 +266,7 @@
],
}],
['v8_use_snapshot=="true"', {
'dependencies': ['../../src/v8.gyp:v8_builtins_generators'],
'dependencies': ['../../src/v8.gyp:v8_initializers'],
}],
],
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment