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

Side by Side Diff: Source/web/WebViewImpl.cpp

Issue 390193003: [not for review] Add Draw entries to window Performance Timeline (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Code refactoring in RenderView Created 6 years, 5 months 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 #include "core/page/EventWithHitTestResults.h" 72 #include "core/page/EventWithHitTestResults.h"
73 #include "core/page/FocusController.h" 73 #include "core/page/FocusController.h"
74 #include "core/page/FrameTree.h" 74 #include "core/page/FrameTree.h"
75 #include "core/page/InjectedStyleSheets.h" 75 #include "core/page/InjectedStyleSheets.h"
76 #include "core/page/Page.h" 76 #include "core/page/Page.h"
77 #include "core/page/PagePopupClient.h" 77 #include "core/page/PagePopupClient.h"
78 #include "core/page/PointerLockController.h" 78 #include "core/page/PointerLockController.h"
79 #include "core/page/ScopedPageLoadDeferrer.h" 79 #include "core/page/ScopedPageLoadDeferrer.h"
80 #include "core/page/TouchDisambiguation.h" 80 #include "core/page/TouchDisambiguation.h"
81 #include "core/rendering/FastTextAutosizer.h" 81 #include "core/rendering/FastTextAutosizer.h"
82 #include "core/rendering/RenderGeometryMap.h"
82 #include "core/rendering/RenderView.h" 83 #include "core/rendering/RenderView.h"
83 #include "core/rendering/RenderWidget.h" 84 #include "core/rendering/RenderWidget.h"
84 #include "core/rendering/TextAutosizer.h" 85 #include "core/rendering/TextAutosizer.h"
86 #include "core/rendering/compositing/CompositedLayerMapping.h"
85 #include "core/rendering/compositing/RenderLayerCompositor.h" 87 #include "core/rendering/compositing/RenderLayerCompositor.h"
88 #include "core/timing/Performance.h"
86 #include "modules/device_orientation/DeviceOrientationInspectorAgent.h" 89 #include "modules/device_orientation/DeviceOrientationInspectorAgent.h"
87 #include "modules/encryptedmedia/MediaKeysController.h" 90 #include "modules/encryptedmedia/MediaKeysController.h"
88 #include "modules/filesystem/InspectorFileSystemAgent.h" 91 #include "modules/filesystem/InspectorFileSystemAgent.h"
89 #include "modules/indexeddb/InspectorIndexedDBAgent.h" 92 #include "modules/indexeddb/InspectorIndexedDBAgent.h"
90 #include "modules/push_messaging/PushController.h" 93 #include "modules/push_messaging/PushController.h"
91 #include "platform/ContextMenu.h" 94 #include "platform/ContextMenu.h"
92 #include "platform/ContextMenuItem.h" 95 #include "platform/ContextMenuItem.h"
93 #include "platform/Cursor.h" 96 #include "platform/Cursor.h"
94 #include "platform/KeyboardCodes.h" 97 #include "platform/KeyboardCodes.h"
95 #include "platform/NotImplemented.h" 98 #include "platform/NotImplemented.h"
(...skipping 17 matching lines...) Expand all
113 #include "public/platform/WebDragData.h" 116 #include "public/platform/WebDragData.h"
114 #include "public/platform/WebFloatPoint.h" 117 #include "public/platform/WebFloatPoint.h"
115 #include "public/platform/WebGestureCurve.h" 118 #include "public/platform/WebGestureCurve.h"
116 #include "public/platform/WebImage.h" 119 #include "public/platform/WebImage.h"
117 #include "public/platform/WebLayerTreeView.h" 120 #include "public/platform/WebLayerTreeView.h"
118 #include "public/platform/WebURLRequest.h" 121 #include "public/platform/WebURLRequest.h"
119 #include "public/platform/WebVector.h" 122 #include "public/platform/WebVector.h"
120 #include "public/web/WebAXObject.h" 123 #include "public/web/WebAXObject.h"
121 #include "public/web/WebActiveWheelFlingParameters.h" 124 #include "public/web/WebActiveWheelFlingParameters.h"
122 #include "public/web/WebAutofillClient.h" 125 #include "public/web/WebAutofillClient.h"
126 #include "public/web/WebFrame.h"
123 #include "public/web/WebFrameClient.h" 127 #include "public/web/WebFrameClient.h"
124 #include "public/web/WebHitTestResult.h" 128 #include "public/web/WebHitTestResult.h"
125 #include "public/web/WebInputElement.h" 129 #include "public/web/WebInputElement.h"
126 #include "public/web/WebMediaPlayerAction.h" 130 #include "public/web/WebMediaPlayerAction.h"
127 #include "public/web/WebNode.h" 131 #include "public/web/WebNode.h"
132 #include "public/web/WebPerformance.h"
128 #include "public/web/WebPlugin.h" 133 #include "public/web/WebPlugin.h"
129 #include "public/web/WebPluginAction.h" 134 #include "public/web/WebPluginAction.h"
130 #include "public/web/WebRange.h" 135 #include "public/web/WebRange.h"
131 #include "public/web/WebTextInputInfo.h" 136 #include "public/web/WebTextInputInfo.h"
132 #include "public/web/WebViewClient.h" 137 #include "public/web/WebViewClient.h"
133 #include "public/web/WebWindowFeatures.h" 138 #include "public/web/WebWindowFeatures.h"
134 #include "web/CompositionUnderlineVectorBuilder.h" 139 #include "web/CompositionUnderlineVectorBuilder.h"
135 #include "web/ContextFeaturesClientImpl.h" 140 #include "web/ContextFeaturesClientImpl.h"
136 #include "web/DatabaseClientImpl.h" 141 #include "web/DatabaseClientImpl.h"
137 #include "web/FullscreenController.h" 142 #include "web/FullscreenController.h"
(...skipping 1610 matching lines...) Expand 10 before | Expand all | Expand 10 after
1748 return; 1753 return;
1749 1754
1750 PageWidgetDelegate::animate(m_page.get(), monotonicFrameBeginTime); 1755 PageWidgetDelegate::animate(m_page.get(), monotonicFrameBeginTime);
1751 1756
1752 if (m_continuousPaintingEnabled) { 1757 if (m_continuousPaintingEnabled) {
1753 ContinuousPainter::setNeedsDisplayRecursive(m_rootGraphicsLayer, m_pageO verlays.get()); 1758 ContinuousPainter::setNeedsDisplayRecursive(m_rootGraphicsLayer, m_pageO verlays.get());
1754 m_client->scheduleAnimation(); 1759 m_client->scheduleAnimation();
1755 } 1760 }
1756 } 1761 }
1757 1762
1763 typedef WTF::HashMap<const GraphicsLayer*, std::vector<std::pair<int64_t, WebRec t> > >
1764 GraphicsLayerDrawRects;
1765
1758 void WebViewImpl::layout() 1766 void WebViewImpl::layout()
1759 { 1767 {
1760 TRACE_EVENT0("blink", "WebViewImpl::layout"); 1768 TRACE_EVENT0("blink", "WebViewImpl::layout");
1761 if (!localFrameRootTemporary()) 1769 if (!localFrameRootTemporary())
1762 return; 1770 return;
1763 1771
1764 PageWidgetDelegate::layout(m_page.get(), localFrameRootTemporary()->frame()) ; 1772 PageWidgetDelegate::layout(m_page.get(), localFrameRootTemporary()->frame()) ;
1765 updateLayerTreeBackgroundColor(); 1773 updateLayerTreeBackgroundColor();
1766 1774
1767 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 1775 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
1768 m_linkHighlights[i]->updateGeometry(); 1776 m_linkHighlights[i]->updateGeometry();
1769 1777
1778 GraphicsLayerDrawRects glRects;
1779
1780 Frame* frame = m_page ? m_page->mainFrame() : 0;
1781 while (frame) {
chrishtr 2014/07/16 20:00:25 Random nit, but I would make this a for loop.
1782 if (!frame->isLocalFrame()) {
1783 frame = frame->tree().traverseNext();
1784 continue;
1785 }
1786 LocalFrame* localframe = toLocalFrame(frame);
1787
1788 const GraphicsLayer* graphicsLayer =
1789 localframe->document()->renderView()->enclosingLayer()
1790 ->enclosingLayerForPaintInvalidationCrossingFrameBoundaries()
1791 ->graphicsLayerBackingForScrolling();
1792
1793 // Find frame's rect in graphics layer space
1794 LayoutRect rect =
1795 localframe->contentRenderer()->rectForPaintInvalidation();
1796 RenderLayerModelObject* paintInvalidationContainer =
1797 localframe->contentRenderer()->enclosingLayer()
1798 ->enclosingLayerForPaintInvalidationCrossingFrameBoundaries()
1799 ->renderer();
1800 RenderLayer::mapRectToPaintBackingCoordinates(paintInvalidationContainer , rect);
chrishtr 2014/07/16 20:00:25 This looks right.
1801
1802 GraphicsLayerDrawRects::iterator glIter = glRects.find(graphicsLayer);
1803 std::vector<std::pair<int64_t, WebRect> > *glVector;
1804 if (glIter == glRects.end()) {
1805 glVector = &glRects.add(graphicsLayer,
1806 std::vector<std::pair<int64_t, WebRect> >()).storedValue->value;
1807 } else {
1808 glVector = &glIter->value;
1809 }
1810 glVector->push_back(std::make_pair(frame->frameID(), enclosingIntRect(re ct)));
1811
1812 frame = frame->tree().traverseNext();
1813 }
1814
1815 for (GraphicsLayerDrawRects::const_iterator iter = glRects.begin(); iter != glRects.end(); ++iter) {
1816 const GraphicsLayer* graphicsLayer = iter->key;
1817 graphicsLayer->platformLayer()->setDrawFrameRequestRects(iter->value);
1818 }
1819
1770 if (m_devToolsAgent) 1820 if (m_devToolsAgent)
1771 m_devToolsAgent->didLayout(); 1821 m_devToolsAgent->didLayout();
1772 } 1822 }
1773 1823
1774 void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect) 1824 void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect)
1775 { 1825 {
1776 // This should only be used when compositing is not being used for this 1826 // This should only be used when compositing is not being used for this
1777 // WebView, and it is painting into the recording of its parent. 1827 // WebView, and it is painting into the recording of its parent.
1778 ASSERT(!isAcceleratedCompositingActive()); 1828 ASSERT(!isAcceleratedCompositingActive());
1779 1829
(...skipping 2313 matching lines...) Expand 10 before | Expand all | Expand 10 after
4093 WebSize scrollOffset = mainFrame()->scrollOffset(); 4143 WebSize scrollOffset = mainFrame()->scrollOffset();
4094 scrollOffset.width += scrollDelta.width; 4144 scrollOffset.width += scrollDelta.width;
4095 scrollOffset.height += scrollDelta.height; 4145 scrollOffset.height += scrollDelta.height;
4096 4146
4097 WebPoint scrollPoint(scrollOffset.width, scrollOffset.height); 4147 WebPoint scrollPoint(scrollOffset.width, scrollOffset.height);
4098 setPageScaleFactor(pageScaleFactor() * pageScaleDelta, scrollPoint); 4148 setPageScaleFactor(pageScaleFactor() * pageScaleDelta, scrollPoint);
4099 m_doubleTapZoomPending = false; 4149 m_doubleTapZoomPending = false;
4100 } 4150 }
4101 } 4151 }
4102 4152
4153 void WebViewImpl::recordDrawTiming(int64_t FrameId, const WebVector<std::pair<in t, double> >& draws)
4154 {
4155 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4156 return;
4157
4158 Frame* frame = m_page ? m_page->mainFrame() : 0;
4159
4160 while (frame && frame->frameID() != FrameId) {
4161 frame = frame->tree().traverseNext();
4162 }
4163
4164 if (!frame)
4165 return; // ASSERT? Other way to report error?
4166
4167 ASSERT(frame->isLocalFrame());
4168
4169 WebCore::LocalDOMWindow* domWindow = toLocalFrame(frame)->domWindow();
4170 WebCore::Performance& performance = domWindow->performance();
4171 for (size_t i = 0; i < draws.size(); ++i) {
4172 performance.addDrawTiming(domWindow->document(), draws[i].first, draws[i ].second);
4173 }
4174 }
4175
4103 void WebViewImpl::updateLayerTreeViewport() 4176 void WebViewImpl::updateLayerTreeViewport()
4104 { 4177 {
4105 if (!page() || !m_layerTreeView) 4178 if (!page() || !m_layerTreeView)
4106 return; 4179 return;
4107 4180
4108 m_layerTreeView->setPageScaleFactorAndLimits(pageScaleFactor(), minimumPageS caleFactor(), maximumPageScaleFactor()); 4181 m_layerTreeView->setPageScaleFactorAndLimits(pageScaleFactor(), minimumPageS caleFactor(), maximumPageScaleFactor());
4109 } 4182 }
4110 4183
4111 void WebViewImpl::updateLayerTreeBackgroundColor() 4184 void WebViewImpl::updateLayerTreeBackgroundColor()
4112 { 4185 {
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
4239 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints(); 4312 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints();
4240 4313
4241 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 4314 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4242 return false; 4315 return false;
4243 4316
4244 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width 4317 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width
4245 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1); 4318 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1);
4246 } 4319 }
4247 4320
4248 } // namespace blink 4321 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698