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

Side by Side Diff: src/source-position-table.cc

Issue 2112853002: Do not record source positions for non-JS or native script code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@simplifyjitlogging
Patch Set: update test expectation Created 4 years, 5 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
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/source-position-table.h" 5 #include "src/source-position-table.h"
6 6
7 #include "src/log.h" 7 #include "src/log.h"
8 #include "src/objects-inl.h" 8 #include "src/objects-inl.h"
9 #include "src/objects.h" 9 #include "src/objects.h"
10 10
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 entry->code_offset = tmp; 97 entry->code_offset = tmp;
98 } else { 98 } else {
99 entry->is_statement = false; 99 entry->is_statement = false;
100 entry->code_offset = -(tmp + 1); 100 entry->code_offset = -(tmp + 1);
101 } 101 }
102 DecodeInt(bytes, index, &entry->source_position); 102 DecodeInt(bytes, index, &entry->source_position);
103 } 103 }
104 104
105 } // namespace 105 } // namespace
106 106
107 SourcePositionTableBuilder::SourcePositionTableBuilder(Isolate* isolate, 107 SourcePositionTableBuilder::SourcePositionTableBuilder(
108 Zone* zone) 108 Isolate* isolate, Zone* zone,
109 SourcePositionTableBuilder::RecordingMode mode)
109 : isolate_(isolate), 110 : isolate_(isolate),
111 mode_(mode),
110 bytes_(zone), 112 bytes_(zone),
111 #ifdef ENABLE_SLOW_DCHECKS 113 #ifdef ENABLE_SLOW_DCHECKS
112 raw_entries_(zone), 114 raw_entries_(zone),
113 #endif 115 #endif
114 previous_(), 116 previous_(),
115 jit_handler_data_(nullptr) { 117 jit_handler_data_(nullptr) {
118 if (Omit()) return;
116 LOG_CODE_EVENT(isolate_, CodeStartLinePosInfoRecordEvent(&jit_handler_data_)); 119 LOG_CODE_EVENT(isolate_, CodeStartLinePosInfoRecordEvent(&jit_handler_data_));
117 } 120 }
118 121
119 void SourcePositionTableBuilder::EndJitLogging(AbstractCode* code) { 122 void SourcePositionTableBuilder::EndJitLogging(AbstractCode* code) {
123 if (Omit()) return;
120 LOG_CODE_EVENT(isolate_, 124 LOG_CODE_EVENT(isolate_,
121 CodeEndLinePosInfoRecordEvent(code, jit_handler_data_)); 125 CodeEndLinePosInfoRecordEvent(code, jit_handler_data_));
122 } 126 }
123 127
124 void SourcePositionTableBuilder::AddPosition(size_t code_offset, 128 void SourcePositionTableBuilder::AddPosition(size_t code_offset,
125 int source_position, 129 int source_position,
126 bool is_statement) { 130 bool is_statement) {
131 if (Omit()) return;
127 int offset = static_cast<int>(code_offset); 132 int offset = static_cast<int>(code_offset);
128 AddEntry({offset, source_position, is_statement}); 133 AddEntry({offset, source_position, is_statement});
129 } 134 }
130 135
131 void SourcePositionTableBuilder::AddEntry(const PositionTableEntry& entry) { 136 void SourcePositionTableBuilder::AddEntry(const PositionTableEntry& entry) {
132 PositionTableEntry tmp(entry); 137 PositionTableEntry tmp(entry);
133 SubtractFromEntry(tmp, previous_); 138 SubtractFromEntry(tmp, previous_);
134 EncodeEntry(bytes_, tmp); 139 EncodeEntry(bytes_, tmp);
135 previous_ = entry; 140 previous_ = entry;
136 141
137 if (entry.is_statement) { 142 if (entry.is_statement) {
138 LOG_CODE_EVENT(isolate_, CodeLinePosInfoAddStatementPositionEvent( 143 LOG_CODE_EVENT(isolate_, CodeLinePosInfoAddStatementPositionEvent(
139 jit_handler_data_, entry.code_offset, 144 jit_handler_data_, entry.code_offset,
140 entry.source_position)); 145 entry.source_position));
141 } 146 }
142 LOG_CODE_EVENT(isolate_, CodeLinePosInfoAddPositionEvent( 147 LOG_CODE_EVENT(isolate_, CodeLinePosInfoAddPositionEvent(
143 jit_handler_data_, entry.code_offset, 148 jit_handler_data_, entry.code_offset,
144 entry.source_position)); 149 entry.source_position));
145 150
146 #ifdef ENABLE_SLOW_DCHECKS 151 #ifdef ENABLE_SLOW_DCHECKS
147 raw_entries_.push_back(entry); 152 raw_entries_.push_back(entry);
148 #endif 153 #endif
149 } 154 }
150 155
151 Handle<ByteArray> SourcePositionTableBuilder::ToSourcePositionTable() { 156 Handle<ByteArray> SourcePositionTableBuilder::ToSourcePositionTable() {
152 if (bytes_.empty()) return isolate_->factory()->empty_byte_array(); 157 if (bytes_.empty()) return isolate_->factory()->empty_byte_array();
158 DCHECK(!Omit());
153 159
154 Handle<ByteArray> table = isolate_->factory()->NewByteArray( 160 Handle<ByteArray> table = isolate_->factory()->NewByteArray(
155 static_cast<int>(bytes_.size()), TENURED); 161 static_cast<int>(bytes_.size()), TENURED);
156 162
157 MemCopy(table->GetDataStartAddress(), &*bytes_.begin(), bytes_.size()); 163 MemCopy(table->GetDataStartAddress(), &*bytes_.begin(), bytes_.size());
158 164
159 #ifdef ENABLE_SLOW_DCHECKS 165 #ifdef ENABLE_SLOW_DCHECKS
160 // Brute force testing: Record all positions and decode 166 // Brute force testing: Record all positions and decode
161 // the entire table to verify they are identical. 167 // the entire table to verify they are identical.
162 auto raw = raw_entries_.begin(); 168 auto raw = raw_entries_.begin();
163 for (SourcePositionTableIterator encoded(*table); !encoded.done(); 169 for (SourcePositionTableIterator encoded(*table); !encoded.done();
164 encoded.Advance(), raw++) { 170 encoded.Advance(), raw++) {
165 DCHECK(raw != raw_entries_.end()); 171 DCHECK(raw != raw_entries_.end());
166 DCHECK_EQ(encoded.code_offset(), raw->code_offset); 172 DCHECK_EQ(encoded.code_offset(), raw->code_offset);
167 DCHECK_EQ(encoded.source_position(), raw->source_position); 173 DCHECK_EQ(encoded.source_position(), raw->source_position);
168 DCHECK_EQ(encoded.is_statement(), raw->is_statement); 174 DCHECK_EQ(encoded.is_statement(), raw->is_statement);
169 } 175 }
170 DCHECK(raw == raw_entries_.end()); 176 DCHECK(raw == raw_entries_.end());
177 // No additional source positions after creating the table.
178 mode_ = OMIT_SOURCE_POSITIONS;
171 #endif 179 #endif
172
173 return table; 180 return table;
174 } 181 }
175 182
176 SourcePositionTableIterator::SourcePositionTableIterator(ByteArray* byte_array) 183 SourcePositionTableIterator::SourcePositionTableIterator(ByteArray* byte_array)
177 : table_(byte_array), index_(0), current_() { 184 : table_(byte_array), index_(0), current_() {
178 Advance(); 185 Advance();
179 } 186 }
180 187
181 void SourcePositionTableIterator::Advance() { 188 void SourcePositionTableIterator::Advance() {
182 DCHECK(!done()); 189 DCHECK(!done());
183 DCHECK(index_ >= 0 && index_ <= table_->length()); 190 DCHECK(index_ >= 0 && index_ <= table_->length());
184 if (index_ == table_->length()) { 191 if (index_ == table_->length()) {
185 index_ = kDone; 192 index_ = kDone;
186 } else { 193 } else {
187 PositionTableEntry tmp; 194 PositionTableEntry tmp;
188 DecodeEntry(table_, &index_, &tmp); 195 DecodeEntry(table_, &index_, &tmp);
189 AddAndSetEntry(current_, tmp); 196 AddAndSetEntry(current_, tmp);
190 } 197 }
191 } 198 }
192 199
193 } // namespace internal 200 } // namespace internal
194 } // namespace v8 201 } // namespace v8
OLDNEW
« no previous file with comments | « src/source-position-table.h ('k') | test/unittests/interpreter/bytecode-array-writer-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698