Chromium Code Reviews

Side by Side Diff: test/unittests/zone-unittest.cc

Issue 2299753002: Made zone segments aligned in memory and included a pointer to the zone in the header. Larger objec…
Patch Set: Cast list->length() and list->capacity() to size_t Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« src/zone.cc ('K') | « test/unittests/unittests.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 the V8 project authors. All rights reserved.
Jakob Kummerow 2016/09/07 12:49:03 nit: 2016
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <cmath>
6 #include <limits>
7
8 #include "src/objects-inl.h"
9 #include "src/objects.h"
Jakob Kummerow 2016/09/07 12:49:03 nit: when you #include foo-inl.h, you don't need t
10
Jakob Kummerow 2016/09/07 12:49:02 nit: no empty line necessary here. Instead, sort #
11 #include "src/handles-inl.h"
12 #include "src/handles.h"
Jakob Kummerow 2016/09/07 12:49:03 again
13
14 #include "src/base/utils/random-number-generator.h"
15 #include "src/zone.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace v8 {
19 namespace internal {
20
21 void generate_data(byte* data, const uint32_t length) {
22 for (uint32_t i = 0; i < length; i++) {
23 data[i] = static_cast<byte>(i % 100);
Jakob Kummerow 2016/09/07 12:49:02 how about s/i % 100/i & 0xFF/ ?
24 }
25 }
26
27 bool validate_data(const byte* data, const uint32_t length) {
28 for (uint32_t i = 0; i < length; i++) {
29 if (data[i] != static_cast<byte>(i % 100)) return false;
30 }
31 return true;
32 }
33
34 void empty_alloc() {
Jakob Kummerow 2016/09/07 12:49:03 Any reason this is a separate function? I'd prefer
35 base::AccountingAllocator allocator;
36 Zone zone(&allocator);
37
38 CHECK_EQ(zone.allocation_size(), 0);
39
40 void* ptr = zone.New(0);
41
42 CHECK_EQ(zone.allocation_size(), 0);
43 CHECK_EQ(Zone::GetZoneFromPointer(ptr), &zone);
44 }
45
46 TEST(Zone, EmptyAlloc) { empty_alloc(); }
47
48 void simple_alloc() {
49 const size_t kNumberOfChunks = 10000;
Jakob Kummerow 2016/09/07 12:49:03 How long does it take to run these tests?
50 const size_t kMaxChunkSize = 1000;
51
52 base::RandomNumberGenerator rnd(::v8::internal::FLAG_random_seed);
53 base::AccountingAllocator allocator;
54 Zone zone(&allocator);
55
56 CHECK_EQ(zone.allocation_size(), 0);
57
58 byte* chunks[kNumberOfChunks];
59 uint16_t sizes[kNumberOfChunks];
60
61 for (int i = 0; i < kNumberOfChunks; i++) {
62 sizes[i] = 1 + (rnd.NextInt() % kMaxChunkSize);
63 chunks[i] = reinterpret_cast<byte*>(zone.New(sizes[i]));
64
65 generate_data(chunks[i], sizes[i]);
66 }
67
68 CHECK_GE(zone.allocation_size(), kNumberOfChunks);
69
70 for (int i = 0; i < kNumberOfChunks; i++) {
71 CHECK(validate_data(chunks[i], sizes[i]));
72 }
73 }
74
75 TEST(Zone, SimpleAlloc) { simple_alloc(); }
76
77 void large_alloc() {
78 const size_t kNumberOfChunks = 50;
79 const size_t kMaxChunkSize = 5000000;
80
81 base::RandomNumberGenerator rnd(::v8::internal::FLAG_random_seed);
82 base::AccountingAllocator allocator;
83 Zone zone(&allocator);
84
85 CHECK_EQ(zone.allocation_size(), 0);
86
87 byte* chunks[kNumberOfChunks];
88 uint32_t sizes[kNumberOfChunks];
89
90 for (int i = 0; i < kNumberOfChunks; i++) {
91 sizes[i] = 1 + (rnd.NextInt() % kMaxChunkSize);
92 chunks[i] = reinterpret_cast<byte*>(zone.New(sizes[i]));
93
94 generate_data(chunks[i], sizes[i]);
95 }
96
97 CHECK_GE(zone.allocation_size(), kNumberOfChunks);
98
99 for (int i = 0; i < kNumberOfChunks; i++) {
100 CHECK(validate_data(chunks[i], sizes[i]));
101 }
102 }
103
104 TEST(Zone, LargeAlloc) { large_alloc(); }
105
106 void zone_realloc() {
107 const size_t kDataAmount = 5000000;
108
109 base::AccountingAllocator allocator;
110 Zone zone(&allocator);
111
112 CHECK_EQ(zone.allocation_size(), 0);
113
114 auto list = new (&zone) ZoneList<byte>(0, &zone);
Jakob Kummerow 2016/09/07 12:49:03 s/auto/ZoneList<byte>/
115
116 for (uint32_t i = 0; i < kDataAmount; i++) {
117 list->Add(i % 100, &zone);
118 }
119
120 CHECK_EQ(static_cast<size_t>(list->length()), kDataAmount);
121 CHECK_GE(static_cast<size_t>(list->capacity()), kDataAmount);
122 CHECK_GE(zone.allocation_size(), kDataAmount);
123
124 for (uint32_t i = 0; i < kDataAmount; i++) {
125 CHECK_EQ((*list)[i], i % 100);
126 }
127 }
128
129 TEST(Zone, ZoneRealloc) { zone_realloc(); }
130
131 } // namespace internal
132 } // namespace v8
OLDNEW
« src/zone.cc ('K') | « test/unittests/unittests.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine