| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 #include <errno.h> | 5 #include <errno.h> |
| 6 #include <signal.h> |
| 6 #include <stdio.h> | 7 #include <stdio.h> |
| 7 #ifdef COMPRESS_STARTUP_DATA_BZ2 | |
| 8 #include <bzlib.h> | |
| 9 #endif | |
| 10 #include <signal.h> | |
| 11 | 8 |
| 12 #include "src/v8.h" | 9 #include "src/v8.h" |
| 13 | 10 |
| 14 #include "include/libplatform/libplatform.h" | 11 #include "include/libplatform/libplatform.h" |
| 15 #include "src/assembler.h" | 12 #include "src/assembler.h" |
| 16 #include "src/base/platform/platform.h" | 13 #include "src/base/platform/platform.h" |
| 17 #include "src/bootstrapper.h" | 14 #include "src/bootstrapper.h" |
| 18 #include "src/flags.h" | 15 #include "src/flags.h" |
| 19 #include "src/list.h" | 16 #include "src/list.h" |
| 20 #include "src/natives.h" | 17 #include "src/natives.h" |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 } | 239 } |
| 243 | 240 |
| 244 FILE* fp_; | 241 FILE* fp_; |
| 245 FILE* raw_file_; | 242 FILE* raw_file_; |
| 246 FILE* raw_context_file_; | 243 FILE* raw_context_file_; |
| 247 FILE* startup_blob_file_; | 244 FILE* startup_blob_file_; |
| 248 Compressor* compressor_; | 245 Compressor* compressor_; |
| 249 }; | 246 }; |
| 250 | 247 |
| 251 | 248 |
| 252 #ifdef COMPRESS_STARTUP_DATA_BZ2 | |
| 253 class BZip2Compressor : public Compressor { | |
| 254 public: | |
| 255 BZip2Compressor() : output_(NULL) {} | |
| 256 virtual ~BZip2Compressor() { | |
| 257 delete output_; | |
| 258 } | |
| 259 virtual bool Compress(i::Vector<char> input) { | |
| 260 delete output_; | |
| 261 output_ = new i::ScopedVector<char>((input.length() * 101) / 100 + 1000); | |
| 262 unsigned int output_length_ = output_->length(); | |
| 263 int result = BZ2_bzBuffToBuffCompress(output_->start(), &output_length_, | |
| 264 input.start(), input.length(), | |
| 265 9, 1, 0); | |
| 266 if (result == BZ_OK) { | |
| 267 output_->Truncate(output_length_); | |
| 268 return true; | |
| 269 } else { | |
| 270 fprintf(stderr, "bzlib error code: %d\n", result); | |
| 271 return false; | |
| 272 } | |
| 273 } | |
| 274 virtual i::Vector<char>* output() { return output_; } | |
| 275 | |
| 276 private: | |
| 277 i::ScopedVector<char>* output_; | |
| 278 }; | |
| 279 | |
| 280 | |
| 281 class BZip2Decompressor : public StartupDataDecompressor { | |
| 282 public: | |
| 283 virtual ~BZip2Decompressor() { } | |
| 284 | |
| 285 protected: | |
| 286 virtual int DecompressData(char* raw_data, | |
| 287 int* raw_data_size, | |
| 288 const char* compressed_data, | |
| 289 int compressed_data_size) { | |
| 290 DCHECK_EQ(StartupData::kBZip2, | |
| 291 V8::GetCompressedStartupDataAlgorithm()); | |
| 292 unsigned int decompressed_size = *raw_data_size; | |
| 293 int result = | |
| 294 BZ2_bzBuffToBuffDecompress(raw_data, | |
| 295 &decompressed_size, | |
| 296 const_cast<char*>(compressed_data), | |
| 297 compressed_data_size, | |
| 298 0, 1); | |
| 299 if (result == BZ_OK) { | |
| 300 *raw_data_size = decompressed_size; | |
| 301 } | |
| 302 return result; | |
| 303 } | |
| 304 }; | |
| 305 #endif | |
| 306 | |
| 307 | |
| 308 void DumpException(Handle<Message> message) { | 249 void DumpException(Handle<Message> message) { |
| 309 String::Utf8Value message_string(message->Get()); | 250 String::Utf8Value message_string(message->Get()); |
| 310 String::Utf8Value message_line(message->GetSourceLine()); | 251 String::Utf8Value message_line(message->GetSourceLine()); |
| 311 fprintf(stderr, "%s at line %d\n", *message_string, message->GetLineNumber()); | 252 fprintf(stderr, "%s at line %d\n", *message_string, message->GetLineNumber()); |
| 312 fprintf(stderr, "%s\n", *message_line); | 253 fprintf(stderr, "%s\n", *message_line); |
| 313 for (int i = 0; i <= message->GetEndColumn(); ++i) { | 254 for (int i = 0; i <= message->GetEndColumn(); ++i) { |
| 314 fprintf(stderr, "%c", i < message->GetStartColumn() ? ' ' : '^'); | 255 fprintf(stderr, "%c", i < message->GetStartColumn() ? ' ' : '^'); |
| 315 } | 256 } |
| 316 fprintf(stderr, "\n"); | 257 fprintf(stderr, "\n"); |
| 317 } | 258 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 329 i::FlagList::PrintHelp(); | 270 i::FlagList::PrintHelp(); |
| 330 return !i::FLAG_help; | 271 return !i::FLAG_help; |
| 331 } | 272 } |
| 332 | 273 |
| 333 i::CpuFeatures::Probe(true); | 274 i::CpuFeatures::Probe(true); |
| 334 V8::InitializeICU(); | 275 V8::InitializeICU(); |
| 335 v8::Platform* platform = v8::platform::CreateDefaultPlatform(); | 276 v8::Platform* platform = v8::platform::CreateDefaultPlatform(); |
| 336 v8::V8::InitializePlatform(platform); | 277 v8::V8::InitializePlatform(platform); |
| 337 v8::V8::Initialize(); | 278 v8::V8::Initialize(); |
| 338 | 279 |
| 339 #ifdef COMPRESS_STARTUP_DATA_BZ2 | |
| 340 BZip2Decompressor natives_decompressor; | |
| 341 int bz2_result = natives_decompressor.Decompress(); | |
| 342 if (bz2_result != BZ_OK) { | |
| 343 fprintf(stderr, "bzip error code: %d\n", bz2_result); | |
| 344 exit(1); | |
| 345 } | |
| 346 #endif | |
| 347 i::FLAG_logfile_per_isolate = false; | 280 i::FLAG_logfile_per_isolate = false; |
| 348 | 281 |
| 349 Isolate::CreateParams params; | 282 Isolate::CreateParams params; |
| 350 params.enable_serializer = true; | 283 params.enable_serializer = true; |
| 351 Isolate* isolate = v8::Isolate::New(params); | 284 Isolate* isolate = v8::Isolate::New(params); |
| 352 { Isolate::Scope isolate_scope(isolate); | 285 { Isolate::Scope isolate_scope(isolate); |
| 353 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 286 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 354 | 287 |
| 355 Persistent<Context> context; | 288 Persistent<Context> context; |
| 356 { | 289 { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 | 363 |
| 431 context_ser.FinalizeAllocation(); | 364 context_ser.FinalizeAllocation(); |
| 432 ser.FinalizeAllocation(); | 365 ser.FinalizeAllocation(); |
| 433 | 366 |
| 434 { | 367 { |
| 435 SnapshotWriter writer(argv[1]); | 368 SnapshotWriter writer(argv[1]); |
| 436 if (i::FLAG_raw_file && i::FLAG_raw_context_file) | 369 if (i::FLAG_raw_file && i::FLAG_raw_context_file) |
| 437 writer.SetRawFiles(i::FLAG_raw_file, i::FLAG_raw_context_file); | 370 writer.SetRawFiles(i::FLAG_raw_file, i::FLAG_raw_context_file); |
| 438 if (i::FLAG_startup_blob) | 371 if (i::FLAG_startup_blob) |
| 439 writer.SetStartupBlobFile(i::FLAG_startup_blob); | 372 writer.SetStartupBlobFile(i::FLAG_startup_blob); |
| 440 #ifdef COMPRESS_STARTUP_DATA_BZ2 | |
| 441 BZip2Compressor bzip2; | |
| 442 writer.SetCompressor(&bzip2); | |
| 443 #endif | |
| 444 writer.WriteSnapshot(snapshot_sink.data(), ser, context_sink.data(), | 373 writer.WriteSnapshot(snapshot_sink.data(), ser, context_sink.data(), |
| 445 context_ser); | 374 context_ser); |
| 446 } | 375 } |
| 447 } | 376 } |
| 448 | 377 |
| 449 isolate->Dispose(); | 378 isolate->Dispose(); |
| 450 V8::Dispose(); | 379 V8::Dispose(); |
| 451 V8::ShutdownPlatform(); | 380 V8::ShutdownPlatform(); |
| 452 delete platform; | 381 delete platform; |
| 453 return 0; | 382 return 0; |
| 454 } | 383 } |
| OLD | NEW |