Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / wtf / InstanceCounter.cpp
index 19f0bf7..7f29bb0 100644 (file)
 
 namespace WTF {
 
-#ifdef ENABLE_INSTANCE_COUNTER
+#if ENABLE(INSTANCE_COUNTER) || ENABLE(GC_TRACING)
+
+#if COMPILER(GCC)
+const size_t extractNameFunctionPrefixLength = sizeof("const char* WTF::extractNameFunction() [with T = ") - 1;
+const size_t extractNameFunctionPostfixLength = 1;
+#else
+#warning "Extracting typename in a compiler other than GCC isn't supported atm"
+#endif
 
 // This function is used to stringify a typename T without using RTTI.
-// The result of extractNameFunc<T>() is given as |funcName|. |extractNameFromFunctionName| then extracts a typename string from |funcName|.
-String extractNameFromFunctionName(const char* funcName)
+// The result of extractNameFunction<T>() is given as |funcName|. |extractTypeNameFromFunctionName| then extracts a typename string from |funcName|.
+String extractTypeNameFromFunctionName(const char* funcName)
 {
 #if COMPILER(GCC)
-    const size_t prefixLength = sizeof("const char* WTF::extractNameFunc() [with T = ") - 1;
-
     size_t funcNameLength = strlen(funcName);
-    ASSERT(funcNameLength > prefixLength + 1);
+    ASSERT(funcNameLength > extractNameFunctionPrefixLength + 1);
 
-    const char* funcNameWithoutPrefix = funcName + prefixLength;
-    return String(funcNameWithoutPrefix, funcNameLength - prefixLength - 1 /* last ] */);
+    const char* funcNameWithoutPrefix = funcName + extractNameFunctionPrefixLength;
+    return String(funcNameWithoutPrefix, funcNameLength - extractNameFunctionPrefixLength - extractNameFunctionPostfixLength /* last ] */);
 #else
-    // FIXME: Support other compilers
-    ASSERT(false);
+    return String();
 #endif
 }
 
@@ -74,15 +78,15 @@ private:
     HashMap<String, int> m_counterMap;
 };
 
-void incrementInstanceCount(const char* extractNameFuncName, void* ptr)
+void incrementInstanceCount(const char* extractNameFunctionName, void* ptr)
 {
-    String instanceName = extractNameFromFunctionName(extractNameFuncName);
+    String instanceName = extractTypeNameFromFunctionName(extractNameFunctionName);
     InstanceCounter::instance()->incrementInstanceCount(instanceName, ptr);
 }
 
-void decrementInstanceCount(const char* extractNameFuncName, void* ptr)
+void decrementInstanceCount(const char* extractNameFunctionName, void* ptr)
 {
-    String instanceName = extractNameFromFunctionName(extractNameFuncName);
+    String instanceName = extractTypeNameFromFunctionName(extractNameFunctionName);
     InstanceCounter::instance()->decrementInstanceCount(instanceName, ptr);
 }
 
@@ -139,6 +143,6 @@ String dumpRefCountedInstanceCounts()
     return String("{}");
 }
 
-#endif // ENABLE_INSTANCE_COUNTER
+#endif // ENABLE(INSTANCE_COUNTER) || ENABLE(GC_TRACING)
 
 } // namespace WTF