| Index: src/heap/spaces.cc
|
| diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc
|
| index c8b8baa0fe3964202fc5305c54b40599b2243a82..f10f7634e4bdd3bdde257d4b76a5d329be98d06c 100644
|
| --- a/src/heap/spaces.cc
|
| +++ b/src/heap/spaces.cc
|
| @@ -2046,24 +2046,6 @@ static void ClearHistograms(Isolate* isolate) {
|
| isolate->js_spill_information()->Clear();
|
| }
|
|
|
| -
|
| -static void ClearCodeKindStatistics(int* code_kind_statistics) {
|
| - for (int i = 0; i < AbstractCode::NUMBER_OF_KINDS; i++) {
|
| - code_kind_statistics[i] = 0;
|
| - }
|
| -}
|
| -static void ReportCodeKindStatistics(int* code_kind_statistics) {
|
| - PrintF("\n Code kind histograms: \n");
|
| - for (int i = 0; i < AbstractCode::NUMBER_OF_KINDS; i++) {
|
| - if (code_kind_statistics[i] > 0) {
|
| - PrintF(" %-20s: %10d bytes\n",
|
| - AbstractCode::Kind2String(static_cast<AbstractCode::Kind>(i)),
|
| - code_kind_statistics[i]);
|
| - }
|
| - }
|
| - PrintF("\n");
|
| -}
|
| -
|
| static int CollectHistogramInfo(HeapObject* obj) {
|
| Isolate* isolate = obj->GetIsolate();
|
| InstanceType type = obj->map()->instance_type();
|
| @@ -2761,127 +2743,6 @@ HeapObject* PagedSpace::SlowAllocateRaw(int size_in_bytes) {
|
| }
|
|
|
| #ifdef DEBUG
|
| -void PagedSpace::ReportCodeStatistics(Isolate* isolate) {
|
| - CommentStatistic* comments_statistics =
|
| - isolate->paged_space_comments_statistics();
|
| - ReportCodeKindStatistics(isolate->code_kind_statistics());
|
| - PrintF("Code size including metadata : %10d bytes\n",
|
| - isolate->code_and_metadata_size());
|
| - PrintF("Bytecode size including metadata: %10d bytes\n",
|
| - isolate->bytecode_and_metadata_size());
|
| - PrintF(
|
| - "Code comment statistics (\" [ comment-txt : size/ "
|
| - "count (average)\"):\n");
|
| - for (int i = 0; i <= CommentStatistic::kMaxComments; i++) {
|
| - const CommentStatistic& cs = comments_statistics[i];
|
| - if (cs.size > 0) {
|
| - PrintF(" %-30s: %10d/%6d (%d)\n", cs.comment, cs.size, cs.count,
|
| - cs.size / cs.count);
|
| - }
|
| - }
|
| - PrintF("\n");
|
| -}
|
| -
|
| -void PagedSpace::ResetCodeStatistics(Isolate* isolate) {
|
| - CommentStatistic* comments_statistics =
|
| - isolate->paged_space_comments_statistics();
|
| - ClearCodeKindStatistics(isolate->code_kind_statistics());
|
| - for (int i = 0; i < CommentStatistic::kMaxComments; i++) {
|
| - comments_statistics[i].Clear();
|
| - }
|
| - comments_statistics[CommentStatistic::kMaxComments].comment = "Unknown";
|
| - comments_statistics[CommentStatistic::kMaxComments].size = 0;
|
| - comments_statistics[CommentStatistic::kMaxComments].count = 0;
|
| -}
|
| -
|
| -
|
| -// Adds comment to 'comment_statistics' table. Performance OK as long as
|
| -// 'kMaxComments' is small
|
| -static void EnterComment(Isolate* isolate, const char* comment, int delta) {
|
| - CommentStatistic* comments_statistics =
|
| - isolate->paged_space_comments_statistics();
|
| - // Do not count empty comments
|
| - if (delta <= 0) return;
|
| - CommentStatistic* cs = &comments_statistics[CommentStatistic::kMaxComments];
|
| - // Search for a free or matching entry in 'comments_statistics': 'cs'
|
| - // points to result.
|
| - for (int i = 0; i < CommentStatistic::kMaxComments; i++) {
|
| - if (comments_statistics[i].comment == NULL) {
|
| - cs = &comments_statistics[i];
|
| - cs->comment = comment;
|
| - break;
|
| - } else if (strcmp(comments_statistics[i].comment, comment) == 0) {
|
| - cs = &comments_statistics[i];
|
| - break;
|
| - }
|
| - }
|
| - // Update entry for 'comment'
|
| - cs->size += delta;
|
| - cs->count += 1;
|
| -}
|
| -
|
| -
|
| -// Call for each nested comment start (start marked with '[ xxx', end marked
|
| -// with ']'. RelocIterator 'it' must point to a comment reloc info.
|
| -static void CollectCommentStatistics(Isolate* isolate, RelocIterator* it) {
|
| - DCHECK(!it->done());
|
| - DCHECK(it->rinfo()->rmode() == RelocInfo::COMMENT);
|
| - const char* tmp = reinterpret_cast<const char*>(it->rinfo()->data());
|
| - if (tmp[0] != '[') {
|
| - // Not a nested comment; skip
|
| - return;
|
| - }
|
| -
|
| - // Search for end of nested comment or a new nested comment
|
| - const char* const comment_txt =
|
| - reinterpret_cast<const char*>(it->rinfo()->data());
|
| - const byte* prev_pc = it->rinfo()->pc();
|
| - int flat_delta = 0;
|
| - it->next();
|
| - while (true) {
|
| - // All nested comments must be terminated properly, and therefore exit
|
| - // from loop.
|
| - DCHECK(!it->done());
|
| - if (it->rinfo()->rmode() == RelocInfo::COMMENT) {
|
| - const char* const txt =
|
| - reinterpret_cast<const char*>(it->rinfo()->data());
|
| - flat_delta += static_cast<int>(it->rinfo()->pc() - prev_pc);
|
| - if (txt[0] == ']') break; // End of nested comment
|
| - // A new comment
|
| - CollectCommentStatistics(isolate, it);
|
| - // Skip code that was covered with previous comment
|
| - prev_pc = it->rinfo()->pc();
|
| - }
|
| - it->next();
|
| - }
|
| - EnterComment(isolate, comment_txt, flat_delta);
|
| -}
|
| -
|
| -// Collects code comment statistics
|
| -static void CollectCodeCommentStatistics(HeapObject* obj, Isolate* isolate) {
|
| - if (!obj->IsCode()) {
|
| - return;
|
| - }
|
| - Code* code = Code::cast(obj);
|
| - RelocIterator it(code);
|
| - int delta = 0;
|
| - const byte* prev_pc = code->instruction_start();
|
| - while (!it.done()) {
|
| - if (it.rinfo()->rmode() == RelocInfo::COMMENT) {
|
| - delta += static_cast<int>(it.rinfo()->pc() - prev_pc);
|
| - CollectCommentStatistics(isolate, &it);
|
| - prev_pc = it.rinfo()->pc();
|
| - }
|
| - it.next();
|
| - }
|
| -
|
| - DCHECK(code->instruction_start() <= prev_pc &&
|
| - prev_pc <= code->instruction_end());
|
| - delta += static_cast<int>(code->instruction_end() - prev_pc);
|
| - EnterComment(isolate, "NoComment", delta);
|
| -}
|
| -
|
| -
|
| void PagedSpace::ReportStatistics() {
|
| int pct = static_cast<int>(Available() * 100 / Capacity());
|
| PrintF(" capacity: %" V8PRIdPTR ", waste: %" V8PRIdPTR
|
| @@ -2899,44 +2760,6 @@ void PagedSpace::ReportStatistics() {
|
| }
|
| #endif
|
|
|
| -static void RecordCodeSizeIncludingMetadata(AbstractCode* abstract_code,
|
| - Isolate* isolate) {
|
| - int size = abstract_code->SizeIncludingMetadata();
|
| - if (abstract_code->IsCode()) {
|
| - size += isolate->code_and_metadata_size();
|
| - isolate->set_code_and_metadata_size(size);
|
| - } else {
|
| - size += isolate->bytecode_and_metadata_size();
|
| - isolate->set_bytecode_and_metadata_size(size);
|
| - }
|
| -}
|
| -
|
| -// Collects code size statistics:
|
| -// - code and metadata size
|
| -// - by code kind (only in debug mode)
|
| -// - by code comment (only in debug mode)
|
| -void PagedSpace::CollectCodeStatistics() {
|
| - Isolate* isolate = heap()->isolate();
|
| - HeapObjectIterator obj_it(this);
|
| - for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) {
|
| - if (obj->IsAbstractCode()) {
|
| - AbstractCode* code = AbstractCode::cast(obj);
|
| - RecordCodeSizeIncludingMetadata(code, isolate);
|
| -#ifdef DEBUG
|
| - isolate->code_kind_statistics()[code->kind()] += code->Size();
|
| - CollectCodeCommentStatistics(obj, isolate);
|
| -#endif
|
| - }
|
| - }
|
| -}
|
| -
|
| -void PagedSpace::ResetCodeAndMetadataStatistics(Isolate* isolate) {
|
| - isolate->set_code_and_metadata_size(0);
|
| - isolate->set_bytecode_and_metadata_size(0);
|
| -#ifdef DEBUG
|
| - ResetCodeStatistics(isolate);
|
| -#endif
|
| -}
|
|
|
| // -----------------------------------------------------------------------------
|
| // MapSpace implementation
|
| @@ -3197,21 +3020,6 @@ void LargeObjectSpace::Verify() {
|
| }
|
| #endif
|
|
|
| -void LargeObjectSpace::CollectCodeStatistics() {
|
| - Isolate* isolate = heap()->isolate();
|
| - LargeObjectIterator obj_it(this);
|
| - for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) {
|
| - if (obj->IsAbstractCode()) {
|
| - AbstractCode* code = AbstractCode::cast(obj);
|
| - RecordCodeSizeIncludingMetadata(code, isolate);
|
| -#ifdef DEBUG
|
| - isolate->code_kind_statistics()[code->kind()] += code->Size();
|
| - CollectCodeCommentStatistics(obj, isolate);
|
| -#endif
|
| - }
|
| - }
|
| -}
|
| -
|
| #ifdef DEBUG
|
| void LargeObjectSpace::Print() {
|
| OFStream os(stdout);
|
|
|