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

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 2481 matching lines...) Expand 10 before | Expand all | Expand 10 after
2560 if (!i::FLAG_verify_predictable) { 2561 if (!i::FLAG_verify_predictable) {
2561 while (v8::platform::PumpMessageLoop(g_platform, isolate)) continue; 2562 while (v8::platform::PumpMessageLoop(g_platform, isolate)) continue;
2562 v8::platform::RunIdleTasks(g_platform, isolate, 2563 v8::platform::RunIdleTasks(g_platform, isolate,
2563 50.0 / base::Time::kMillisecondsPerSecond); 2564 50.0 / base::Time::kMillisecondsPerSecond);
2564 } 2565 }
2565 } 2566 }
2566 2567
2567 class Serializer : public ValueSerializer::Delegate { 2568 class Serializer : public ValueSerializer::Delegate {
2568 public: 2569 public:
2569 explicit Serializer(Isolate* isolate) 2570 explicit Serializer(Isolate* isolate)
2570 : isolate_(isolate), serializer_(isolate, this) {} 2571 : isolate_(isolate),
2572 serializer_(isolate, this),
2573 current_memory_usage_(0) {}
2571 2574
2572 Maybe<bool> WriteValue(Local<Context> context, Local<Value> value, 2575 Maybe<bool> WriteValue(Local<Context> context, Local<Value> value,
2573 Local<Value> transfer) { 2576 Local<Value> transfer) {
2574 bool ok; 2577 bool ok;
2575 DCHECK(!data_); 2578 DCHECK(!data_);
2576 data_.reset(new SerializationData); 2579 data_.reset(new SerializationData);
2577 if (!PrepareTransfer(context, transfer).To(&ok)) { 2580 if (!PrepareTransfer(context, transfer).To(&ok)) {
2578 return Nothing<bool>(); 2581 return Nothing<bool>();
2579 } 2582 }
2580 serializer_.WriteHeader(); 2583 serializer_.WriteHeader();
(...skipping 30 matching lines...) Expand all
2611 } 2614 }
2612 } 2615 }
2613 2616
2614 size_t index = shared_array_buffers_.size(); 2617 size_t index = shared_array_buffers_.size();
2615 shared_array_buffers_.emplace_back(isolate_, shared_array_buffer); 2618 shared_array_buffers_.emplace_back(isolate_, shared_array_buffer);
2616 return Just<uint32_t>(static_cast<uint32_t>(index)); 2619 return Just<uint32_t>(static_cast<uint32_t>(index));
2617 } 2620 }
2618 2621
2619 void* ReallocateBufferMemory(void* old_buffer, size_t size, 2622 void* ReallocateBufferMemory(void* old_buffer, size_t size,
2620 size_t* actual_size) override { 2623 size_t* actual_size) override {
2624 // Not accurate, because we don't take into account reallocated buffers,
2625 // but this is fine for testing.
2626 current_memory_usage_ += size;
2627 if (current_memory_usage_ > kMaxSerializerMemoryUsage) return nullptr;
2628
2621 void* result = realloc(old_buffer, size); 2629 void* result = realloc(old_buffer, size);
2622 *actual_size = result ? size : 0; 2630 *actual_size = result ? size : 0;
2623 return result; 2631 return result;
2624 } 2632 }
2625 2633
2626 void FreeBufferMemory(void* buffer) override { free(buffer); } 2634 void FreeBufferMemory(void* buffer) override { free(buffer); }
2627 2635
2628 private: 2636 private:
2629 Maybe<bool> PrepareTransfer(Local<Context> context, Local<Value> transfer) { 2637 Maybe<bool> PrepareTransfer(Local<Context> context, Local<Value> transfer) {
2630 if (transfer->IsArray()) { 2638 if (transfer->IsArray()) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2688 } 2696 }
2689 2697
2690 return Just(true); 2698 return Just(true);
2691 } 2699 }
2692 2700
2693 Isolate* isolate_; 2701 Isolate* isolate_;
2694 ValueSerializer serializer_; 2702 ValueSerializer serializer_;
2695 std::unique_ptr<SerializationData> data_; 2703 std::unique_ptr<SerializationData> data_;
2696 std::vector<Global<ArrayBuffer>> array_buffers_; 2704 std::vector<Global<ArrayBuffer>> array_buffers_;
2697 std::vector<Global<SharedArrayBuffer>> shared_array_buffers_; 2705 std::vector<Global<SharedArrayBuffer>> shared_array_buffers_;
2706 size_t current_memory_usage_;
2698 2707
2699 DISALLOW_COPY_AND_ASSIGN(Serializer); 2708 DISALLOW_COPY_AND_ASSIGN(Serializer);
2700 }; 2709 };
2701 2710
2702 class Deserializer : public ValueDeserializer::Delegate { 2711 class Deserializer : public ValueDeserializer::Delegate {
2703 public: 2712 public:
2704 Deserializer(Isolate* isolate, std::unique_ptr<SerializationData> data) 2713 Deserializer(Isolate* isolate, std::unique_ptr<SerializationData> data)
2705 : isolate_(isolate), 2714 : isolate_(isolate),
2706 deserializer_(isolate, data->data(), data->size(), this), 2715 deserializer_(isolate, data->data(), data->size(), this),
2707 data_(std::move(data)) { 2716 data_(std::move(data)) {
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
2997 } 3006 }
2998 3007
2999 } // namespace v8 3008 } // namespace v8
3000 3009
3001 3010
3002 #ifndef GOOGLE3 3011 #ifndef GOOGLE3
3003 int main(int argc, char* argv[]) { 3012 int main(int argc, char* argv[]) {
3004 return v8::Shell::Main(argc, argv); 3013 return v8::Shell::Main(argc, argv);
3005 } 3014 }
3006 #endif 3015 #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