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

Unified Diff: src/profiler/profile-generator.cc

Issue 2047243002: Make use of std::map for profiler code map. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« src/profiler/profile-generator.h ('K') | « src/profiler/profile-generator.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/profiler/profile-generator.cc
diff --git a/src/profiler/profile-generator.cc b/src/profiler/profile-generator.cc
index b09dc5a4306235224347a7461b900fada8045aa7..aff9e46b97d0a917e4e03cbe62496aafbcffe1df 100644
--- a/src/profiler/profile-generator.cc
+++ b/src/profiler/profile-generator.cc
@@ -11,7 +11,6 @@
#include "src/global-handles.h"
#include "src/profiler/profile-generator-inl.h"
#include "src/profiler/tick-sample.h"
-#include "src/splay-tree-inl.h"
#include "src/unicode.h"
namespace v8 {
@@ -384,82 +383,55 @@ void CpuProfile::AddPath(base::TimeTicks timestamp,
}
}
-
void CpuProfile::CalculateTotalTicksAndSamplingRate() {
end_time_ = base::TimeTicks::HighResolutionNow();
}
-
void CpuProfile::Print() {
base::OS::Print("[Top down]:\n");
top_down_.Print();
}
-
-CodeMap::~CodeMap() {}
-
-
-const CodeMap::CodeTreeConfig::Key CodeMap::CodeTreeConfig::kNoKey = NULL;
-
-
void CodeMap::AddCode(Address addr, CodeEntry* entry, unsigned size) {
DeleteAllCoveredCode(addr, addr + size);
- CodeTree::Locator locator;
- tree_.Insert(addr, &locator);
- locator.set_value(CodeEntryInfo(entry, size));
+ code_map_.insert({addr, CodeEntryInfo(entry, size)});
}
-
void CodeMap::DeleteAllCoveredCode(Address start, Address end) {
- List<Address> to_delete;
- Address addr = end - 1;
- while (addr >= start) {
- CodeTree::Locator locator;
- if (!tree_.FindGreatestLessThan(addr, &locator)) break;
- Address start2 = locator.key(), end2 = start2 + locator.value().size;
- if (start2 < end && start < end2) to_delete.Add(start2);
- addr = start2 - 1;
+ auto left = code_map_.upper_bound(start);
+ if (left != code_map_.begin()) {
+ --left;
+ if (left->first + left->second.size <= start) ++left;
}
- for (int i = 0; i < to_delete.length(); ++i) tree_.Remove(to_delete[i]);
+ auto right = left;
+ while (right != code_map_.end() && right->first < end) ++right;
+ code_map_.erase(left, right);
}
-
CodeEntry* CodeMap::FindEntry(Address addr) {
- CodeTree::Locator locator;
- if (tree_.FindGreatestLessThan(addr, &locator)) {
- // locator.key() <= addr. Need to check that addr is within entry.
- const CodeEntryInfo& entry = locator.value();
- if (addr < (locator.key() + entry.size)) {
- return entry.entry;
- }
- }
- return NULL;
+ auto it = code_map_.upper_bound(addr);
+ if (it == code_map_.begin()) return nullptr;
+ --it;
+ Address end_address = it->first + it->second.size;
+ return addr < end_address ? it->second.entry : nullptr;
}
-
void CodeMap::MoveCode(Address from, Address to) {
if (from == to) return;
- CodeTree::Locator locator;
- if (!tree_.Find(from, &locator)) return;
- CodeEntryInfo entry = locator.value();
- tree_.Remove(from);
- AddCode(to, entry.entry, entry.size);
+ auto it = code_map_.find(from);
+ if (it == code_map_.end()) return;
+ CodeEntryInfo info = it->second;
+ code_map_.erase(it);
+ AddCode(to, info.entry, info.size);
}
-
-void CodeMap::CodeTreePrinter::Call(
- const Address& key, const CodeMap::CodeEntryInfo& value) {
- base::OS::Print("%p %5d %s\n", static_cast<void*>(key), value.size,
- value.entry->name());
-}
-
-
void CodeMap::Print() {
- CodeTreePrinter printer;
- tree_.ForEach(&printer);
+ for (auto it = code_map_.begin(); it != code_map_.end(); ++it) {
+ base::OS::Print("%p %5d %s\n", static_cast<void*>(it->first),
+ it->second.size, it->second.entry->name());
+ }
}
-
CpuProfilesCollection::CpuProfilesCollection(Heap* heap)
: function_and_resource_names_(heap),
isolate_(heap->isolate()),
« src/profiler/profile-generator.h ('K') | « src/profiler/profile-generator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698