1// Copyright 2006-2008 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6//     * Redistributions of source code must retain the above copyright
7//       notice, this list of conditions and the following disclaimer.
8//     * Redistributions in binary form must reproduce the above
9//       copyright notice, this list of conditions and the following
10//       disclaimer in the documentation and/or other materials provided
11//       with the distribution.
12//     * Neither the name of Google Inc. nor the names of its
13//       contributors may be used to endorse or promote products derived
14//       from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28#include "isolate.h"
29
30#ifndef V8_SNAPSHOT_H_
31#define V8_SNAPSHOT_H_
32
33namespace v8 {
34namespace internal {
35
36class Snapshot {
37 public:
38  // Initialize the VM from the given snapshot file. If snapshot_file is
39  // NULL, use the internal snapshot instead. Returns false if no snapshot
40  // could be found.
41  static bool Initialize(const char* snapshot_file = NULL);
42
43  static bool HaveASnapshotToStartFrom();
44
45  // Create a new context using the internal partial snapshot.
46  static Handle<Context> NewContextFromSnapshot();
47
48  // Returns whether or not the snapshot is enabled.
49  static bool IsEnabled() { return size_ != 0; }
50
51  // Write snapshot to the given file. Returns true if snapshot was written
52  // successfully.
53  static bool WriteToFile(const char* snapshot_file);
54
55  static const byte* data() { return data_; }
56  static int size() { return size_; }
57  static int raw_size() { return raw_size_; }
58  static void set_raw_data(const byte* raw_data) {
59    raw_data_ = raw_data;
60  }
61  static const byte* context_data() { return context_data_; }
62  static int context_size() { return context_size_; }
63  static int context_raw_size() { return context_raw_size_; }
64  static void set_context_raw_data(
65      const byte* context_raw_data) {
66    context_raw_data_ = context_raw_data;
67  }
68
69 private:
70  static const byte data_[];
71  static const byte* raw_data_;
72  static const byte context_data_[];
73  static const byte* context_raw_data_;
74  static const int new_space_used_;
75  static const int pointer_space_used_;
76  static const int data_space_used_;
77  static const int code_space_used_;
78  static const int map_space_used_;
79  static const int cell_space_used_;
80  static const int property_cell_space_used_;
81  static const int context_new_space_used_;
82  static const int context_pointer_space_used_;
83  static const int context_data_space_used_;
84  static const int context_code_space_used_;
85  static const int context_map_space_used_;
86  static const int context_cell_space_used_;
87  static const int context_property_cell_space_used_;
88  static const int size_;
89  static const int raw_size_;
90  static const int context_size_;
91  static const int context_raw_size_;
92
93  static void ReserveSpaceForLinkedInSnapshot(Deserializer* deserializer);
94
95  DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot);
96};
97
98} }  // namespace v8::internal
99
100#endif  // V8_SNAPSHOT_H_
101