diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-06-18 14:10:49 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-06-18 13:53:24 +0000 |
commit | 813fbf95af77a531c57a8c497345ad2c61d475b3 (patch) | |
tree | 821b2c8de8365f21b6c9ba17a236fb3006a1d506 /chromium/v8/src/startup-data-util.cc | |
parent | af6588f8d723931a298c995fa97259bb7f7deb55 (diff) | |
download | qtwebengine-chromium-813fbf95af77a531c57a8c497345ad2c61d475b3.tar.gz |
BASELINE: Update chromium to 44.0.2403.47
Change-Id: Ie056fedba95cf5e5c76b30c4b2c80fca4764aa2f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Diffstat (limited to 'chromium/v8/src/startup-data-util.cc')
-rw-r--r-- | chromium/v8/src/startup-data-util.cc | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/chromium/v8/src/startup-data-util.cc b/chromium/v8/src/startup-data-util.cc new file mode 100644 index 00000000000..1b2f7ed7e95 --- /dev/null +++ b/chromium/v8/src/startup-data-util.cc @@ -0,0 +1,91 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/startup-data-util.h" + +#include <stdlib.h> +#include <string.h> + +#include "src/base/logging.h" + + +namespace v8 { + +#ifdef V8_USE_EXTERNAL_STARTUP_DATA + +StartupDataHandler::StartupDataHandler(const char* exec_path, + const char* natives_blob, + const char* snapshot_blob) { + // If we have (at least one) explicitly given blob, use those. + // If not, use the default blob locations next to the d8 binary. + if (natives_blob || snapshot_blob) { + LoadFromFiles(natives_blob, snapshot_blob); + } else { + char* natives; + char* snapshot; + LoadFromFiles(RelativePath(&natives, exec_path, "natives_blob.bin"), + RelativePath(&snapshot, exec_path, "snapshot_blob.bin")); + + free(natives); + free(snapshot); + } +} + + +StartupDataHandler::~StartupDataHandler() { + delete[] natives_.data; + delete[] snapshot_.data; +} + + +char* StartupDataHandler::RelativePath(char** buffer, const char* exec_path, + const char* name) { + DCHECK(exec_path); + const char* last_slash = strrchr(exec_path, '/'); + if (last_slash) { + int after_slash = static_cast<int>(last_slash - exec_path + 1); + int name_length = static_cast<int>(strlen(name)); + *buffer = reinterpret_cast<char*>(calloc(after_slash + name_length + 1, 1)); + strncpy(*buffer, exec_path, after_slash); + strncat(*buffer, name, name_length); + } else { + *buffer = strdup(name); + } + return *buffer; +} + + +void StartupDataHandler::LoadFromFiles(const char* natives_blob, + const char* snapshot_blob) { + Load(natives_blob, &natives_, v8::V8::SetNativesDataBlob); + Load(snapshot_blob, &snapshot_, v8::V8::SetSnapshotDataBlob); +} + + +void StartupDataHandler::Load(const char* blob_file, + v8::StartupData* startup_data, + void (*setter_fn)(v8::StartupData*)) { + startup_data->data = NULL; + startup_data->raw_size = 0; + + if (!blob_file) return; + + FILE* file = fopen(blob_file, "rb"); + if (!file) return; + + fseek(file, 0, SEEK_END); + startup_data->raw_size = static_cast<int>(ftell(file)); + rewind(file); + + startup_data->data = new char[startup_data->raw_size]; + int read_size = static_cast<int>(fread(const_cast<char*>(startup_data->data), + 1, startup_data->raw_size, file)); + fclose(file); + + if (startup_data->raw_size == read_size) (*setter_fn)(startup_data); +} + +#endif // V8_USE_EXTERNAL_STARTUP_DATA + +} // namespace v8 |