12014-05-01 Dan Bernstein <mitz@apple.com> 2 3 Fixed production builds for the iOS Simulator. 4 <rdar://problem/16792221> 5 6 * Configurations/bmalloc.xcconfig: Include INSTALL_PATH_PREFIX in 7 PRIVATE_HEADERS_FOLDER_PATH when installing. 8 92014-04-20 Geoffrey Garen <ggaren@apple.com> 10 11 bmalloc: Segregate pages by objects size 12 https://bugs.webkit.org/show_bug.cgi?id=131909 13 14 Reviewed by Andreas Kling. 15 16 2% reduction in memory-at-end on the Membuster memory_warning benchmarks. 17 18 * bmalloc/Allocator.cpp: 19 (bmalloc::Allocator::allocateSlowCase): 20 * bmalloc/Allocator.h: 21 (bmalloc::Allocator::allocateFastCase): 22 (bmalloc::Allocator::smallAllocatorFor): Use the new shared helper 23 function for size class calculation. 24 25 * bmalloc/Deallocator.cpp: 26 (bmalloc::Deallocator::Deallocator): 27 (bmalloc::Deallocator::scavenge): 28 (bmalloc::Deallocator::deallocateSmallLine): 29 (bmalloc::Deallocator::allocateSmallLine): 30 * bmalloc/Deallocator.h: Keep a cache for every size class, since the 31 cache can't be shared anymore. 32 33 * bmalloc/Heap.cpp: 34 (bmalloc::Heap::allocateSmallLineSlowCase): 35 * bmalloc/Heap.h: 36 (bmalloc::Heap::deallocateSmallLine): Ditto. 37 38 (bmalloc::Heap::allocateSmallLine): Check size class in addition to 39 page refcount when allocating a line because we might have deallocated 40 the page and the recycled it for another size class. 41 42 (bmalloc::Heap::deallocateMediumLine): 43 (bmalloc::Heap::allocateMediumLine): 44 * bmalloc/Line.h: 45 (bmalloc::Line::refCount): 46 * bmalloc/Page.h: 47 (bmalloc::Page::refCount): 48 (bmalloc::Page::smallSizeClass): 49 (bmalloc::Page::setSmallSizeClass): 50 (bmalloc::Page<Traits>::refCount): Deleted. 51 * bmalloc/Sizes.h: 52 (bmalloc::Sizes::smallSizeClassFor): New shared API for computing 53 an index into an array from a size. 54 552014-04-19 Geoffrey Garen <ggaren@apple.com> 56 57 bmalloc: Improved alignment in LargeChunk 58 https://bugs.webkit.org/show_bug.cgi?id=131895 59 60 Reviewed by Andreas Kling. 61 62 * bmalloc/Chunk.h: 63 * bmalloc/LargeChunk.h: Align to vmPageSize just like Chunk does. 64 Technically, the previous alignment was harmless, but I would prefer, 65 dear reader, not to have to explain the interlocking set of 66 circumstances that made it so. 67 682014-04-19 Geoffrey Garen <ggaren@apple.com> 69 70 Rolled out r167502 because it caused a crash on the facebook benchmark. 71 72 Unreviewed. 73 74 bmalloc: Added an XSmall line size 75 https://bugs.webkit.org/show_bug.cgi?id=131851 76 77 Reviewed by Sam Weinig. 78 792014-04-19 Geoffrey Garen <ggaren@apple.com> 80 81 bmalloc: Mutex should be harder to use wrong 82 https://bugs.webkit.org/show_bug.cgi?id=131879 83 84 Reviewed by Andreas Kling. 85 86 Mutex now has a proper constructor, so you can't deadlock by forgetting 87 to initialize it. 88 89 * bmalloc.xcodeproj/project.pbxproj: 90 * bmalloc/Allocator.cpp: 91 (bmalloc::Allocator::processXSmallAllocatorLog): 92 (bmalloc::Allocator::processSmallAllocatorLog): 93 (bmalloc::Allocator::processMediumAllocatorLog): 94 (bmalloc::Allocator::allocateLarge): 95 (bmalloc::Allocator::allocateXLarge): Global replace Mutex => StaticMutex, 96 since the Heap mutex is a static. 97 98 * bmalloc/AsyncTask.h: 99 (bmalloc::Function>::AsyncTask): Use Mutex, since we're not static. No 100 need for explicit initialization anymore. 101 102 * bmalloc/Deallocator.cpp: 103 (bmalloc::Deallocator::scavenge): 104 (bmalloc::Deallocator::deallocateLarge): 105 (bmalloc::Deallocator::deallocateXLarge): 106 (bmalloc::Deallocator::processObjectLog): 107 (bmalloc::Deallocator::deallocateSmallLine): 108 (bmalloc::Deallocator::deallocateXSmallLine): 109 (bmalloc::Deallocator::allocateSmallLine): 110 (bmalloc::Deallocator::allocateXSmallLine): 111 (bmalloc::Deallocator::deallocateMediumLine): 112 (bmalloc::Deallocator::allocateMediumLine): 113 * bmalloc/Deallocator.h: 114 * bmalloc/Heap.cpp: 115 (bmalloc::sleep): 116 (bmalloc::Heap::Heap): 117 (bmalloc::Heap::concurrentScavenge): 118 (bmalloc::Heap::scavenge): 119 (bmalloc::Heap::scavengeSmallPages): 120 (bmalloc::Heap::scavengeXSmallPages): 121 (bmalloc::Heap::scavengeMediumPages): 122 (bmalloc::Heap::scavengeLargeRanges): 123 (bmalloc::Heap::allocateXSmallLineSlowCase): 124 (bmalloc::Heap::allocateSmallLineSlowCase): 125 (bmalloc::Heap::allocateMediumLineSlowCase): 126 (bmalloc::Heap::allocateXLarge): 127 (bmalloc::Heap::deallocateXLarge): 128 (bmalloc::Heap::allocateLarge): 129 (bmalloc::Heap::deallocateLarge): 130 * bmalloc/Heap.h: 131 (bmalloc::Heap::deallocateXSmallLine): 132 (bmalloc::Heap::allocateXSmallLine): 133 (bmalloc::Heap::deallocateSmallLine): 134 (bmalloc::Heap::allocateSmallLine): 135 (bmalloc::Heap::deallocateMediumLine): 136 (bmalloc::Heap::allocateMediumLine): 137 * bmalloc/Line.h: 138 (bmalloc::Line<Traits>::deref): 139 * bmalloc/Mutex.cpp: Removed. 140 * bmalloc/Mutex.h: 141 (bmalloc::Mutex::Mutex): 142 (bmalloc::Mutex::init): Deleted. 143 (bmalloc::Mutex::try_lock): Deleted. 144 (bmalloc::Mutex::lock): Deleted. 145 (bmalloc::Mutex::unlock): Deleted. 146 * bmalloc/Page.h: 147 (bmalloc::Page<Traits>::ref): 148 (bmalloc::Page<Traits>::deref): 149 (bmalloc::Page<Traits>::refCount): 150 * bmalloc/PerProcess.h: 151 (bmalloc::PerProcess::mutex): 152 (bmalloc::PerProcess<T>::getSlowCase): 153 * bmalloc/StaticMutex.cpp: Added. 154 (bmalloc::StaticMutex::lockSlowCase): 155 * bmalloc/StaticMutex.h: Added. 156 (bmalloc::StaticMutex::init): 157 (bmalloc::StaticMutex::try_lock): 158 (bmalloc::StaticMutex::lock): 159 (bmalloc::StaticMutex::unlock): 160 * bmalloc/VMHeap.h: 161 (bmalloc::VMHeap::deallocateXSmallPage): 162 (bmalloc::VMHeap::deallocateSmallPage): 163 (bmalloc::VMHeap::deallocateMediumPage): 164 (bmalloc::VMHeap::deallocateLargeRange): 165 * bmalloc/bmalloc.h: 166 (bmalloc::api::scavenge): Global replace Mutex => StaticMutex, 167 since the Heap mutex is a static. 168 1692014-04-18 Geoffrey Garen <ggaren@apple.com> 170 171 bmalloc: AsyncTask should use Mutex instead of std::mutex 172 https://bugs.webkit.org/show_bug.cgi?id=131865 173 174 Reviewed by Gavin Barraclough. 175 176 std::mutex is so slow that it makes parallelizing simple tasks through 177 AsyncTask a net regression. Mutex fixes this. 178 179 * bmalloc/AsyncTask.h: 180 (bmalloc::Function>::AsyncTask): 181 (bmalloc::Function>::join): 182 (bmalloc::Function>::runSlowCase): 183 (bmalloc::Function>::entryPoint): 184 * bmalloc/Mutex.h: 185 (bmalloc::Mutex::init): 186 1872014-04-18 Geoffrey Garen <ggaren@apple.com> 188 189 bmalloc: Added an XSmall line size 190 https://bugs.webkit.org/show_bug.cgi?id=131851 191 192 Reviewed by Sam Weinig. 193 194 Reduces malloc footprint on Membuster recordings by 10%. 195 196 This is a throughput regression, but we're still way ahead of TCMalloc. 197 I have some ideas for how to recover the regression -- but I wanted to 198 get this win in first. 199 200 Full set of benchmark results: 201 202 bmalloc> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks --measure-heap nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/ 203 204 nopatch patch Δ 205 Peak Memory: 206 reddit_memory_warning 7,896kB 7,532kB ^ 1.05x smaller 207 flickr_memory_warning 12,968kB 12,324kB ^ 1.05x smaller 208 theverge_memory_warning 16,672kB 15,200kB ^ 1.1x smaller 209 210 <geometric mean> 11,952kB 11,216kB ^ 1.07x smaller 211 <arithmetic mean> 12,512kB 11,685kB ^ 1.07x smaller 212 <harmonic mean> 11,375kB 10,726kB ^ 1.06x smaller 213 214 Memory at End: 215 reddit_memory_warning 7,320kB 6,856kB ^ 1.07x smaller 216 flickr_memory_warning 10,848kB 9,692kB ^ 1.12x smaller 217 theverge_memory_warning 16,380kB 14,872kB ^ 1.1x smaller 218 219 <geometric mean> 10,916kB 9,961kB ^ 1.1x smaller 220 <arithmetic mean> 11,516kB 10,473kB ^ 1.1x smaller 221 <harmonic mean> 10,350kB 9,485kB ^ 1.09x smaller 222 223 MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/ 224 225 nopatch patch Δ 226 Execution Time: 227 churn 127ms 151ms ! 1.19x slower 228 list_allocate 130ms 164ms ! 1.26x slower 229 tree_allocate 109ms 127ms ! 1.17x slower 230 tree_churn 115ms 120ms ! 1.04x slower 231 facebook 240ms 259ms ! 1.08x slower 232 fragment 91ms 131ms ! 1.44x slower 233 fragment_iterate 105ms 106ms ! 1.01x slower 234 message_one 260ms 259ms ^ 1.0x faster 235 message_many 149ms 154ms ! 1.03x slower 236 medium 194ms 248ms ! 1.28x slower 237 big 157ms 160ms ! 1.02x slower 238 239 <geometric mean> 144ms 163ms ! 1.13x slower 240 <arithmetic mean> 152ms 171ms ! 1.12x slower 241 <harmonic mean> 137ms 156ms ! 1.14x slower 242 243 MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/ 244 245 nopatch patch Δ 246 Execution Time: 247 churn 126ms 148ms ! 1.17x slower 248 churn --parallel 62ms 76ms ! 1.23x slower 249 list_allocate 130ms 164ms ! 1.26x slower 250 list_allocate --parallel 120ms 175ms ! 1.46x slower 251 tree_allocate 111ms 127ms ! 1.14x slower 252 tree_allocate --parallel 95ms 135ms ! 1.42x slower 253 tree_churn 115ms 124ms ! 1.08x slower 254 tree_churn --parallel 107ms 126ms ! 1.18x slower 255 facebook 240ms 276ms ! 1.15x slower 256 facebook --parallel 802ms 1,088ms ! 1.36x slower 257 fragment 92ms 130ms ! 1.41x slower 258 fragment --parallel 66ms 124ms ! 1.88x slower 259 fragment_iterate 109ms 127ms ! 1.17x slower 260 fragment_iterate --parallel 55ms 64ms ! 1.16x slower 261 message_one 260ms 260ms 262 message_many 170ms 238ms ! 1.4x slower 263 medium 185ms 250ms ! 1.35x slower 264 medium --parallel 210ms 334ms ! 1.59x slower 265 big 150ms 169ms ! 1.13x slower 266 big --parallel 138ms 144ms ! 1.04x slower 267 268 <geometric mean> 135ms 170ms ! 1.26x slower 269 <arithmetic mean> 167ms 214ms ! 1.28x slower 270 <harmonic mean> 117ms 148ms ! 1.26x slower 271 272 MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks TC:~/scratch/Build-TCMalloc/Release/ patch:~/webkit/WebKitBuild/Release/ 273 274 TC patch Δ 275 Peak Memory: 276 reddit_memory_warning 13,836kB 13,436kB ^ 1.03x smaller 277 flickr_memory_warning 24,868kB 25,188kB ! 1.01x bigger 278 theverge_memory_warning 24,504kB 26,636kB ! 1.09x bigger 279 280 <geometric mean> 20,353kB 20,812kB ! 1.02x bigger 281 <arithmetic mean> 21,069kB 21,753kB ! 1.03x bigger 282 <harmonic mean> 19,570kB 19,780kB ! 1.01x bigger 283 284 Memory at End: 285 reddit_memory_warning 8,656kB 10,016kB ! 1.16x bigger 286 flickr_memory_warning 11,844kB 13,784kB ! 1.16x bigger 287 theverge_memory_warning 18,516kB 22,748kB ! 1.23x bigger 288 289 <geometric mean> 12,382kB 14,644kB ! 1.18x bigger 290 <arithmetic mean> 13,005kB 15,516kB ! 1.19x bigger 291 <harmonic mean> 11,813kB 13,867kB ! 1.17x bigger 292 293 MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks TC:~/scratch/Build-TCMalloc/Release/ patch:~/webkit/WebKitBuild/Release/ 294 295 TC patch Δ 296 Execution Time: 297 churn 416ms 148ms ^ 2.81x faster 298 list_allocate 463ms 164ms ^ 2.82x faster 299 tree_allocate 292ms 127ms ^ 2.3x faster 300 tree_churn 157ms 120ms ^ 1.31x faster 301 facebook 327ms 276ms ^ 1.18x faster 302 fragment 335ms 129ms ^ 2.6x faster 303 fragment_iterate 344ms 108ms ^ 3.19x faster 304 message_one 386ms 258ms ^ 1.5x faster 305 message_many 410ms 154ms ^ 2.66x faster 306 medium 391ms 245ms ^ 1.6x faster 307 big 261ms 167ms ^ 1.56x faster 308 309 <geometric mean> 332ms 164ms ^ 2.02x faster 310 <arithmetic mean> 344ms 172ms ^ 1.99x faster 311 <harmonic mean> 317ms 157ms ^ 2.02x faster 312 313 * bmalloc.xcodeproj/project.pbxproj: 314 * bmalloc/Allocator.cpp: 315 (bmalloc::Allocator::Allocator): Don't assume that each allocator's 316 index corresponds with its size. Instead, use the size selection function 317 explicitly. Now that we have XSmall, some small allocator entries are 318 unused. 319 320 (bmalloc::Allocator::scavenge): 321 (bmalloc::Allocator::log): 322 (bmalloc::Allocator::processXSmallAllocatorLog): 323 (bmalloc::Allocator::allocateSlowCase): 324 * bmalloc/Allocator.h: 325 (bmalloc::Allocator::xSmallAllocatorFor): 326 (bmalloc::Allocator::allocateFastCase): 327 * bmalloc/Chunk.h: 328 * bmalloc/Deallocator.cpp: 329 (bmalloc::Deallocator::scavenge): 330 (bmalloc::Deallocator::processObjectLog): 331 (bmalloc::Deallocator::deallocateSlowCase): 332 (bmalloc::Deallocator::deallocateXSmallLine): 333 (bmalloc::Deallocator::allocateXSmallLine): 334 * bmalloc/Deallocator.h: 335 (bmalloc::Deallocator::deallocateFastCase): 336 * bmalloc/Heap.cpp: 337 (bmalloc::Heap::scavenge): 338 (bmalloc::Heap::scavengeXSmallPages): 339 (bmalloc::Heap::allocateXSmallLineSlowCase): 340 * bmalloc/Heap.h: 341 (bmalloc::Heap::deallocateXSmallLine): 342 (bmalloc::Heap::allocateXSmallLine): 343 * bmalloc/LargeChunk.h: 344 (bmalloc::LargeChunk::get): 345 (bmalloc::LargeChunk::endTag): 346 * bmalloc/Line.h: 347 * bmalloc/MediumAllocator.h: 348 (bmalloc::MediumAllocator::allocate): 349 (bmalloc::MediumAllocator::refill): 350 * bmalloc/ObjectType.cpp: 351 (bmalloc::objectType): 352 * bmalloc/ObjectType.h: 353 (bmalloc::isXSmall): 354 (bmalloc::isSmall): 355 (bmalloc::isMedium): 356 (bmalloc::isLarge): 357 (bmalloc::isSmallOrMedium): Deleted. 358 * bmalloc/SegregatedFreeList.h: I boiler-plate copied existing code for 359 handling small objects. There's probably a reasonable way to share this 360 code in the future -- I'll look into that once it's stopped changing. 361 362 * bmalloc/Sizes.h: Tweaked size classes to make Membuster happy. This 363 is the main reason things got slower. 364 365 * bmalloc/SmallAllocator.h: 366 (bmalloc::SmallAllocator::allocate): 367 * bmalloc/SmallTraits.h: 368 * bmalloc/VMHeap.cpp: 369 (bmalloc::VMHeap::allocateXSmallChunk): 370 * bmalloc/VMHeap.h: 371 (bmalloc::VMHeap::allocateXSmallPage): 372 (bmalloc::VMHeap::deallocateXSmallPage): 373 * bmalloc/XSmallAllocator.h: Added. 374 (bmalloc::XSmallAllocator::isNull): 375 (bmalloc::XSmallAllocator::canAllocate): 376 (bmalloc::XSmallAllocator::XSmallAllocator): 377 (bmalloc::XSmallAllocator::line): 378 (bmalloc::XSmallAllocator::allocate): 379 (bmalloc::XSmallAllocator::objectCount): 380 (bmalloc::XSmallAllocator::derefCount): 381 (bmalloc::XSmallAllocator::refill): 382 * bmalloc/XSmallChunk.h: Added. 383 * bmalloc/XSmallLine.h: Added. 384 * bmalloc/XSmallPage.h: Added. 385 * bmalloc/XSmallTraits.h: Added. 386 * bmalloc/bmalloc.h: 387 (bmalloc::api::realloc): Boiler-plate copy, as above. 388 3892014-04-14 Geoffrey Garen <ggaren@apple.com> 390 391 MallocBench should scavenge explicitly instead of waiting 392 https://bugs.webkit.org/show_bug.cgi?id=131661 393 394 Reviewed by Andreas Kling. 395 396 Added explicit scavenge support to bmalloc. This isn't a memory win, 397 since bmalloc's per-thread cache is so small. But it makes testing 398 simpler. 399 400 * bmalloc/Allocator.cpp: 401 (bmalloc::Allocator::~Allocator): 402 (bmalloc::Allocator::scavenge): 403 * bmalloc/Allocator.h: 404 * bmalloc/Cache.cpp: 405 (bmalloc::Cache::operator new): 406 (bmalloc::Cache::operator delete): 407 (bmalloc::Cache::Cache): 408 (bmalloc::Cache::scavenge): 409 * bmalloc/Cache.h: 410 * bmalloc/Deallocator.cpp: 411 (bmalloc::Deallocator::~Deallocator): 412 (bmalloc::Deallocator::scavenge): 413 * bmalloc/Deallocator.h: Factored existing scavenging code into helper 414 functions, for reuse. 415 416 * bmalloc/Heap.cpp: 417 (bmalloc::sleep): 418 (bmalloc::Heap::concurrentScavenge): 419 (bmalloc::Heap::scavenge): 420 (bmalloc::Heap::scavengeSmallPages): 421 (bmalloc::Heap::scavengeMediumPages): 422 (bmalloc::Heap::scavengeLargeRanges): 423 * bmalloc/Heap.h: Made scavenge sleep duration a parameter. Forced 424 scavenging -- in response to a benchmark or a low memory warning -- 425 wants to complete as soon as possible, so its sleep duration is 0. 426 427 * bmalloc/bmalloc.h: 428 (bmalloc::api::scavenge): 429 * bmalloc/mbmalloc.cpp: Exported the scavenge API for MallocBench's use. 430 4312014-04-14 Geoffrey Garen <ggaren@apple.com> 432 433 Use 4kB pages on Mac 434 https://bugs.webkit.org/show_bug.cgi?id=131658 435 436 Reviewed by Sam Weinig. 437 438 This reduces memory use a lot on Membuster: 439 440 base patch Δ 441 Execution Time: 442 reddit_memory_warning 18ms 17ms ^ 1.06x faster 443 flickr_memory_warning 34ms 36ms ! 1.06x slower 444 theverge_memory_warning 39ms 41ms ! 1.05x slower 445 446 <geometric mean> 29ms 29ms ! 1.02x slower 447 <arithmetic mean> 30ms 31ms ! 1.03x slower 448 <harmonic mean> 27ms 27ms ^ 1.0x faster 449 450 Peak Memory: 451 reddit_memory_warning 16,412kB 16,436kB ! 1.0x bigger 452 flickr_memory_warning 30,120kB 30,184kB ! 1.0x bigger 453 theverge_memory_warning 33,408kB 33,420kB ! 1.0x bigger 454 455 <geometric mean> 25,466kB 25,499kB ! 1.0x bigger 456 <arithmetic mean> 26,647kB 26,680kB ! 1.0x bigger 457 <harmonic mean> 24,181kB 24,214kB ! 1.0x bigger 458 459 Memory at End: 460 reddit_memory_warning 2,404kB 1,920kB ^ 1.25x smaller 461 flickr_memory_warning 3,764kB 3,072kB ^ 1.23x smaller 462 theverge_memory_warning 3,648kB 3,132kB ^ 1.16x smaller 463 464 <geometric mean> 3,208kB 2,644kB ^ 1.21x smaller 465 <arithmetic mean> 3,272kB 2,708kB ^ 1.21x smaller 466 <harmonic mean> 3,139kB 2,574kB ^ 1.22x smaller 467 468 469 * bmalloc.xcodeproj/project.pbxproj: 470 * bmalloc/BPlatform.h: Added. 471 * bmalloc/VMAllocate.h: Only use 16kB pages on iOS because the page size 472 is 4kB on Mac. 473 4742014-04-14 Alexey Proskuryakov <ap@apple.com> 475 476 Fixed svn:ignore on bmalloc.xcodeproj, it had erroneous leading spaces. 477 478 * bmalloc.xcodeproj: Modified property svn:ignore. 479 4802014-04-13 Geoffrey Garen <ggaren@apple.com> 481 482 Fixed some mbmalloc exports 483 https://bugs.webkit.org/show_bug.cgi?id=131599 484 485 Reviewed by Ryosuke Niwa. 486 487 * bmalloc.xcodeproj/project.pbxproj: Made some headers a private part 488 of the project, so we can call them from API. 489 490 * bmalloc/mbmalloc.cpp: Marked the mbmalloc functions with default 491 visibility, so they show up as exported in the .dylib. 492 4932014-04-09 Geoffrey Garen <ggaren@apple.com> 494 495 Put bmalloc headers in the right place 496 https://bugs.webkit.org/show_bug.cgi?id=131464 497 498 Reviewed by Mark Rowe. 499 500 * Configurations/bmalloc.xcconfig: Set PRIVATE_HEADERS_FOLDER_PATH to 501 specify that we don't just want to dump all of our generically-named 502 headers into /usr/local/include. 503 5042014-04-08 Geoffrey Garen <ggaren@apple.com> 505 506 Made bmalloc more #include friendly 507 https://bugs.webkit.org/show_bug.cgi?id=131386 508 509 Reviewed by Andreas Kling. 510 511 Marked a bunch of headers private so they can be used from client code 512 that #includes bmalloc.h. 513 514 Renamed ASSERT macros to BASSERT. This matches their header, which already 515 had to be renamed, and fixes conflicts with WTF's ASSERT macros. 516 517 * bmalloc.xcodeproj/project.pbxproj: 518 * bmalloc/Allocator.cpp: 519 (bmalloc::Allocator::allocateSlowCase): 520 * bmalloc/AsyncTask.h: 521 (bmalloc::Function>::runSlowCase): 522 * bmalloc/BAssert.h: 523 * bmalloc/BoundaryTag.h: 524 (bmalloc::BoundaryTag::setSize): 525 * bmalloc/BoundaryTagInlines.h: 526 (bmalloc::validate): 527 (bmalloc::BoundaryTag::init): 528 (bmalloc::BoundaryTag::deallocate): 529 (bmalloc::BoundaryTag::splitLarge): 530 (bmalloc::BoundaryTag::allocate): 531 * bmalloc/Chunk.h: 532 * bmalloc/Deallocator.cpp: 533 (bmalloc::Deallocator::processObjectLog): 534 (bmalloc::Deallocator::deallocateSlowCase): 535 * bmalloc/Deallocator.h: 536 (bmalloc::Deallocator::deallocateFastCase): 537 * bmalloc/FixedVector.h: 538 (bmalloc::Capacity>::operator): 539 (bmalloc::Capacity>::push): 540 (bmalloc::Capacity>::pop): 541 (bmalloc::Capacity>::shrink): 542 * bmalloc/Heap.cpp: 543 (bmalloc::Heap::allocateLarge): 544 * bmalloc/LargeChunk.h: 545 (bmalloc::LargeChunk::get): 546 (bmalloc::LargeChunk::endTag): 547 * bmalloc/Line.h: 548 (bmalloc::Line<Traits>::concurrentRef): 549 (bmalloc::Line<Traits>::deref): 550 * bmalloc/MediumAllocator.h: 551 (bmalloc::MediumAllocator::allocate): 552 * bmalloc/ObjectType.h: 553 (bmalloc::isSmall): 554 * bmalloc/Page.h: 555 (bmalloc::Page<Traits>::ref): 556 (bmalloc::Page<Traits>::deref): 557 * bmalloc/PerThread.h: 558 (bmalloc::PerThread<T>::getSlowCase): 559 * bmalloc/SegregatedFreeList.cpp: 560 (bmalloc::SegregatedFreeList::SegregatedFreeList): 561 (bmalloc::SegregatedFreeList::insert): 562 * bmalloc/SmallAllocator.h: 563 (bmalloc::SmallAllocator::allocate): 564 (bmalloc::SmallAllocator::refill): 565 * bmalloc/Syscall.h: 566 * bmalloc/VMAllocate.h: 567 (bmalloc::vmValidate): 568 (bmalloc::vmAllocate): 569 (bmalloc::vmDeallocatePhysicalPagesSloppy): 570 * bmalloc/Vector.h: 571 (bmalloc::Vector<T>::operator): 572 (bmalloc::Vector<T>::pop): 573 (bmalloc::Vector<T>::shrink): 574 * bmalloc/XLargeChunk.h: 575 (bmalloc::XLargeChunk::range): 576 (bmalloc::XLargeChunk::size): 577 5782014-04-08 Geoffrey Garen <ggaren@apple.com> 579 580 Removed an unused file. 581 582 Unreviewed. 583 584 * bmalloc/AsyncTask.cpp: Removed. 585 5862014-04-07 Geoffrey Garen <ggaren@apple.com> 587 588 Build bmalloc on Mac 589 https://bugs.webkit.org/show_bug.cgi?id=131333 590 591 Reviewed by Mark Rowe. 592 593 * Makefile: Added. For make clients. 594 595 These files are required for building any project in WebKit. I copied 596 them from WTF: 597 * Configurations: Added. 598 * Configurations/Base.xcconfig: Added. 599 * Configurations/DebugRelease.xcconfig: Added. 600 * Configurations/bmalloc.xcconfig: Added. 601 * Configurations/iOS.xcconfig: Added. 602 * Configurations/mbmalloc.xcconfig: Added. 603 604 * bmalloc.xcodeproj/project.pbxproj: I removed per-project-file stuff 605 from here because everything is in .xcconfig files now. 606 607 I had to fix a bunch of minor warnings, since they're enabled in our 608 .xcconfig files: 609 610 * bmalloc/AsyncTask.h: 611 (bmalloc::Function>::AsyncTask): 612 * bmalloc/BAssert.h: 613 * bmalloc/BoundaryTagInlines.h: 614 (bmalloc::validate): 615 * bmalloc/Heap.cpp: 616 (bmalloc::Heap::Heap): 617 (bmalloc::Heap::allocateLarge): 618 (bmalloc::Heap::deallocateLarge): 619 * bmalloc/Mutex.h: 620 (bmalloc::Mutex::Mutex): Deleted. 621 * bmalloc/VMAllocate.h: 622 (bmalloc::vmValidate): 623 * bmalloc/mbmalloc.cpp: 624 6252014-04-07 Geoffrey Garen <ggaren@apple.com> 626 627 bmalloc: Fixed a leak in the per-thread cache 628 https://bugs.webkit.org/show_bug.cgi?id=131330 629 630 Reviewed by Andreas Kling. 631 632 Remember to deallocate our line caches upon thread exit. 633 634 * bmalloc/Deallocator.cpp: 635 (bmalloc::Deallocator::~Deallocator): 636 6372014-04-07 Geoffrey Garen <ggaren@apple.com> 638 639 bmalloc: rolled out the tryLock experiment 640 https://bugs.webkit.org/show_bug.cgi?id=131328 641 642 Reviewed by Andreas Kling. 643 644 It wasn't a speedup. 645 646 * bmalloc.xcodeproj/project.pbxproj: 647 * bmalloc/Allocator.cpp: 648 (bmalloc::Allocator::processSmallAllocatorLog): 649 (bmalloc::Allocator::processMediumAllocatorLog): 650 * bmalloc/Deallocator.cpp: 651 (bmalloc::Deallocator::processObjectLog): 652 (bmalloc::Deallocator::deallocateSlowCase): 653 (bmalloc::Deallocator::deallocateSmallLine): 654 (bmalloc::Deallocator::deallocateMediumLine): 655 * bmalloc/Deallocator.h: 656 (bmalloc::Deallocator::deallocateFastCase): 657 * bmalloc/Heap.h: 658 (bmalloc::Heap::deallocateSmallLine): 659 (bmalloc::Heap::deallocateMediumLine): 660 * bmalloc/Line.h: 661 (bmalloc::Line<Traits>::deref): 662 * bmalloc/Page.h: 663 (bmalloc::Page<Traits>::deref): 664 6652014-04-07 Geoffrey Garen <ggaren@apple.com> 666 667 bmalloc 668 https://bugs.webkit.org/show_bug.cgi?id=131170 669 670 Reviewed by Andreas Kling. 671 672 Initial commit. 673 674 * bmalloc: Added. 675 * bmalloc.xcodeproj: Added. 676 * bmalloc.xcodeproj/project.pbxproj: Added. 677 * bmalloc/Algorithm.h: Added. 678 (bmalloc::max): 679 (bmalloc::min): 680 (bmalloc::mask): 681 (bmalloc::test): 682 (bmalloc::roundUpToMultipleOf): 683 (bmalloc::roundDownToMultipleOf): 684 (bmalloc::sizeOf): 685 (bmalloc::bitCount): 686 (bmalloc::isPowerOfTwo): 687 * bmalloc/Allocator.cpp: Added. 688 (bmalloc::Allocator::Allocator): 689 (bmalloc::Allocator::~Allocator): 690 (bmalloc::Allocator::log): 691 (bmalloc::Allocator::processSmallAllocatorLog): 692 (bmalloc::Allocator::processMediumAllocatorLog): 693 (bmalloc::Allocator::allocateLarge): 694 (bmalloc::Allocator::allocateXLarge): 695 (bmalloc::Allocator::allocateMedium): 696 (bmalloc::Allocator::allocateSlowCase): 697 * bmalloc/Allocator.h: Added. 698 (bmalloc::Allocator::smallAllocatorFor): 699 (bmalloc::Allocator::allocateFastCase): 700 (bmalloc::Allocator::allocate): 701 * bmalloc/AsyncTask.cpp: Added. 702 (bmalloc::AsyncTask<Function>::runSlowCase): 703 (bmalloc::AsyncTask<Function>::pthreadEntryPoint): 704 (bmalloc::AsyncTask<Function>::entryPoint): 705 * bmalloc/AsyncTask.h: Added. 706 (bmalloc::Function>::AsyncTask): 707 (bmalloc::Function>::join): 708 (bmalloc::Function>::run): 709 (bmalloc::Function>::runSlowCase): 710 (bmalloc::Function>::pthreadEntryPoint): 711 (bmalloc::Function>::entryPoint): 712 * bmalloc/BAssert.h: Added. 713 * bmalloc/BeginTag.h: Added. 714 (bmalloc::BeginTag::isInFreeList): 715 * bmalloc/BoundaryTag.h: Added. 716 (bmalloc::BoundaryTag::isXLarge): 717 (bmalloc::BoundaryTag::setXLarge): 718 (bmalloc::BoundaryTag::isFree): 719 (bmalloc::BoundaryTag::setFree): 720 (bmalloc::BoundaryTag::isEnd): 721 (bmalloc::BoundaryTag::setEnd): 722 (bmalloc::BoundaryTag::hasPhysicalPages): 723 (bmalloc::BoundaryTag::setHasPhysicalPages): 724 (bmalloc::BoundaryTag::isNull): 725 (bmalloc::BoundaryTag::clear): 726 (bmalloc::BoundaryTag::size): 727 (bmalloc::BoundaryTag::setSize): 728 (bmalloc::BoundaryTag::prev): 729 (bmalloc::BoundaryTag::next): 730 * bmalloc/BoundaryTagInlines.h: Added. 731 (bmalloc::validate): 732 (bmalloc::validatePrev): 733 (bmalloc::validateNext): 734 (bmalloc::BoundaryTag::init): 735 (bmalloc::BoundaryTag::mergeLargeLeft): 736 (bmalloc::BoundaryTag::mergeLargeRight): 737 (bmalloc::BoundaryTag::mergeLarge): 738 (bmalloc::BoundaryTag::deallocate): 739 (bmalloc::BoundaryTag::splitLarge): 740 (bmalloc::BoundaryTag::allocate): 741 * bmalloc/Cache.cpp: Added. 742 (bmalloc::Cache::operator new): 743 (bmalloc::Cache::operator delete): 744 (bmalloc::Cache::Cache): 745 (bmalloc::Cache::allocateSlowCase): 746 (bmalloc::Cache::allocateSlowCaseNullCache): 747 (bmalloc::Cache::deallocateSlowCase): 748 (bmalloc::Cache::deallocateSlowCaseNullCache): 749 * bmalloc/Cache.h: Added. 750 (bmalloc::Cache::allocator): 751 (bmalloc::Cache::deallocator): 752 (bmalloc::Cache::allocateFastCase): 753 (bmalloc::Cache::deallocateFastCase): 754 (bmalloc::Cache::allocate): 755 (bmalloc::Cache::deallocate): 756 * bmalloc/Chunk.h: Added. 757 (bmalloc::Chunk::begin): 758 (bmalloc::Chunk::end): 759 (bmalloc::Chunk::lines): 760 (bmalloc::Chunk::pages): 761 * bmalloc/Deallocator.cpp: Added. 762 (bmalloc::Deallocator::Deallocator): 763 (bmalloc::Deallocator::~Deallocator): 764 (bmalloc::Deallocator::deallocateLarge): 765 (bmalloc::Deallocator::deallocateXLarge): 766 (bmalloc::Deallocator::processObjectLog): 767 (bmalloc::Deallocator::deallocateSlowCase): 768 (bmalloc::Deallocator::deallocateSmallLine): 769 (bmalloc::Deallocator::allocateSmallLine): 770 (bmalloc::Deallocator::deallocateMediumLine): 771 (bmalloc::Deallocator::allocateMediumLine): 772 * bmalloc/Deallocator.h: Added. 773 (bmalloc::Deallocator::deallocateFastCase): 774 (bmalloc::Deallocator::deallocate): 775 * bmalloc/EndTag.h: Added. 776 (bmalloc::EndTag::operator=): 777 * bmalloc/FixedVector.h: Added. 778 (bmalloc::FixedVector::begin): 779 (bmalloc::FixedVector::end): 780 (bmalloc::FixedVector::size): 781 (bmalloc::FixedVector::capacity): 782 (bmalloc::FixedVector::clear): 783 (bmalloc::FixedVector::isEmpty): 784 (bmalloc::Capacity>::FixedVector): 785 (bmalloc::Capacity>::operator): 786 (bmalloc::Capacity>::push): 787 (bmalloc::Capacity>::pop): 788 (bmalloc::Capacity>::shrink): 789 * bmalloc/Heap.cpp: Added. 790 (bmalloc::sleep): 791 (bmalloc::Heap::Heap): 792 (bmalloc::Heap::concurrentScavenge): 793 (bmalloc::Heap::scavengeSmallPages): 794 (bmalloc::Heap::scavengeMediumPages): 795 (bmalloc::Heap::scavengeLargeRanges): 796 (bmalloc::Heap::allocateSmallLineSlowCase): 797 (bmalloc::Heap::allocateMediumLineSlowCase): 798 (bmalloc::Heap::allocateXLarge): 799 (bmalloc::Heap::deallocateXLarge): 800 (bmalloc::Heap::allocateLarge): 801 (bmalloc::Heap::deallocateLarge): 802 * bmalloc/Heap.h: Added. 803 (bmalloc::Heap::deallocateSmallLine): 804 (bmalloc::Heap::allocateSmallLine): 805 (bmalloc::Heap::deallocateMediumLine): 806 (bmalloc::Heap::allocateMediumLine): 807 * bmalloc/Inline.h: Added. 808 * bmalloc/LargeChunk.h: Added. 809 (bmalloc::LargeChunk::begin): 810 (bmalloc::LargeChunk::end): 811 (bmalloc::LargeChunk::create): 812 (bmalloc::LargeChunk::get): 813 (bmalloc::LargeChunk::beginTag): 814 (bmalloc::LargeChunk::endTag): 815 * bmalloc/Line.h: Added. 816 (bmalloc::Line<Traits>::begin): 817 (bmalloc::Line<Traits>::end): 818 (bmalloc::Line<Traits>::concurrentRef): 819 (bmalloc::Line<Traits>::deref): 820 * bmalloc/MediumAllocator.h: Added. 821 (bmalloc::MediumAllocator::isNull): 822 (bmalloc::MediumAllocator::MediumAllocator): 823 (bmalloc::MediumAllocator::line): 824 (bmalloc::MediumAllocator::allocate): 825 (bmalloc::MediumAllocator::derefCount): 826 (bmalloc::MediumAllocator::refill): 827 * bmalloc/MediumChunk.h: Added. 828 * bmalloc/MediumLine.h: Added. 829 * bmalloc/MediumPage.h: Added. 830 * bmalloc/MediumTraits.h: Added. 831 * bmalloc/Mutex.cpp: Added. 832 (bmalloc::Mutex::lockSlowCase): 833 * bmalloc/Mutex.h: Added. 834 (bmalloc::Mutex::Mutex): 835 (bmalloc::Mutex::try_lock): 836 (bmalloc::Mutex::lock): 837 (bmalloc::Mutex::unlock): 838 * bmalloc/ObjectType.cpp: Added. 839 (bmalloc::objectType): 840 * bmalloc/ObjectType.h: Added. 841 (bmalloc::isSmallOrMedium): 842 (bmalloc::isSmall): 843 * bmalloc/Page.h: Added. 844 (bmalloc::Page<Traits>::ref): 845 (bmalloc::Page<Traits>::deref): 846 (bmalloc::Page<Traits>::refCount): 847 * bmalloc/PerProcess.h: Added. 848 (bmalloc::PerProcess::mutex): 849 (bmalloc::PerProcess<T>::getFastCase): 850 (bmalloc::PerProcess<T>::get): 851 (bmalloc::PerProcess<T>::getSlowCase): 852 * bmalloc/PerThread.h: Added. 853 (bmalloc::PerThreadStorage<Cache>::get): 854 (bmalloc::PerThreadStorage<Cache>::init): 855 (bmalloc::PerThreadStorage::get): 856 (bmalloc::PerThreadStorage::init): 857 (bmalloc::PerThread<T>::getFastCase): 858 (bmalloc::PerThread<T>::get): 859 (bmalloc::PerThread<T>::destructor): 860 (bmalloc::PerThread<T>::getSlowCase): 861 * bmalloc/Range.h: Added. 862 (bmalloc::Range::Range): 863 (bmalloc::Range::begin): 864 (bmalloc::Range::end): 865 (bmalloc::Range::size): 866 (bmalloc::Range::operator!): 867 (bmalloc::Range::operator<): 868 * bmalloc/SegregatedFreeList.cpp: Added. 869 (bmalloc::SegregatedFreeList::SegregatedFreeList): 870 (bmalloc::SegregatedFreeList::insert): 871 (bmalloc::SegregatedFreeList::takeGreedy): 872 (bmalloc::SegregatedFreeList::take): 873 * bmalloc/SegregatedFreeList.h: Added. 874 * bmalloc/Sizes.h: Added. 875 * bmalloc/SmallAllocator.h: Added. 876 (bmalloc::SmallAllocator::isNull): 877 (bmalloc::SmallAllocator::canAllocate): 878 (bmalloc::SmallAllocator::SmallAllocator): 879 (bmalloc::SmallAllocator::line): 880 (bmalloc::SmallAllocator::allocate): 881 (bmalloc::SmallAllocator::objectCount): 882 (bmalloc::SmallAllocator::derefCount): 883 (bmalloc::SmallAllocator::refill): 884 * bmalloc/SmallChunk.h: Added. 885 * bmalloc/SmallLine.h: Added. 886 * bmalloc/SmallPage.h: Added. 887 * bmalloc/SmallTraits.h: Added. 888 * bmalloc/Syscall.h: Added. 889 * bmalloc/VMAllocate.h: Added. 890 (bmalloc::vmSize): 891 (bmalloc::vmValidate): 892 (bmalloc::vmAllocate): 893 (bmalloc::vmDeallocate): 894 (bmalloc::vmDeallocatePhysicalPages): 895 (bmalloc::vmAllocatePhysicalPages): 896 (bmalloc::vmDeallocatePhysicalPagesSloppy): 897 (bmalloc::vmAllocatePhysicalPagesSloppy): 898 * bmalloc/VMHeap.cpp: Added. 899 (bmalloc::VMHeap::VMHeap): 900 (bmalloc::VMHeap::allocateSmallChunk): 901 (bmalloc::VMHeap::allocateMediumChunk): 902 (bmalloc::VMHeap::allocateLargeChunk): 903 * bmalloc/VMHeap.h: Added. 904 (bmalloc::VMHeap::allocateSmallPage): 905 (bmalloc::VMHeap::allocateMediumPage): 906 (bmalloc::VMHeap::allocateLargeRange): 907 (bmalloc::VMHeap::deallocateSmallPage): 908 (bmalloc::VMHeap::deallocateMediumPage): 909 (bmalloc::VMHeap::deallocateLargeRange): 910 * bmalloc/Vector.h: Added. 911 (bmalloc::Vector::begin): 912 (bmalloc::Vector::end): 913 (bmalloc::Vector::size): 914 (bmalloc::Vector::capacity): 915 (bmalloc::Vector::last): 916 (bmalloc::Vector::pop): 917 (bmalloc::Vector<T>::Vector): 918 (bmalloc::Vector<T>::~Vector): 919 (bmalloc::Vector<T>::operator): 920 (bmalloc::Vector<T>::push): 921 (bmalloc::Vector<T>::pop): 922 (bmalloc::Vector<T>::shrink): 923 (bmalloc::Vector<T>::reallocateBuffer): 924 (bmalloc::Vector<T>::shrinkCapacity): 925 (bmalloc::Vector<T>::growCapacity): 926 * bmalloc/XLargeChunk.h: Added. 927 (bmalloc::XLargeChunk::get): 928 (bmalloc::XLargeChunk::begin): 929 (bmalloc::XLargeChunk::XLargeChunk): 930 (bmalloc::XLargeChunk::create): 931 (bmalloc::XLargeChunk::destroy): 932 (bmalloc::XLargeChunk::range): 933 (bmalloc::XLargeChunk::size): 934 * bmalloc/bmalloc.h: Added. 935 (bmalloc::api::malloc): 936 (bmalloc::api::free): 937 (bmalloc::api::realloc): 938 * bmalloc/mbmalloc.cpp: Added. 939 940