Index: third_party/WebKit/Source/core/frame/FrameSerializer.cpp |
diff --git a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp |
index 7f1d9e8a9f239a6ae96b80ea31edf54488fea56b..c0ff9167403fa8d7b45f8a6a79b83d1fd3a0b11a 100644 |
--- a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp |
+++ b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp |
@@ -59,6 +59,7 @@ |
#include "core/html/ImageDocument.h" |
#include "core/style/StyleFetchedImage.h" |
#include "core/style/StyleImage.h" |
+#include "platform/Histogram.h" |
#include "platform/SerializedResource.h" |
#include "platform/TraceEvent.h" |
#include "platform/graphics/Image.h" |
@@ -243,6 +244,7 @@ FrameSerializer::FrameSerializer( |
Vector<SerializedResource>& resources, |
Delegate& delegate) |
: m_resources(&resources) |
+ , m_isSerializingCss(false) |
, m_delegate(delegate) |
{ |
} |
@@ -261,14 +263,16 @@ void FrameSerializer::serializeFrame(const LocalFrame& frame) |
return; |
} |
- TRACE_EVENT_BEGIN0("page-serialization", "FrameSerializer::serializeFrame HTML"); |
HeapVector<Member<Node>> serializedNodes; |
- SerializerMarkupAccumulator accumulator(m_delegate, document, serializedNodes); |
- String text = serializeNodes<EditingStrategy>(accumulator, document, IncludeNode); |
- |
- CString frameHTML = document.encoding().encode(text, WTF::EntitiesForUnencodables); |
- m_resources->append(SerializedResource(url, document.suggestedMIMEType(), SharedBuffer::create(frameHTML.data(), frameHTML.length()))); |
- TRACE_EVENT_END0("page-serialization", "FrameSerializer::serializeFrame HTML"); |
+ { |
+ TRACE_EVENT0("page-serialization", "FrameSerializer::serializeFrame HTML"); |
+ SCOPED_BLINK_UMA_HISTOGRAM_TIMER("PageSerialization.SerializationTime.Html"); |
+ SerializerMarkupAccumulator accumulator(m_delegate, document, serializedNodes); |
+ String text = serializeNodes<EditingStrategy>(accumulator, document, IncludeNode); |
+ |
+ CString frameHTML = document.encoding().encode(text, WTF::EntitiesForUnencodables); |
+ m_resources->append(SerializedResource(url, document.suggestedMIMEType(), SharedBuffer::create(frameHTML.data(), frameHTML.length()))); |
+ } |
for (Node* node: serializedNodes) { |
ASSERT(node); |
@@ -312,6 +316,13 @@ void FrameSerializer::serializeCSSStyleSheet(CSSStyleSheet& styleSheet, const KU |
{ |
TRACE_EVENT2("page-serialization", "FrameSerializer::serializeCSSStyleSheet", |
"type", "CSS", "url", url.elidedString().utf8().data()); |
+ // Only report UMA metric if this is not a reentrant CSS serialization call. |
+ double cssStartTime = 0; |
+ if (!m_isSerializingCss) { |
+ m_isSerializingCss = true; |
+ cssStartTime = WTF::monotonicallyIncreasingTime(); |
+ } |
+ |
StringBuilder cssText; |
cssText.append("@charset \""); |
cssText.append(styleSheet.contents()->charset().lower()); |
@@ -338,6 +349,12 @@ void FrameSerializer::serializeCSSStyleSheet(CSSStyleSheet& styleSheet, const KU |
m_resources->append(SerializedResource(url, String("text/css"), SharedBuffer::create(text.data(), text.length()))); |
m_resourceURLs.add(url); |
} |
+ |
+ if (cssStartTime != 0) { |
+ m_isSerializingCss = false; |
+ DEFINE_STATIC_LOCAL(CustomCountHistogram, cssHistogram, ("PageSerialization.SerializationTime.CSSElement", 0, 1e7, 50)); |
+ cssHistogram.count(static_cast<int64_t>((WTF::monotonicallyIncreasingTime() - cssStartTime) * 1e6)); |
+ } |
} |
void FrameSerializer::serializeCSSRule(CSSRule* rule) |
@@ -414,8 +431,17 @@ void FrameSerializer::addImageToResources(ImageResource* image, const KURL& url) |
TRACE_EVENT2("page-serialization", "FrameSerializer::addImageToResources", |
"type", "image", "url", url.elidedString().utf8().data()); |
+ double imageStartTime = WTF::monotonicallyIncreasingTime(); |
+ |
RefPtr<const SharedBuffer> data = image->getImage()->data(); |
addToResources(*image, data, url); |
+ |
+ // If we're already reporting time for CSS serialization don't report it for |
+ // this image to avoid reporting the same time twice. |
+ if (!m_isSerializingCss) { |
+ DEFINE_STATIC_LOCAL(CustomCountHistogram, imageHistogram, ("PageSerialization.SerializationTime.ImageElement", 0, 1e7, 50)); |
+ imageHistogram.count(static_cast<int64_t>((WTF::monotonicallyIncreasingTime() - imageStartTime) * 1e6)); |
+ } |
} |
void FrameSerializer::addFontToResources(FontResource* font) |