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

Unified Diff: src/objects.cc

Issue 2788413004: [inspector] cache stack frame for call sites (Closed)
Patch Set: reverted v8-debugger change Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index c62a434d91c72859484e0e08fa601435ad3c6860..bfb5b42c12d03f49370e7a7b2da4eab8b7a4cc9c 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -14128,6 +14128,55 @@ void Code::ClearInlineCaches() {
}
}
+namespace {
+template <typename Code>
+void SetStackFrameCacheCommon(Handle<Code> code,
+ Handle<UnseededNumberDictionary> cache) {
+ Handle<Object> maybe_table(code->source_position_table(), code->GetIsolate());
+ if (maybe_table->IsSourcePositionTableWithFrameCache()) {
+ Handle<SourcePositionTableWithFrameCache>::cast(maybe_table)
+ ->set_stack_frame_cache(*cache);
+ return;
+ }
+ DCHECK(maybe_table->IsByteArray());
+ Handle<ByteArray> table(Handle<ByteArray>::cast(maybe_table));
+ Handle<SourcePositionTableWithFrameCache> table_with_cache =
+ code->GetIsolate()->factory()->NewSourcePositionTableWithFrameCache(
+ table, cache);
+ code->set_source_position_table(*table_with_cache);
+}
+} // namespace
+
+// static
+void AbstractCode::SetStackFrameCache(Handle<AbstractCode> abstract_code,
+ Handle<UnseededNumberDictionary> cache) {
+ if (abstract_code->IsCode()) {
+ SetStackFrameCacheCommon(handle(abstract_code->GetCode()), cache);
+ } else {
+ SetStackFrameCacheCommon(handle(abstract_code->GetBytecodeArray()), cache);
+ }
+}
+
+namespace {
+template <typename Code>
+void DropStackFrameCacheCommon(Code* code) {
+ i::Object* maybe_table = code->source_position_table();
+ if (maybe_table->IsByteArray()) return;
+ DCHECK(maybe_table->IsSourcePositionTableWithFrameCache());
+ code->set_source_position_table(
+ i::SourcePositionTableWithFrameCache::cast(maybe_table)
+ ->source_position_table());
+}
+} // namespace
+
+void AbstractCode::DropStackFrameCache() {
+ if (IsCode()) {
+ DropStackFrameCacheCommon(GetCode());
+ } else {
+ DropStackFrameCacheCommon(GetBytecodeArray());
+ }
+}
+
int AbstractCode::SourcePosition(int offset) {
int position = 0;
// Subtract one because the current PC is one instruction after the call site.
@@ -14784,7 +14833,7 @@ void Code::Disassemble(const char* name, std::ostream& os) { // NOLINT
}
os << "\n";
- SourcePositionTableIterator it(source_position_table());
+ SourcePositionTableIterator it(SourcePositionTable());
if (!it.done()) {
os << "Source positions:\n pc offset position\n";
for (; !it.done(); it.Advance()) {
@@ -14886,7 +14935,7 @@ void BytecodeArray::Disassemble(std::ostream& os) {
os << "Frame size " << frame_size() << "\n";
const uint8_t* base_address = GetFirstBytecodeAddress();
- SourcePositionTableIterator source_positions(source_position_table());
+ SourcePositionTableIterator source_positions(SourcePositionTable());
interpreter::BytecodeArrayIterator iterator(handle(this));
while (!iterator.done()) {
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698