Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: src/snapshot/serialize.cc

Issue 1667693002: [interpreter] do not serialize bytecode for snapshot. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: turn flag off Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/snapshot/serialize.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/snapshot/serialize.h" 5 #include "src/snapshot/serialize.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/platform/platform.h" 9 #include "src/base/platform/platform.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 1662 matching lines...) Expand 10 before | Expand all | Expand 10 after
1673 "BackRefWithSkip"); 1673 "BackRefWithSkip");
1674 sink_->PutInt(skip, "BackRefSkipDistance"); 1674 sink_->PutInt(skip, "BackRefSkipDistance");
1675 } 1675 }
1676 PutBackReference(obj, back_reference); 1676 PutBackReference(obj, back_reference);
1677 } 1677 }
1678 return true; 1678 return true;
1679 } 1679 }
1680 return false; 1680 return false;
1681 } 1681 }
1682 1682
1683
1684 StartupSerializer::StartupSerializer(Isolate* isolate, SnapshotByteSink* sink) 1683 StartupSerializer::StartupSerializer(Isolate* isolate, SnapshotByteSink* sink)
1685 : Serializer(isolate, sink), root_index_wave_front_(0) { 1684 : Serializer(isolate, sink),
1685 root_index_wave_front_(0),
1686 serializing_builtins_(false) {
1686 // Clear the cache of objects used by the partial snapshot. After the 1687 // Clear the cache of objects used by the partial snapshot. After the
1687 // strong roots have been serialized we can create a partial snapshot 1688 // strong roots have been serialized we can create a partial snapshot
1688 // which will repopulate the cache with objects needed by that partial 1689 // which will repopulate the cache with objects needed by that partial
1689 // snapshot. 1690 // snapshot.
1690 isolate->partial_snapshot_cache()->Clear(); 1691 isolate->partial_snapshot_cache()->Clear();
1691 InitializeCodeAddressMap(); 1692 InitializeCodeAddressMap();
1692 } 1693 }
1693 1694
1694 1695
1695 void StartupSerializer::SerializeObject(HeapObject* obj, HowToCode how_to_code, 1696 void StartupSerializer::SerializeObject(HeapObject* obj, HowToCode how_to_code,
1696 WhereToPoint where_to_point, int skip) { 1697 WhereToPoint where_to_point, int skip) {
1697 DCHECK(!obj->IsJSFunction()); 1698 DCHECK(!obj->IsJSFunction());
1698 1699
1700 if (obj->IsCode()) {
1701 Code* code = Code::cast(obj);
1702 // If the function code is compiled (either as native code or bytecode),
1703 // replace it with lazy-compile builtin. Only exception is when we are
1704 // serializing the canonical interpreter-entry-trampoline builtin.
1705 if (code->kind() == Code::FUNCTION ||
1706 (!serializing_builtins_ && code->is_interpreter_entry_trampoline())) {
1707 obj = isolate()->builtins()->builtin(Builtins::kCompileLazy);
1708 }
1709 } else if (obj->IsBytecodeArray()) {
1710 obj = isolate()->heap()->undefined_value();
1711 }
1712
1699 int root_index = root_index_map_.Lookup(obj); 1713 int root_index = root_index_map_.Lookup(obj);
1700 // We can only encode roots as such if it has already been serialized. 1714 // We can only encode roots as such if it has already been serialized.
1701 // That applies to root indices below the wave front. 1715 // That applies to root indices below the wave front.
1702 if (root_index != RootIndexMap::kInvalidRootIndex && 1716 if (root_index != RootIndexMap::kInvalidRootIndex &&
1703 root_index < root_index_wave_front_) { 1717 root_index < root_index_wave_front_) {
1704 PutRoot(root_index, obj, how_to_code, where_to_point, skip); 1718 PutRoot(root_index, obj, how_to_code, where_to_point, skip);
1705 return; 1719 return;
1706 } 1720 }
1707 1721
1708 if (obj->IsCode() && Code::cast(obj)->kind() == Code::FUNCTION) {
1709 obj = isolate()->builtins()->builtin(Builtins::kCompileLazy);
1710 }
1711
1712 if (SerializeKnownObject(obj, how_to_code, where_to_point, skip)) return; 1722 if (SerializeKnownObject(obj, how_to_code, where_to_point, skip)) return;
1713 1723
1714 FlushSkip(skip); 1724 FlushSkip(skip);
1715 1725
1716 // Object has not yet been serialized. Serialize it here. 1726 // Object has not yet been serialized. Serialize it here.
1717 ObjectSerializer object_serializer(this, obj, sink_, how_to_code, 1727 ObjectSerializer object_serializer(this, obj, sink_, how_to_code,
1718 where_to_point); 1728 where_to_point);
1719 object_serializer.Serialize(); 1729 object_serializer.Serialize();
1720 } 1730 }
1721 1731
1722 1732
1723 void StartupSerializer::SerializeWeakReferencesAndDeferred() { 1733 void StartupSerializer::SerializeWeakReferencesAndDeferred() {
1724 // This phase comes right after the serialization (of the snapshot). 1734 // This phase comes right after the serialization (of the snapshot).
1725 // After we have done the partial serialization the partial snapshot cache 1735 // After we have done the partial serialization the partial snapshot cache
1726 // will contain some references needed to decode the partial snapshot. We 1736 // will contain some references needed to decode the partial snapshot. We
1727 // add one entry with 'undefined' which is the sentinel that the deserializer 1737 // add one entry with 'undefined' which is the sentinel that the deserializer
1728 // uses to know it is done deserializing the array. 1738 // uses to know it is done deserializing the array.
1729 Object* undefined = isolate()->heap()->undefined_value(); 1739 Object* undefined = isolate()->heap()->undefined_value();
1730 VisitPointer(&undefined); 1740 VisitPointer(&undefined);
1731 isolate()->heap()->IterateWeakRoots(this, VISIT_ALL); 1741 isolate()->heap()->IterateWeakRoots(this, VISIT_ALL);
1732 SerializeDeferredObjects(); 1742 SerializeDeferredObjects();
1733 Pad(); 1743 Pad();
1734 } 1744 }
1735 1745
1746 void StartupSerializer::Synchronize(VisitorSynchronization::SyncTag tag) {
1747 // We expect the builtins tag after builtins have been serialized.
1748 DCHECK(!serializing_builtins_ || tag == VisitorSynchronization::kBuiltins);
1749 serializing_builtins_ = (tag == VisitorSynchronization::kHandleScope);
1750 }
1736 1751
1737 void Serializer::PutRoot(int root_index, 1752 void Serializer::PutRoot(int root_index,
1738 HeapObject* object, 1753 HeapObject* object,
1739 SerializerDeserializer::HowToCode how_to_code, 1754 SerializerDeserializer::HowToCode how_to_code,
1740 SerializerDeserializer::WhereToPoint where_to_point, 1755 SerializerDeserializer::WhereToPoint where_to_point,
1741 int skip) { 1756 int skip) {
1742 if (FLAG_trace_serializer) { 1757 if (FLAG_trace_serializer) {
1743 PrintF(" Encoding root %d:", root_index); 1758 PrintF(" Encoding root %d:", root_index);
1744 object->ShortPrint(); 1759 object->ShortPrint();
1745 PrintF("\n"); 1760 PrintF("\n");
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after
2820 SerializedCodeData* scd = new SerializedCodeData(cached_data); 2835 SerializedCodeData* scd = new SerializedCodeData(cached_data);
2821 SanityCheckResult r = scd->SanityCheck(isolate, source); 2836 SanityCheckResult r = scd->SanityCheck(isolate, source);
2822 if (r == CHECK_SUCCESS) return scd; 2837 if (r == CHECK_SUCCESS) return scd;
2823 cached_data->Reject(); 2838 cached_data->Reject();
2824 source->GetIsolate()->counters()->code_cache_reject_reason()->AddSample(r); 2839 source->GetIsolate()->counters()->code_cache_reject_reason()->AddSample(r);
2825 delete scd; 2840 delete scd;
2826 return NULL; 2841 return NULL;
2827 } 2842 }
2828 } // namespace internal 2843 } // namespace internal
2829 } // namespace v8 2844 } // namespace v8
OLDNEW
« no previous file with comments | « src/snapshot/serialize.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698