Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: src/d8.cc

Issue 2697723004: Make regress-crbug-514081 less flaky by having max serialization size (Closed)
Patch Set: . Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 <stdlib.h> 6 #include <stdlib.h>
7 #include <string.h> 7 #include <string.h>
8 #include <sys/stat.h> 8 #include <sys/stat.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 #ifndef CHECK 59 #ifndef CHECK
60 #define CHECK(condition) assert(condition) 60 #define CHECK(condition) assert(condition)
61 #endif 61 #endif
62 62
63 namespace v8 { 63 namespace v8 {
64 64
65 namespace { 65 namespace {
66 66
67 const int MB = 1024 * 1024; 67 const int MB = 1024 * 1024;
68 const int kMaxWorkers = 50; 68 const int kMaxWorkers = 50;
69 const int kMaxSerializerMemoryUsage = 1 * MB; // Arbitrary maximum for testing.
69 70
70 #define USE_VM 1 71 #define USE_VM 1
71 #define VM_THRESHOLD 65536 72 #define VM_THRESHOLD 65536
72 // TODO(titzer): allocations should fail if >= 2gb because of 73 // TODO(titzer): allocations should fail if >= 2gb because of
73 // array buffers storing the lengths as a SMI internally. 74 // array buffers storing the lengths as a SMI internally.
74 #define TWO_GB (2u * 1024u * 1024u * 1024u) 75 #define TWO_GB (2u * 1024u * 1024u * 1024u)
75 76
76 class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator { 77 class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
77 public: 78 public:
78 virtual void* Allocate(size_t length) { 79 virtual void* Allocate(size_t length) {
(...skipping 2385 matching lines...) Expand 10 before | Expand all | Expand 10 after
2464 options.trace_enabled = true; 2465 options.trace_enabled = true;
2465 argv[i] = NULL; 2466 argv[i] = NULL;
2466 } else if (strncmp(argv[i], "--trace-config=", 15) == 0) { 2467 } else if (strncmp(argv[i], "--trace-config=", 15) == 0) {
2467 options.trace_config = argv[i] + 15; 2468 options.trace_config = argv[i] + 15;
2468 argv[i] = NULL; 2469 argv[i] = NULL;
2469 } else if (strcmp(argv[i], "--enable-inspector") == 0) { 2470 } else if (strcmp(argv[i], "--enable-inspector") == 0) {
2470 options.enable_inspector = true; 2471 options.enable_inspector = true;
2471 argv[i] = NULL; 2472 argv[i] = NULL;
2472 } else if (strncmp(argv[i], "--lcov=", 7) == 0) { 2473 } else if (strncmp(argv[i], "--lcov=", 7) == 0) {
2473 options.lcov_file = argv[i] + 7; 2474 options.lcov_file = argv[i] + 7;
2474 argv[i] = NULL;
Yang 2017/02/16 07:59:32 Accidental change?
binji 2017/02/17 00:49:13 Oops, fixed.
2475 } 2475 }
2476 } 2476 }
2477 2477
2478 v8::V8::SetFlagsFromCommandLine(&argc, argv, true); 2478 v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
2479 2479
2480 // Set up isolated source groups. 2480 // Set up isolated source groups.
2481 options.isolate_sources = new SourceGroup[options.num_isolates]; 2481 options.isolate_sources = new SourceGroup[options.num_isolates];
2482 SourceGroup* current = options.isolate_sources; 2482 SourceGroup* current = options.isolate_sources;
2483 current->Begin(argv, 1); 2483 current->Begin(argv, 1);
2484 for (int i = 1; i < argc; i++) { 2484 for (int i = 1; i < argc; i++) {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2564 if (!i::FLAG_verify_predictable) { 2564 if (!i::FLAG_verify_predictable) {
2565 while (v8::platform::PumpMessageLoop(g_platform, isolate)) continue; 2565 while (v8::platform::PumpMessageLoop(g_platform, isolate)) continue;
2566 v8::platform::RunIdleTasks(g_platform, isolate, 2566 v8::platform::RunIdleTasks(g_platform, isolate,
2567 50.0 / base::Time::kMillisecondsPerSecond); 2567 50.0 / base::Time::kMillisecondsPerSecond);
2568 } 2568 }
2569 } 2569 }
2570 2570
2571 class Serializer : public ValueSerializer::Delegate { 2571 class Serializer : public ValueSerializer::Delegate {
2572 public: 2572 public:
2573 explicit Serializer(Isolate* isolate) 2573 explicit Serializer(Isolate* isolate)
2574 : isolate_(isolate), serializer_(isolate, this) {} 2574 : isolate_(isolate),
2575 serializer_(isolate, this),
2576 current_memory_usage_(0) {}
2575 2577
2576 Maybe<bool> WriteValue(Local<Context> context, Local<Value> value, 2578 Maybe<bool> WriteValue(Local<Context> context, Local<Value> value,
2577 Local<Value> transfer) { 2579 Local<Value> transfer) {
2578 bool ok; 2580 bool ok;
2579 DCHECK(!data_); 2581 DCHECK(!data_);
2580 data_.reset(new SerializationData); 2582 data_.reset(new SerializationData);
2581 if (!PrepareTransfer(context, transfer).To(&ok)) { 2583 if (!PrepareTransfer(context, transfer).To(&ok)) {
2582 return Nothing<bool>(); 2584 return Nothing<bool>();
2583 } 2585 }
2584 serializer_.WriteHeader(); 2586 serializer_.WriteHeader();
(...skipping 30 matching lines...) Expand all
2615 } 2617 }
2616 } 2618 }
2617 2619
2618 size_t index = shared_array_buffers_.size(); 2620 size_t index = shared_array_buffers_.size();
2619 shared_array_buffers_.emplace_back(isolate_, shared_array_buffer); 2621 shared_array_buffers_.emplace_back(isolate_, shared_array_buffer);
2620 return Just<uint32_t>(static_cast<uint32_t>(index)); 2622 return Just<uint32_t>(static_cast<uint32_t>(index));
2621 } 2623 }
2622 2624
2623 void* ReallocateBufferMemory(void* old_buffer, size_t size, 2625 void* ReallocateBufferMemory(void* old_buffer, size_t size,
2624 size_t* actual_size) override { 2626 size_t* actual_size) override {
2627 // Not accurate, because we don't take into account reallocated buffers,
2628 // but this is fine for testing.
2629 current_memory_usage_ += size;
2630 if (current_memory_usage_ > kMaxSerializerMemoryUsage) return nullptr;
2631
2625 void* result = realloc(old_buffer, size); 2632 void* result = realloc(old_buffer, size);
2626 *actual_size = result ? size : 0; 2633 *actual_size = result ? size : 0;
2627 return result; 2634 return result;
2628 } 2635 }
2629 2636
2630 void FreeBufferMemory(void* buffer) override { free(buffer); } 2637 void FreeBufferMemory(void* buffer) override { free(buffer); }
2631 2638
2632 private: 2639 private:
2633 Maybe<bool> PrepareTransfer(Local<Context> context, Local<Value> transfer) { 2640 Maybe<bool> PrepareTransfer(Local<Context> context, Local<Value> transfer) {
2634 if (transfer->IsArray()) { 2641 if (transfer->IsArray()) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2692 } 2699 }
2693 2700
2694 return Just(true); 2701 return Just(true);
2695 } 2702 }
2696 2703
2697 Isolate* isolate_; 2704 Isolate* isolate_;
2698 ValueSerializer serializer_; 2705 ValueSerializer serializer_;
2699 std::unique_ptr<SerializationData> data_; 2706 std::unique_ptr<SerializationData> data_;
2700 std::vector<Global<ArrayBuffer>> array_buffers_; 2707 std::vector<Global<ArrayBuffer>> array_buffers_;
2701 std::vector<Global<SharedArrayBuffer>> shared_array_buffers_; 2708 std::vector<Global<SharedArrayBuffer>> shared_array_buffers_;
2709 size_t current_memory_usage_;
2702 2710
2703 DISALLOW_COPY_AND_ASSIGN(Serializer); 2711 DISALLOW_COPY_AND_ASSIGN(Serializer);
2704 }; 2712 };
2705 2713
2706 class Deserializer : public ValueDeserializer::Delegate { 2714 class Deserializer : public ValueDeserializer::Delegate {
2707 public: 2715 public:
2708 Deserializer(Isolate* isolate, std::unique_ptr<SerializationData> data) 2716 Deserializer(Isolate* isolate, std::unique_ptr<SerializationData> data)
2709 : isolate_(isolate), 2717 : isolate_(isolate),
2710 deserializer_(isolate, data->data(), data->size(), this), 2718 deserializer_(isolate, data->data(), data->size(), this),
2711 data_(std::move(data)) { 2719 data_(std::move(data)) {
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
3001 } 3009 }
3002 3010
3003 } // namespace v8 3011 } // namespace v8
3004 3012
3005 3013
3006 #ifndef GOOGLE3 3014 #ifndef GOOGLE3
3007 int main(int argc, char* argv[]) { 3015 int main(int argc, char* argv[]) {
3008 return v8::Shell::Main(argc, argv); 3016 return v8::Shell::Main(argc, argv);
3009 } 3017 }
3010 #endif 3018 #endif
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698