Index: src/d8.cc |
diff --git a/src/d8.cc b/src/d8.cc |
index 1d798b14bfa3ef3e059f117c1f44b916fdc821df..f4c7846f5273e6dc5106e047febf4814ad6693ae 100644 |
--- a/src/d8.cc |
+++ b/src/d8.cc |
@@ -26,8 +26,11 @@ |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-#include <stdlib.h> |
+#ifdef COMPRESS_STARTUP_DATA_BZ2 |
+#include <bzlib.h> |
+#endif |
#include <errno.h> |
+#include <stdlib.h> |
#include "v8.h" |
@@ -483,7 +486,44 @@ void Shell::AddHistogramSample(void* histogram, int sample) { |
} |
+#ifdef COMPRESS_STARTUP_DATA_BZ2 |
+class BZip2Decompressor : public v8::StartupDataDecompressor { |
+ public: |
+ virtual ~BZip2Decompressor() { } |
+ |
+ protected: |
+ virtual int DecompressData(char* raw_data, |
+ int* raw_data_size, |
+ const char* compressed_data, |
+ int compressed_data_size) { |
+ ASSERT_EQ(v8::StartupData::kBZip2, |
+ v8::V8::GetCompressedStartupDataAlgorithm()); |
+ unsigned int decompressed_size = *raw_data_size; |
+ int result = |
+ BZ2_bzBuffToBuffDecompress(raw_data, |
+ &decompressed_size, |
+ const_cast<char*>(compressed_data), |
+ compressed_data_size, |
+ 0, 1); |
+ if (result == BZ_OK) { |
+ *raw_data_size = decompressed_size; |
+ } |
+ return result; |
+ } |
+}; |
+#endif |
+ |
+ |
void Shell::Initialize() { |
+#ifdef COMPRESS_STARTUP_DATA_BZ2 |
+ BZip2Decompressor startup_data_decompressor; |
+ int bz2_result = startup_data_decompressor.Decompress(); |
+ if (bz2_result != BZ_OK) { |
+ fprintf(stderr, "bzip error code: %d\n", bz2_result); |
+ exit(1); |
+ } |
+#endif |
+ |
Shell::counter_map_ = new CounterMap(); |
// Set up counters |
if (i::StrLength(i::FLAG_map_counters) != 0) |