| 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 | 
|---|