| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/heap/gc-tracer.h" | 7 #include "src/heap/gc-tracer.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 double durations = new_space_allocation_duration_since_gc_; | 603 double durations = new_space_allocation_duration_since_gc_; |
| 604 AllocationEventBuffer::const_iterator iter = allocation_events_.begin(); | 604 AllocationEventBuffer::const_iterator iter = allocation_events_.begin(); |
| 605 const size_t max_bytes = static_cast<size_t>(-1); | 605 const size_t max_bytes = static_cast<size_t>(-1); |
| 606 while (iter != allocation_events_.end() && bytes < max_bytes - bytes && | 606 while (iter != allocation_events_.end() && bytes < max_bytes - bytes && |
| 607 durations < time_ms) { | 607 durations < time_ms) { |
| 608 bytes += iter->allocation_in_bytes_; | 608 bytes += iter->allocation_in_bytes_; |
| 609 durations += iter->duration_; | 609 durations += iter->duration_; |
| 610 ++iter; | 610 ++iter; |
| 611 } | 611 } |
| 612 | 612 |
| 613 if (durations < time_ms) return 0; | 613 if (durations == 0.0) return 0; |
| 614 | 614 |
| 615 bytes = static_cast<size_t>(bytes * (time_ms / durations) + 0.5); | 615 bytes = static_cast<size_t>(bytes * (time_ms / durations) + 0.5); |
| 616 // Return at least 1 since 0 means "no data". | 616 // Return at least 1 since 0 means "no data". |
| 617 return std::max<size_t>(bytes, 1); | 617 return std::max<size_t>(bytes, 1); |
| 618 } | 618 } |
| 619 | 619 |
| 620 | 620 |
| 621 size_t GCTracer::CurrentNewSpaceAllocationThroughputInBytesPerMillisecond() |
| 622 const { |
| 623 static const double kThroughputTimeFrame = 5000; |
| 624 size_t allocated_bytes = NewSpaceAllocatedBytesInLast(kThroughputTimeFrame); |
| 625 if (allocated_bytes == 0) return 0; |
| 626 return static_cast<size_t>((allocated_bytes / kThroughputTimeFrame) + 1); |
| 627 } |
| 628 |
| 629 |
| 621 double GCTracer::ContextDisposalRateInMilliseconds() const { | 630 double GCTracer::ContextDisposalRateInMilliseconds() const { |
| 622 if (context_disposal_events_.size() < kRingBufferMaxSize) return 0.0; | 631 if (context_disposal_events_.size() < kRingBufferMaxSize) return 0.0; |
| 623 | 632 |
| 624 double begin = base::OS::TimeCurrentMillis(); | 633 double begin = base::OS::TimeCurrentMillis(); |
| 625 double end = 0.0; | 634 double end = 0.0; |
| 626 ContextDisposalEventBuffer::const_iterator iter = | 635 ContextDisposalEventBuffer::const_iterator iter = |
| 627 context_disposal_events_.begin(); | 636 context_disposal_events_.begin(); |
| 628 while (iter != context_disposal_events_.end()) { | 637 while (iter != context_disposal_events_.end()) { |
| 629 end = iter->time_; | 638 end = iter->time_; |
| 630 ++iter; | 639 ++iter; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 649 | 658 |
| 650 | 659 |
| 651 bool GCTracer::SurvivalEventsRecorded() const { | 660 bool GCTracer::SurvivalEventsRecorded() const { |
| 652 return survival_events_.size() > 0; | 661 return survival_events_.size() > 0; |
| 653 } | 662 } |
| 654 | 663 |
| 655 | 664 |
| 656 void GCTracer::ResetSurvivalEvents() { survival_events_.reset(); } | 665 void GCTracer::ResetSurvivalEvents() { survival_events_.reset(); } |
| 657 } | 666 } |
| 658 } // namespace v8::internal | 667 } // namespace v8::internal |
| OLD | NEW |