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

Side by Side Diff: src/heap/heap.cc

Issue 2010243003: Move hashmap into base/. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 years, 6 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 | « src/heap/heap.h ('k') | src/heap/heap-inl.h » ('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 "src/heap/heap.h" 5 #include "src/heap/heap.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/ast/scopeinfo.h" 9 #include "src/ast/scopeinfo.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 494
495 495
496 void Heap::RepairFreeListsAfterDeserialization() { 496 void Heap::RepairFreeListsAfterDeserialization() {
497 PagedSpaces spaces(this); 497 PagedSpaces spaces(this);
498 for (PagedSpace* space = spaces.next(); space != NULL; 498 for (PagedSpace* space = spaces.next(); space != NULL;
499 space = spaces.next()) { 499 space = spaces.next()) {
500 space->RepairFreeListsAfterDeserialization(); 500 space->RepairFreeListsAfterDeserialization();
501 } 501 }
502 } 502 }
503 503
504
505 void Heap::MergeAllocationSitePretenuringFeedback( 504 void Heap::MergeAllocationSitePretenuringFeedback(
506 const HashMap& local_pretenuring_feedback) { 505 const base::HashMap& local_pretenuring_feedback) {
507 AllocationSite* site = nullptr; 506 AllocationSite* site = nullptr;
508 for (HashMap::Entry* local_entry = local_pretenuring_feedback.Start(); 507 for (base::HashMap::Entry* local_entry = local_pretenuring_feedback.Start();
509 local_entry != nullptr; 508 local_entry != nullptr;
510 local_entry = local_pretenuring_feedback.Next(local_entry)) { 509 local_entry = local_pretenuring_feedback.Next(local_entry)) {
511 site = reinterpret_cast<AllocationSite*>(local_entry->key); 510 site = reinterpret_cast<AllocationSite*>(local_entry->key);
512 MapWord map_word = site->map_word(); 511 MapWord map_word = site->map_word();
513 if (map_word.IsForwardingAddress()) { 512 if (map_word.IsForwardingAddress()) {
514 site = AllocationSite::cast(map_word.ToForwardingAddress()); 513 site = AllocationSite::cast(map_word.ToForwardingAddress());
515 } 514 }
516 515
517 // We have not validated the allocation site yet, since we have not 516 // We have not validated the allocation site yet, since we have not
518 // dereferenced the site during collecting information. 517 // dereferenced the site during collecting information.
519 // This is an inlined check of AllocationMemento::IsValid. 518 // This is an inlined check of AllocationMemento::IsValid.
520 if (!site->IsAllocationSite() || site->IsZombie()) continue; 519 if (!site->IsAllocationSite() || site->IsZombie()) continue;
521 520
522 int value = 521 int value =
523 static_cast<int>(reinterpret_cast<intptr_t>(local_entry->value)); 522 static_cast<int>(reinterpret_cast<intptr_t>(local_entry->value));
524 DCHECK_GT(value, 0); 523 DCHECK_GT(value, 0);
525 524
526 if (site->IncrementMementoFoundCount(value)) { 525 if (site->IncrementMementoFoundCount(value)) {
527 global_pretenuring_feedback_->LookupOrInsert(site, 526 global_pretenuring_feedback_->LookupOrInsert(site,
528 ObjectHash(site->address())); 527 ObjectHash(site->address()));
529 } 528 }
530 } 529 }
531 } 530 }
532 531
533 532
534 class Heap::PretenuringScope { 533 class Heap::PretenuringScope {
535 public: 534 public:
536 explicit PretenuringScope(Heap* heap) : heap_(heap) { 535 explicit PretenuringScope(Heap* heap) : heap_(heap) {
537 heap_->global_pretenuring_feedback_ = 536 heap_->global_pretenuring_feedback_ = new base::HashMap(
538 new HashMap(HashMap::PointersMatch, kInitialFeedbackCapacity); 537 base::HashMap::PointersMatch, kInitialFeedbackCapacity);
539 } 538 }
540 539
541 ~PretenuringScope() { 540 ~PretenuringScope() {
542 delete heap_->global_pretenuring_feedback_; 541 delete heap_->global_pretenuring_feedback_;
543 heap_->global_pretenuring_feedback_ = nullptr; 542 heap_->global_pretenuring_feedback_ = nullptr;
544 } 543 }
545 544
546 private: 545 private:
547 Heap* heap_; 546 Heap* heap_;
548 }; 547 };
549 548
550 549
551 void Heap::ProcessPretenuringFeedback() { 550 void Heap::ProcessPretenuringFeedback() {
552 bool trigger_deoptimization = false; 551 bool trigger_deoptimization = false;
553 if (FLAG_allocation_site_pretenuring) { 552 if (FLAG_allocation_site_pretenuring) {
554 int tenure_decisions = 0; 553 int tenure_decisions = 0;
555 int dont_tenure_decisions = 0; 554 int dont_tenure_decisions = 0;
556 int allocation_mementos_found = 0; 555 int allocation_mementos_found = 0;
557 int allocation_sites = 0; 556 int allocation_sites = 0;
558 int active_allocation_sites = 0; 557 int active_allocation_sites = 0;
559 558
560 AllocationSite* site = nullptr; 559 AllocationSite* site = nullptr;
561 560
562 // Step 1: Digest feedback for recorded allocation sites. 561 // Step 1: Digest feedback for recorded allocation sites.
563 bool maximum_size_scavenge = MaximumSizeScavenge(); 562 bool maximum_size_scavenge = MaximumSizeScavenge();
564 for (HashMap::Entry* e = global_pretenuring_feedback_->Start(); 563 for (base::HashMap::Entry* e = global_pretenuring_feedback_->Start();
565 e != nullptr; e = global_pretenuring_feedback_->Next(e)) { 564 e != nullptr; e = global_pretenuring_feedback_->Next(e)) {
566 allocation_sites++; 565 allocation_sites++;
567 site = reinterpret_cast<AllocationSite*>(e->key); 566 site = reinterpret_cast<AllocationSite*>(e->key);
568 int found_count = site->memento_found_count(); 567 int found_count = site->memento_found_count();
569 // An entry in the storage does not imply that the count is > 0 because 568 // An entry in the storage does not imply that the count is > 0 because
570 // allocation sites might have been reset due to too many objects dying 569 // allocation sites might have been reset due to too many objects dying
571 // in old space. 570 // in old space.
572 if (found_count > 0) { 571 if (found_count > 0) {
573 DCHECK(site->IsAllocationSite()); 572 DCHECK(site->IsAllocationSite());
574 active_allocation_sites++; 573 active_allocation_sites++;
(...skipping 5832 matching lines...) Expand 10 before | Expand all | Expand 10 after
6407 } 6406 }
6408 6407
6409 6408
6410 // static 6409 // static
6411 int Heap::GetStaticVisitorIdForMap(Map* map) { 6410 int Heap::GetStaticVisitorIdForMap(Map* map) {
6412 return StaticVisitorBase::GetVisitorId(map); 6411 return StaticVisitorBase::GetVisitorId(map);
6413 } 6412 }
6414 6413
6415 } // namespace internal 6414 } // namespace internal
6416 } // namespace v8 6415 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/heap-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698