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

Unified Diff: src/external-reference-table.cc

Issue 2495213003: [serializer] print use count of external references. (Closed)
Patch Set: fix build Created 4 years, 1 month 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/external-reference-table.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/external-reference-table.cc
diff --git a/src/external-reference-table.cc b/src/external-reference-table.cc
index aa61117c97392b3593ac792bb99e37076480b0db..2e9fc465901c443e84d2411c344daa320441928d 100644
--- a/src/external-reference-table.cc
+++ b/src/external-reference-table.cc
@@ -11,6 +11,11 @@
#include "src/deoptimizer.h"
#include "src/ic/stub-cache.h"
+#if defined(DEBUG) && defined(V8_OS_LINUX) && !defined(V8_OS_ANDROID)
+#define SYMBOLIZE_FUNCTION
+#include <execinfo.h>
+#endif // DEBUG && V8_OS_LINUX && !V8_OS_ANDROID
+
namespace v8 {
namespace internal {
@@ -43,6 +48,28 @@ ExternalReferenceTable::ExternalReferenceTable(Isolate* isolate) {
AddApiReferences(isolate);
}
+#ifdef DEBUG
+void ExternalReferenceTable::ResetCount() {
+ for (ExternalReferenceEntry& entry : refs_) entry.count = 0;
+}
+
+void ExternalReferenceTable::PrintCount() {
+ for (int i = 0; i < refs_.length(); i++) {
+ v8::base::OS::Print("index=%5d count=%5d %-60s\n", i, refs_[i].count,
+ refs_[i].name);
+ }
+}
+#endif // DEBUG
+
+// static
+const char* ExternalReferenceTable::ResolveSymbol(void* address) {
+#ifdef SYMBOLIZE_FUNCTION
+ return backtrace_symbols(&address, 1)[0];
+#else
+ return "<unresolved>";
+#endif // SYMBOLIZE_FUNCTION
+}
+
void ExternalReferenceTable::AddReferences(Isolate* isolate) {
// Miscellaneous
Add(ExternalReference::roots_array_start(isolate).address(),
@@ -336,22 +363,24 @@ void ExternalReferenceTable::AddAccessors(Isolate* isolate) {
};
static const AccessorRefTable getters[] = {
-#define ACCESSOR_INFO_DECLARATION(name) \
- {FUNCTION_ADDR(&Accessors::name##Getter), "Accessors::" #name "Getter"},
+#define ACCESSOR_INFO_DECLARATION(name) \
+ { FUNCTION_ADDR(&Accessors::name##Getter), \
+ "Redirect to Accessors::" #name "Getter"},
ACCESSOR_INFO_LIST(ACCESSOR_INFO_DECLARATION)
#undef ACCESSOR_INFO_DECLARATION
};
static const AccessorRefTable setters[] = {
#define ACCESSOR_SETTER_DECLARATION(name) \
- {FUNCTION_ADDR(&Accessors::name), "Accessors::" #name},
+ { FUNCTION_ADDR(&Accessors::name), "Accessors::" #name},
ACCESSOR_SETTER_LIST(ACCESSOR_SETTER_DECLARATION)
#undef ACCESSOR_INFO_DECLARATION
};
for (unsigned i = 0; i < arraysize(getters); ++i) {
- Add(getters[i].address, getters[i].name);
+ const char* name = getters[i].name + 12; // Skip "Redirect to " prefix.
+ Add(getters[i].address, name);
Add(AccessorInfo::redirect(isolate, getters[i].address, ACCESSOR_GETTER),
- "");
+ getters[i].name);
}
for (unsigned i = 0; i < arraysize(setters); ++i) {
@@ -412,7 +441,8 @@ void ExternalReferenceTable::AddApiReferences(Isolate* isolate) {
intptr_t* api_external_references = isolate->api_external_references();
if (api_external_references != nullptr) {
while (*api_external_references != 0) {
- Add(reinterpret_cast<Address>(*api_external_references), "<embedder>");
+ Address address = reinterpret_cast<Address>(*api_external_references);
+ Add(address, ResolveSymbol(address));
api_external_references++;
}
}
« no previous file with comments | « src/external-reference-table.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698