Web Inspector: paint rectangles are incorrectly shown in case subframes are present
https://bugs.webkit.org/show_bug.cgi?id=99849
Reviewed by Pavel Feldman.
Move GraphicsContext and paint rectangle from willPaint() to didPaint(), so we don't have
to store them as a state of InspectorPageAgent
* inspector/InspectorInstrumentation.cpp:
(WebCore):
(WebCore::InspectorInstrumentation::willPaintImpl):
(WebCore::InspectorInstrumentation::didPaintImpl):
* inspector/InspectorInstrumentation.h:
(InspectorInstrumentation):
(WebCore::InspectorInstrumentation::willPaint):
(WebCore::InspectorInstrumentation::didPaint):
* inspector/InspectorPageAgent.cpp:
(WebCore::InspectorPageAgent::didPaint):
* inspector/InspectorPageAgent.h:
* inspector/InspectorTimelineAgent.cpp:
(WebCore::InspectorTimelineAgent::willPaint):
(WebCore::InspectorTimelineAgent::didPaint):
* inspector/InspectorTimelineAgent.h:
(InspectorTimelineAgent):
* inspector/TimelineRecordFactory.cpp:
* inspector/TimelineRecordFactory.h:
(TimelineRecordFactory):
* page/FrameView.cpp:
(WebCore::FrameView::paintContents):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::paintContents):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@132239 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 406de3c..7a3f984 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,37 @@
+2012-10-22 Andrey Kosyakov <caseq@chromium.org>
+
+ Web Inspector: paint rectangles are incorrectly shown in case subframes are present
+ https://bugs.webkit.org/show_bug.cgi?id=99849
+
+ Reviewed by Pavel Feldman.
+
+ Move GraphicsContext and paint rectangle from willPaint() to didPaint(), so we don't have
+ to store them as a state of InspectorPageAgent
+
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore):
+ (WebCore::InspectorInstrumentation::willPaintImpl):
+ (WebCore::InspectorInstrumentation::didPaintImpl):
+ * inspector/InspectorInstrumentation.h:
+ (InspectorInstrumentation):
+ (WebCore::InspectorInstrumentation::willPaint):
+ (WebCore::InspectorInstrumentation::didPaint):
+ * inspector/InspectorPageAgent.cpp:
+ (WebCore::InspectorPageAgent::didPaint):
+ * inspector/InspectorPageAgent.h:
+ * inspector/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::willPaint):
+ (WebCore::InspectorTimelineAgent::didPaint):
+ * inspector/InspectorTimelineAgent.h:
+ (InspectorTimelineAgent):
+ * inspector/TimelineRecordFactory.cpp:
+ * inspector/TimelineRecordFactory.h:
+ (TimelineRecordFactory):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::paintContents):
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::paintContents):
+
2012-10-23 Pavel Feldman <pfeldman@chromium.org>
Web Inspector: array grouping does not work for arrays with exactly 10000 elements.
diff --git a/Source/WebCore/inspector/InspectorInstrumentation.cpp b/Source/WebCore/inspector/InspectorInstrumentation.cpp
index 08f2b0d..c9c9e4d 100644
--- a/Source/WebCore/inspector/InspectorInstrumentation.cpp
+++ b/Source/WebCore/inspector/InspectorInstrumentation.cpp
@@ -494,25 +494,22 @@
timelineAgent->didDispatchXHRLoadEvent();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willPaintImpl(InstrumentingAgents* instrumentingAgents, GraphicsContext* context, const LayoutRect& rect, Frame* frame)
+InspectorInstrumentationCookie InspectorInstrumentation::willPaintImpl(InstrumentingAgents* instrumentingAgents, Frame* frame)
{
- if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent())
- pageAgent->willPaint(context, rect);
-
int timelineAgentId = 0;
if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) {
- timelineAgent->willPaint(rect, frame);
+ timelineAgent->willPaint(frame);
timelineAgentId = timelineAgent->id();
}
return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId);
}
-void InspectorInstrumentation::didPaintImpl(const InspectorInstrumentationCookie& cookie)
+void InspectorInstrumentation::didPaintImpl(const InspectorInstrumentationCookie& cookie, GraphicsContext* context, const LayoutRect& rect)
{
if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
- timelineAgent->didPaint();
+ timelineAgent->didPaint(rect);
if (InspectorPageAgent* pageAgent = cookie.first ? cookie.first->inspectorPageAgent() : 0)
- pageAgent->didPaint();
+ pageAgent->didPaint(context, rect);
}
void InspectorInstrumentation::willScrollLayerImpl(InstrumentingAgents* instrumentingAgents, Frame* frame)
diff --git a/Source/WebCore/inspector/InspectorInstrumentation.h b/Source/WebCore/inspector/InspectorInstrumentation.h
index 469e686..d1b5274 100644
--- a/Source/WebCore/inspector/InspectorInstrumentation.h
+++ b/Source/WebCore/inspector/InspectorInstrumentation.h
@@ -141,10 +141,10 @@
static void didScroll(Page*);
static InspectorInstrumentationCookie willDispatchXHRLoadEvent(ScriptExecutionContext*, XMLHttpRequest*);
static void didDispatchXHRLoadEvent(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willPaint(Frame*, GraphicsContext*, const LayoutRect&);
- static void didPaint(const InspectorInstrumentationCookie&);
static void willScrollLayer(Frame*);
static void didScrollLayer(Frame*);
+ static InspectorInstrumentationCookie willPaint(Frame*);
+ static void didPaint(const InspectorInstrumentationCookie&, GraphicsContext*, const LayoutRect&);
static void willComposite(Page*);
static void didComposite(Page*);
static InspectorInstrumentationCookie willRecalculateStyle(Document*);
@@ -333,10 +333,10 @@
static void didScrollImpl(InstrumentingAgents*);
static InspectorInstrumentationCookie willDispatchXHRLoadEventImpl(InstrumentingAgents*, XMLHttpRequest*, ScriptExecutionContext*);
static void didDispatchXHRLoadEventImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willPaintImpl(InstrumentingAgents*, GraphicsContext*, const LayoutRect&, Frame*);
- static void didPaintImpl(const InspectorInstrumentationCookie&);
static void willScrollLayerImpl(InstrumentingAgents*, Frame*);
static void didScrollLayerImpl(InstrumentingAgents*);
+ static InspectorInstrumentationCookie willPaintImpl(InstrumentingAgents*, Frame*);
+ static void didPaintImpl(const InspectorInstrumentationCookie&, GraphicsContext*, const LayoutRect&);
static void willCompositeImpl(InstrumentingAgents*);
static void didCompositeImpl(InstrumentingAgents*);
static InspectorInstrumentationCookie willRecalculateStyleImpl(InstrumentingAgents*, Frame*);
@@ -903,22 +903,22 @@
#endif
}
-inline InspectorInstrumentationCookie InspectorInstrumentation::willPaint(Frame* frame, GraphicsContext* context, const LayoutRect& rect)
+inline InspectorInstrumentationCookie InspectorInstrumentation::willPaint(Frame* frame)
{
#if ENABLE(INSPECTOR)
FAST_RETURN_IF_NO_FRONTENDS(InspectorInstrumentationCookie());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
- return willPaintImpl(instrumentingAgents, context, rect, frame);
+ return willPaintImpl(instrumentingAgents, frame);
#endif
return InspectorInstrumentationCookie();
}
-inline void InspectorInstrumentation::didPaint(const InspectorInstrumentationCookie& cookie)
+inline void InspectorInstrumentation::didPaint(const InspectorInstrumentationCookie& cookie, GraphicsContext* context, const LayoutRect& rect)
{
#if ENABLE(INSPECTOR)
FAST_RETURN_IF_NO_FRONTENDS(void());
if (cookie.first)
- didPaintImpl(cookie);
+ didPaintImpl(cookie, context, rect);
#endif
}
diff --git a/Source/WebCore/inspector/InspectorPageAgent.cpp b/Source/WebCore/inspector/InspectorPageAgent.cpp
index 788685b..329f89c 100644
--- a/Source/WebCore/inspector/InspectorPageAgent.cpp
+++ b/Source/WebCore/inspector/InspectorPageAgent.cpp
@@ -328,7 +328,6 @@
, m_frontend(0)
, m_overlay(overlay)
, m_lastScriptIdentifier(0)
- , m_lastPaintContext(0)
, m_didLoadEventFire(false)
, m_geolocationOverridden(false)
{
@@ -876,18 +875,9 @@
*height = heightOverride;
}
-void InspectorPageAgent::willPaint(GraphicsContext* context, const LayoutRect& rect)
+void InspectorPageAgent::didPaint(GraphicsContext* context, const LayoutRect& rect)
{
- if (m_state->getBoolean(PageAgentState::showPaintRects)) {
- m_lastPaintContext = context;
- m_lastPaintRect = rect;
- m_lastPaintRect.inflate(-1);
- }
-}
-
-void InspectorPageAgent::didPaint()
-{
- if (!m_lastPaintContext || !m_state->getBoolean(PageAgentState::showPaintRects))
+ if (!m_state->getBoolean(PageAgentState::showPaintRects))
return;
static int colorSelector = 0;
@@ -897,9 +887,9 @@
Color(0, 0, 0xFF, 0x3F),
};
- m_overlay->drawOutline(m_lastPaintContext, m_lastPaintRect, colors[colorSelector++ % WTF_ARRAY_LENGTH(colors)]);
-
- m_lastPaintContext = 0;
+ LayoutRect inflatedRect(rect);
+ inflatedRect.inflate(-1);
+ m_overlay->drawOutline(context, inflatedRect, colors[colorSelector++ % WTF_ARRAY_LENGTH(colors)]);
}
void InspectorPageAgent::didLayout()
diff --git a/Source/WebCore/inspector/InspectorPageAgent.h b/Source/WebCore/inspector/InspectorPageAgent.h
index e54bb72..2768bb1 100644
--- a/Source/WebCore/inspector/InspectorPageAgent.h
+++ b/Source/WebCore/inspector/InspectorPageAgent.h
@@ -136,8 +136,7 @@
void loaderDetachedFromFrame(DocumentLoader*);
void applyScreenWidthOverride(long*);
void applyScreenHeightOverride(long*);
- void willPaint(GraphicsContext*, const LayoutRect&);
- void didPaint();
+ void didPaint(GraphicsContext*, const LayoutRect&);
void didLayout();
void didScroll();
@@ -179,8 +178,6 @@
HashMap<Frame*, String> m_frameToIdentifier;
HashMap<String, Frame*> m_identifierToFrame;
HashMap<DocumentLoader*, String> m_loaderToIdentifier;
- GraphicsContext* m_lastPaintContext;
- LayoutRect m_lastPaintRect;
bool m_didLoadEventFire;
bool m_geolocationOverridden;
RefPtr<GeolocationPosition> m_geolocationPosition;
diff --git a/Source/WebCore/inspector/InspectorTimelineAgent.cpp b/Source/WebCore/inspector/InspectorTimelineAgent.cpp
index 25e5388..a127092 100644
--- a/Source/WebCore/inspector/InspectorTimelineAgent.cpp
+++ b/Source/WebCore/inspector/InspectorTimelineAgent.cpp
@@ -269,13 +269,16 @@
didCompleteCurrentRecord(TimelineRecordType::RecalculateStyles);
}
-void InspectorTimelineAgent::willPaint(const LayoutRect& rect, Frame* frame)
+void InspectorTimelineAgent::willPaint(Frame* frame)
{
- pushCurrentRecord(TimelineRecordFactory::createPaintData(rect), TimelineRecordType::Paint, true, frame, true);
+ pushCurrentRecord(InspectorObject::create(), TimelineRecordType::Paint, true, frame, true);
}
-void InspectorTimelineAgent::didPaint()
+void InspectorTimelineAgent::didPaint(const LayoutRect& rect)
{
+ TimelineRecordEntry entry = m_recordStack.last();
+ ASSERT(entry.type == TimelineRecordType::Paint);
+ TimelineRecordFactory::addRectData(entry.data.get(), rect);
didCompleteCurrentRecord(TimelineRecordType::Paint);
}
diff --git a/Source/WebCore/inspector/InspectorTimelineAgent.h b/Source/WebCore/inspector/InspectorTimelineAgent.h
index 4b7bc77..059ecd8 100644
--- a/Source/WebCore/inspector/InspectorTimelineAgent.h
+++ b/Source/WebCore/inspector/InspectorTimelineAgent.h
@@ -105,8 +105,8 @@
void willRecalculateStyle(Frame*);
void didRecalculateStyle();
- void willPaint(const LayoutRect&, Frame*);
- void didPaint();
+ void willPaint(Frame*);
+ void didPaint(const LayoutRect&);
void willScroll(Frame*);
void didScroll();
diff --git a/Source/WebCore/inspector/TimelineRecordFactory.cpp b/Source/WebCore/inspector/TimelineRecordFactory.cpp
index 1af580a..776b59f 100644
--- a/Source/WebCore/inspector/TimelineRecordFactory.cpp
+++ b/Source/WebCore/inspector/TimelineRecordFactory.cpp
@@ -170,13 +170,6 @@
return data.release();
}
-PassRefPtr<InspectorObject> TimelineRecordFactory::createPaintData(const LayoutRect& rect)
-{
- RefPtr<InspectorObject> data = InspectorObject::create();
- addRectData(data.get(), rect);
- return data.release();
-}
-
PassRefPtr<InspectorObject> TimelineRecordFactory::createDecodeImageData(const String& imageType)
{
RefPtr<InspectorObject> data = InspectorObject::create();
diff --git a/Source/WebCore/inspector/TimelineRecordFactory.h b/Source/WebCore/inspector/TimelineRecordFactory.h
index f24436a..c5dcec2 100644
--- a/Source/WebCore/inspector/TimelineRecordFactory.h
+++ b/Source/WebCore/inspector/TimelineRecordFactory.h
@@ -75,8 +75,6 @@
static PassRefPtr<InspectorObject> createResourceFinishData(const String& requestId, bool didFail, double finishTime);
- static PassRefPtr<InspectorObject> createPaintData(const LayoutRect&);
-
static void addRectData(InspectorObject*, const LayoutRect&);
static PassRefPtr<InspectorObject> createDecodeImageData(const String& imageType);
diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp
index 2d312a3..739028d 100644
--- a/Source/WebCore/page/FrameView.cpp
+++ b/Source/WebCore/page/FrameView.cpp
@@ -3173,7 +3173,7 @@
if (!frame())
return;
- InspectorInstrumentationCookie cookie = InspectorInstrumentation::willPaint(m_frame.get(), p, rect);
+ InspectorInstrumentationCookie cookie = InspectorInstrumentation::willPaint(m_frame.get());
Document* document = m_frame->document();
@@ -3264,7 +3264,7 @@
if (isTopLevelPainter)
sCurrentPaintTimeStamp = 0;
- InspectorInstrumentation::didPaint(cookie);
+ InspectorInstrumentation::didPaint(cookie, p, rect);
}
void FrameView::setPaintBehavior(PaintBehavior behavior)
diff --git a/Source/WebCore/rendering/RenderLayerBacking.cpp b/Source/WebCore/rendering/RenderLayerBacking.cpp
index 8c147e1..210e2d0 100644
--- a/Source/WebCore/rendering/RenderLayerBacking.cpp
+++ b/Source/WebCore/rendering/RenderLayerBacking.cpp
@@ -1494,7 +1494,7 @@
#endif
if (graphicsLayer == m_graphicsLayer.get() || graphicsLayer == m_foregroundLayer.get() || graphicsLayer == m_maskLayer.get() || graphicsLayer == m_scrollingContentsLayer.get()) {
- InspectorInstrumentationCookie cookie = InspectorInstrumentation::willPaint(m_owningLayer->renderer()->frame(), &context, clip);
+ InspectorInstrumentationCookie cookie = InspectorInstrumentation::willPaint(m_owningLayer->renderer()->frame());
// The dirtyRect is in the coords of the painting root.
IntRect dirtyRect = clip;
@@ -1507,7 +1507,7 @@
if (m_usingTiledCacheLayer)
m_owningLayer->renderer()->frame()->view()->setLastPaintTime(currentTime());
- InspectorInstrumentation::didPaint(cookie);
+ InspectorInstrumentation::didPaint(cookie, &context, clip);
} else if (graphicsLayer == layerForHorizontalScrollbar()) {
paintScrollbar(m_owningLayer->horizontalScrollbar(), context, clip);
} else if (graphicsLayer == layerForVerticalScrollbar()) {