| 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 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 class SnapshotByteSink { | 282 class SnapshotByteSink { |
| 283 public: | 283 public: |
| 284 virtual ~SnapshotByteSink() { } | 284 virtual ~SnapshotByteSink() { } |
| 285 virtual void Put(int byte, const char* description) = 0; | 285 virtual void Put(int byte, const char* description) = 0; |
| 286 virtual void PutSection(int byte, const char* description) { | 286 virtual void PutSection(int byte, const char* description) { |
| 287 Put(byte, description); | 287 Put(byte, description); |
| 288 } | 288 } |
| 289 void PutInt(uintptr_t integer, const char* description); | 289 void PutInt(uintptr_t integer, const char* description); |
| 290 }; | 290 }; |
| 291 | 291 |
| 292 class SerializerPrivateData; |
| 293 |
| 294 class SerializerData { |
| 295 public: |
| 296 SerializerPrivateData& private_data_; |
| 297 private: |
| 298 bool serialization_enabled_; |
| 299 // Did we already make use of the fact that serialization was not enabled? |
| 300 bool too_late_to_enable_now_; |
| 301 |
| 302 SerializerData(); |
| 303 ~SerializerData(); |
| 304 |
| 305 friend class V8Context; |
| 306 friend class Serializer; |
| 307 DISALLOW_COPY_AND_ASSIGN(SerializerData); |
| 308 }; |
| 292 | 309 |
| 293 class Serializer : public SerDes { | 310 class Serializer : public SerDes { |
| 294 public: | 311 public: |
| 295 explicit Serializer(SnapshotByteSink* sink); | 312 explicit Serializer(SnapshotByteSink* sink); |
| 296 // Serialize the current state of the heap. This operation destroys the | 313 // Serialize the current state of the heap. This operation destroys the |
| 297 // heap contents. | 314 // heap contents. |
| 298 void Serialize(); | 315 void Serialize(); |
| 299 void VisitPointers(Object** start, Object** end); | 316 void VisitPointers(Object** start, Object** end); |
| 300 | 317 |
| 301 static void Enable() { | 318 static void Enable() { |
| 302 if (!serialization_enabled_) { | 319 SerializerData& serializer_data = v8_context()->serializer_data_; |
| 303 ASSERT(!too_late_to_enable_now_); | 320 if (!serializer_data.serialization_enabled_) { |
| 321 ASSERT(!serializer_data.too_late_to_enable_now_); |
| 304 } | 322 } |
| 305 serialization_enabled_ = true; | 323 serializer_data.serialization_enabled_ = true; |
| 306 } | 324 } |
| 307 | 325 |
| 308 static void Disable() { serialization_enabled_ = false; } | 326 static void Disable() { |
| 327 v8_context()->serializer_data_.serialization_enabled_ = false; |
| 328 } |
| 309 // Call this when you have made use of the fact that there is no serialization | 329 // Call this when you have made use of the fact that there is no serialization |
| 310 // going on. | 330 // going on. |
| 311 static void TooLateToEnableNow() { too_late_to_enable_now_ = true; } | 331 static void TooLateToEnableNow() { |
| 312 static bool enabled() { return serialization_enabled_; } | 332 v8_context()->serializer_data_.too_late_to_enable_now_ = true; |
| 333 } |
| 334 static bool enabled() { |
| 335 return v8_context()->serializer_data_.serialization_enabled_; |
| 336 } |
| 313 #ifdef DEBUG | 337 #ifdef DEBUG |
| 314 virtual void Synchronize(const char* tag); | 338 virtual void Synchronize(const char* tag); |
| 315 #endif | 339 #endif |
| 316 | 340 |
| 317 private: | 341 private: |
| 318 enum ReferenceRepresentation { | 342 enum ReferenceRepresentation { |
| 319 TAGGED_REPRESENTATION, // A tagged object reference. | 343 TAGGED_REPRESENTATION, // A tagged object reference. |
| 320 CODE_TARGET_REPRESENTATION // A reference to first instruction in target. | 344 CODE_TARGET_REPRESENTATION // A reference to first instruction in target. |
| 321 }; | 345 }; |
| 322 class ObjectSerializer : public ObjectVisitor { | 346 class ObjectSerializer : public ObjectVisitor { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 } | 399 } |
| 376 | 400 |
| 377 // Keep track of the fullness of each space in order to generate | 401 // Keep track of the fullness of each space in order to generate |
| 378 // relative addresses for back references. Large objects are | 402 // relative addresses for back references. Large objects are |
| 379 // just numbered sequentially since relative addresses make no | 403 // just numbered sequentially since relative addresses make no |
| 380 // sense in large object space. | 404 // sense in large object space. |
| 381 int fullness_[LAST_SPACE + 1]; | 405 int fullness_[LAST_SPACE + 1]; |
| 382 SnapshotByteSink* sink_; | 406 SnapshotByteSink* sink_; |
| 383 int current_root_index_; | 407 int current_root_index_; |
| 384 ExternalReferenceEncoder* external_reference_encoder_; | 408 ExternalReferenceEncoder* external_reference_encoder_; |
| 385 static bool serialization_enabled_; | |
| 386 // Did we already make use of the fact that serialization was not enabled? | |
| 387 static bool too_late_to_enable_now_; | |
| 388 | |
| 389 friend class ObjectSerializer; | 409 friend class ObjectSerializer; |
| 390 friend class Deserializer; | 410 friend class Deserializer; |
| 391 | 411 |
| 392 DISALLOW_COPY_AND_ASSIGN(Serializer); | 412 DISALLOW_COPY_AND_ASSIGN(Serializer); |
| 393 }; | 413 }; |
| 394 | 414 |
| 395 } } // namespace v8::internal | 415 } } // namespace v8::internal |
| 396 | 416 |
| 397 #endif // V8_SERIALIZE_H_ | 417 #endif // V8_SERIALIZE_H_ |
| OLD | NEW |