Index: Source/core/dom/Node.cpp |
diff --git a/Source/core/dom/Node.cpp b/Source/core/dom/Node.cpp |
index cd07aa30ef859ee7d59b7dbc96a1a43bc501a7fb..a94639e76b72f9af5f34a9bb41fae2ebedb5e993 100644 |
--- a/Source/core/dom/Node.cpp |
+++ b/Source/core/dom/Node.cpp |
@@ -96,6 +96,7 @@ |
#include "wtf/Vector.h" |
#include "wtf/text/CString.h" |
#include "wtf/text/StringBuilder.h" |
+#include <inttypes.h> |
namespace blink { |
@@ -766,6 +767,22 @@ void Node::markAncestorsWithChildNeedsStyleRecalc() |
document().scheduleRenderTreeUpdateIfNeeded(); |
} |
+PassRefPtr<TraceEvent::ConvertableToTraceFormat> jsonObjectForTracedStyleInvalidation(const Node* node, const StyleChangeType styleChangeType) |
+{ |
+ RefPtr<TracedValue> value = TracedValue::create(); |
+ value->setString("root_node", node->debugName()); |
+ LocalFrame* frame = node->document().frame(); |
+ value->setString("frame", String::format("0x%" PRIx64, static_cast<uint64>(reinterpret_cast<intptr_t>(frame)))); |
+ switch(styleChangeType) { |
+ case(NoStyleChange): value->setString("styleChange", "NoStyleChange"); break; |
+ case(LocalStyleChange): value->setString("styleChange", "LocalStyleChange"); break; |
+ case(SubtreeStyleChange): value->setString("styleChange", "SubtreeStyleChange"); break; |
+ case(NeedsReattachStyleChange): value->setString("styleChange", "NeedsReattachStyleChange"); break; |
+ default: value->setString("styleChange", "Unknown"); |
+ } |
+ return value; |
+} |
+ |
void Node::setNeedsStyleRecalc(StyleChangeType changeType) |
{ |
ASSERT(changeType != NoStyleChange); |
@@ -777,6 +794,7 @@ void Node::setNeedsStyleRecalc(StyleChangeType changeType) |
setStyleChange(changeType); |
if (changeType >= SubtreeStyleChange) |
traceStyleChangeIfNeeded(changeType); |
+ TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidations"), "Invalidation", "data", jsonObjectForTracedStyleInvalidation(this, changeType)); |
} |
if (existingChangeType == NoStyleChange) |