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

Side by Side Diff: src/snapshot/natives.h

Issue 2807023003: [snapshot] encode resource before serializing. (Closed)
Patch Set: fix Created 3 years, 8 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/deserializer.cc ('k') | src/snapshot/natives-common.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 #ifndef V8_SNAPSHOT_NATIVES_H_ 5 #ifndef V8_SNAPSHOT_NATIVES_H_
6 #define V8_SNAPSHOT_NATIVES_H_ 6 #define V8_SNAPSHOT_NATIVES_H_
7 7
8 #include "include/v8.h"
8 #include "src/objects.h" 9 #include "src/objects.h"
9 #include "src/vector.h" 10 #include "src/vector.h"
10 11
11 namespace v8 { class StartupData; } // Forward declaration. 12 namespace v8 { class StartupData; } // Forward declaration.
12 13
13 namespace v8 { 14 namespace v8 {
14 namespace internal { 15 namespace internal {
15 16
16 enum NativeType { 17 enum NativeType {
17 CORE, 18 CORE,
(...skipping 21 matching lines...) Expand all
39 static int GetDebuggerCount(); 40 static int GetDebuggerCount();
40 41
41 // These are used to access built-in scripts. The debugger implementation 42 // These are used to access built-in scripts. The debugger implementation
42 // scripts have an index in the interval [0, GetDebuggerCount()). The 43 // scripts have an index in the interval [0, GetDebuggerCount()). The
43 // non-debugger scripts have an index in the interval [GetDebuggerCount(), 44 // non-debugger scripts have an index in the interval [GetDebuggerCount(),
44 // GetNativesCount()). 45 // GetNativesCount()).
45 static int GetIndex(const char* name); 46 static int GetIndex(const char* name);
46 static Vector<const char> GetScriptSource(int index); 47 static Vector<const char> GetScriptSource(int index);
47 static Vector<const char> GetScriptName(int index); 48 static Vector<const char> GetScriptName(int index);
48 static Vector<const char> GetScriptsSource(); 49 static Vector<const char> GetScriptsSource();
49
50 // The following methods are implemented in natives-common.cc:
51
52 static FixedArray* GetSourceCache(Heap* heap);
53 }; 50 };
54 51
55 typedef NativesCollection<CORE> Natives; 52 typedef NativesCollection<CORE> Natives;
56 typedef NativesCollection<EXTRAS> ExtraNatives; 53 typedef NativesCollection<EXTRAS> ExtraNatives;
57 typedef NativesCollection<EXPERIMENTAL_EXTRAS> ExperimentalExtraNatives; 54 typedef NativesCollection<EXPERIMENTAL_EXTRAS> ExperimentalExtraNatives;
58 55
59 56
60 #ifdef V8_USE_EXTERNAL_STARTUP_DATA 57 #ifdef V8_USE_EXTERNAL_STARTUP_DATA
61 // Used for reading the natives at runtime. Implementation in natives-empty.cc 58 // Used for reading the natives at runtime. Implementation in natives-empty.cc
62 void SetNativesFromFile(StartupData* natives_blob); 59 void SetNativesFromFile(StartupData* natives_blob);
63 void ReadNatives(); 60 void ReadNatives();
64 void DisposeNatives(); 61 void DisposeNatives();
65 #endif 62 #endif
66 63
64 class NativesExternalStringResource final
65 : public v8::String::ExternalOneByteStringResource {
66 public:
67 NativesExternalStringResource(NativeType type, int index);
68
69 const char* data() const override { return data_; }
70 size_t length() const override { return length_; }
71
72 v8::String::ExternalOneByteStringResource* EncodeForSerialization() const {
73 DCHECK(type_ == CORE || type_ == EXTRAS);
74 intptr_t val = (index_ << 1) | ((type_ == CORE) ? 0 : 1);
75 val = val << kPointerSizeLog2; // Pointer align.
76 return reinterpret_cast<v8::String::ExternalOneByteStringResource*>(val);
77 }
78
79 // Decode from serialization.
80 static NativesExternalStringResource* DecodeForDeserialization(
81 const v8::String::ExternalOneByteStringResource* encoded) {
82 intptr_t val = reinterpret_cast<intptr_t>(encoded) >> kPointerSizeLog2;
83 NativeType type = (val & 1) ? EXTRAS : CORE;
84 int index = static_cast<int>(val >> 1);
85 return new NativesExternalStringResource(type, index);
86 }
87
88 private:
89 const char* data_;
90 size_t length_;
91 NativeType type_;
92 int index_;
93 };
94
67 } // namespace internal 95 } // namespace internal
68 } // namespace v8 96 } // namespace v8
69 97
70 #endif // V8_SNAPSHOT_NATIVES_H_ 98 #endif // V8_SNAPSHOT_NATIVES_H_
OLDNEW
« no previous file with comments | « src/snapshot/deserializer.cc ('k') | src/snapshot/natives-common.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698