Changeset 116549 in webkit
- Timestamp:
- May 9, 2012 12:36:05 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 1 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r116487 r116549 1158 1158 platform/graphics/FontFeatureSettings.cpp 1159 1159 platform/graphics/FractionalLayoutRect.cpp 1160 platform/graphics/FractionalLayoutSize.cpp1161 1160 platform/graphics/GeneratorGeneratedImage.cpp 1162 1161 platform/graphics/GlyphPageTreeNode.cpp -
trunk/Source/WebCore/ChangeLog
r116545 r116549 1 2012-05-09 Levi Weintraub <leviw@chromium.org> 2 3 Fix performance regression for floats caused by LayoutUnit change 4 https://bugs.webkit.org/show_bug.cgi?id=85834 5 6 Reviewed by Ojan Vafai. 7 8 Refactoring FractionalLayout types to alleviate performance issues. Explicitly 9 inlining constructor and operator functions in FractionalLayoutUnit, as well as 10 pixelSnappedIntSize and pixelSnappedIntRect (particularly hot code paths). Also 11 further simplifying round and ceil functions when sub-pixel layout is not enabled. 12 13 pixelSnappedIntSize was the only function defined in FractionalLayoutSize.cpp, 14 so it is removed. 15 16 No new tests. No change in functionality. 17 18 * CMakeLists.txt: 19 * GNUmakefile.list.am: 20 * Target.pri: 21 * WebCore.gypi: 22 * WebCore.vcproj/WebCore.vcproj: 23 * WebCore.xcodeproj/project.pbxproj: 24 * platform/FractionalLayoutUnit.h: 25 (WebCore::FractionalLayoutUnit::FractionalLayoutUnit): 26 (FractionalLayoutUnit): 27 (WebCore::FractionalLayoutUnit::toInt): 28 (WebCore::FractionalLayoutUnit::toFloat): 29 (WebCore::FractionalLayoutUnit::toDouble): 30 (WebCore::FractionalLayoutUnit::toUnsigned): 31 (WebCore::FractionalLayoutUnit::operator int): 32 (WebCore::FractionalLayoutUnit::operator unsigned): 33 (WebCore::FractionalLayoutUnit::operator float): 34 (WebCore::FractionalLayoutUnit::operator double): 35 (WebCore::FractionalLayoutUnit::operator bool): 36 (WebCore::FractionalLayoutUnit::ceil): 37 (WebCore::FractionalLayoutUnit::round): 38 * platform/graphics/FractionalLayoutRect.cpp: 39 (WebCore): 40 * platform/graphics/FractionalLayoutRect.h: 41 (WebCore::FractionalLayoutRect::pixelSnappedSize): 42 (WebCore::pixelSnappedIntRect): 43 (WebCore): 44 * platform/graphics/FractionalLayoutSize.cpp: Removed. 45 * platform/graphics/FractionalLayoutSize.h: 46 (WebCore): 47 * rendering/LayoutTypes.h: 48 (WebCore::pixelSnappedIntSize): 49 (WebCore): 50 1 51 2012-05-09 Abhishek Arya <inferno@chromium.org> 2 52 -
trunk/Source/WebCore/GNUmakefile.list.am
r116487 r116549 3253 3253 Source/WebCore/platform/graphics/FractionalLayoutRect.cpp \ 3254 3254 Source/WebCore/platform/graphics/FractionalLayoutRect.h \ 3255 Source/WebCore/platform/graphics/FractionalLayoutSize.cpp \3256 3255 Source/WebCore/platform/graphics/FractionalLayoutSize.h \ 3257 3256 Source/WebCore/platform/graphics/GeneratorGeneratedImage.cpp \ -
trunk/Source/WebCore/Target.pri
r116487 r116549 1104 1104 platform/graphics/FontCache.cpp \ 1105 1105 platform/graphics/FractionalLayoutRect.cpp \ 1106 platform/graphics/FractionalLayoutSize.cpp \1107 1106 platform/graphics/GeneratorGeneratedImage.cpp \ 1108 1107 platform/graphics/Gradient.cpp \ -
trunk/Source/WebCore/WebCore.exp.in
r116473 r116549 608 608 __ZN7WebCore19TextResourceDecoderD1Ev 609 609 __ZN7WebCore19applicationIsSafariEv 610 __ZN7WebCore19pixelSnappedIntRectERKNS_20FractionalLayoutRectE611 610 __ZN7WebCore20DictationAlternativeC1Ejjy 612 611 __ZN7WebCore20DictationAlternativeC1Ev … … 941 940 __ZN7WebCore7IntRect5uniteERKS0_ 942 941 __ZN7WebCore7IntRect9intersectERKS0_ 942 __ZN7WebCore7IntRectC1ERKNS_20FractionalLayoutRectE 943 943 __ZN7WebCore7IntRectC1ERKNS_9FloatRectE 944 944 __ZN7WebCore7IntSizeC1ERK6CGSize -
trunk/Source/WebCore/WebCore.gypi
r116487 r116549 3404 3404 'platform/graphics/CrossfadeGeneratedImage.h', 3405 3405 'platform/graphics/Extensions3D.h', 3406 'platform/graphics/FractionalLayoutSize.cpp',3407 3406 'platform/graphics/FloatPoint.cpp', 3408 3407 'platform/graphics/FloatPoint3D.cpp', … … 3421 3420 'platform/graphics/FontPlatformData.h', 3422 3421 'platform/graphics/FractionalLayoutRect.cpp', 3423 'platform/graphics/FractionalLayoutSize.cpp',3424 3422 'platform/graphics/GeneratorGeneratedImage.cpp', 3425 3423 'platform/graphics/GeneratedImage.h', -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r116487 r116549 28830 28830 </File> 28831 28831 <File 28832 RelativePath="..\platform\graphics\FractionalLayoutSize.cpp"28833 >28834 </File>28835 <File28836 28832 RelativePath="..\platform\graphics\FractionalLayoutSize.h" 28837 28833 > -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r116487 r116549 296 296 1449E287107D4DB400B5793F /* JSCallbackData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1449E286107D4DB400B5793F /* JSCallbackData.cpp */; }; 297 297 144FCE5214EC79BC000D17A3 /* FractionalLayoutUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 144FCE5114EC79BC000D17A3 /* FractionalLayoutUnit.h */; settings = {ATTRIBUTES = (Private, ); }; }; 298 144FCE5C14EC79E7000D17A3 /* FractionalLayoutSize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 144FCE5714EC79E7000D17A3 /* FractionalLayoutSize.cpp */; };299 298 144FCE5D14EC79E7000D17A3 /* FractionalLayoutSize.h in Headers */ = {isa = PBXBuildFile; fileRef = 144FCE5814EC79E7000D17A3 /* FractionalLayoutSize.h */; settings = {ATTRIBUTES = (Private, ); }; }; 300 299 144FCFE014EF2509000D17A3 /* FractionalLayoutRect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 144FCFDE14EF2509000D17A3 /* FractionalLayoutRect.cpp */; }; … … 7172 7171 144FCE5114EC79BC000D17A3 /* FractionalLayoutUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FractionalLayoutUnit.h; sourceTree = "<group>"; }; 7173 7172 144FCE5414EC79E7000D17A3 /* FractionalLayoutPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FractionalLayoutPoint.h; sourceTree = "<group>"; }; 7174 144FCE5714EC79E7000D17A3 /* FractionalLayoutSize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FractionalLayoutSize.cpp; sourceTree = "<group>"; };7175 7173 144FCE5814EC79E7000D17A3 /* FractionalLayoutSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FractionalLayoutSize.h; sourceTree = "<group>"; }; 7176 7174 144FCFDE14EF2509000D17A3 /* FractionalLayoutRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FractionalLayoutRect.cpp; sourceTree = "<group>"; }; … … 19400 19398 144FCFDE14EF2509000D17A3 /* FractionalLayoutRect.cpp */, 19401 19399 144FCFDF14EF2509000D17A3 /* FractionalLayoutRect.h */, 19402 144FCE5714EC79E7000D17A3 /* FractionalLayoutSize.cpp */,19403 19400 144FCE5814EC79E7000D17A3 /* FractionalLayoutSize.h */, 19404 19401 BC23F0DA0DAFF4A4009FDC91 /* GeneratedImage.h */, … … 26008 26005 41885B9411B6FDA6003383BB /* FormSubmission.cpp in Sources */, 26009 26006 144FCFE014EF2509000D17A3 /* FractionalLayoutRect.cpp in Sources */, 26010 144FCE5C14EC79E7000D17A3 /* FractionalLayoutSize.cpp in Sources */,26011 26007 65BF022E0974816300C43196 /* Frame.cpp in Sources */, 26012 26008 A7B070D2130A409C00A3763C /* FrameActionScheduler.cpp in Sources */, -
trunk/Source/WebCore/platform/FractionalLayoutUnit.h
r116392 r116549 67 67 // See https://bugs.webkit.org/show_bug.cgi?id=83848 for details. 68 68 69 FractionalLayoutUnit() : m_value(0) { } 70 FractionalLayoutUnit(int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 71 FractionalLayoutUnit(unsigned short value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 72 FractionalLayoutUnit(unsigned int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 73 FractionalLayoutUnit(float value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 74 FractionalLayoutUnit(double value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 75 FractionalLayoutUnit(const FractionalLayoutUnit& value) { m_value = value.rawValue(); } 76 69 inline FractionalLayoutUnit() : m_value(0) { } 70 #if ENABLE(SUBPIXEL_LAYOUT) 71 inline FractionalLayoutUnit(int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 72 inline FractionalLayoutUnit(unsigned short value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 73 inline FractionalLayoutUnit(unsigned int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 74 inline FractionalLayoutUnit(float value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 75 inline FractionalLayoutUnit(double value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value * kFixedPointDenominator; } 76 #else 77 inline FractionalLayoutUnit(int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value; } 78 inline FractionalLayoutUnit(unsigned short value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value; } 79 inline FractionalLayoutUnit(unsigned int value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value; } 80 inline FractionalLayoutUnit(float value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value; } 81 inline FractionalLayoutUnit(double value) { REPORT_OVERFLOW(isInBounds(value)); m_value = value; } 82 #endif 83 inline FractionalLayoutUnit(const FractionalLayoutUnit& value) { m_value = value.rawValue(); } 84 85 #if ENABLE(SUBPIXEL_LAYOUT) 77 86 inline int toInt() const { return m_value / kFixedPointDenominator; } 78 inline unsigned toUnsigned() const { REPORT_OVERFLOW(m_value >= 0); return toInt(); }79 87 inline float toFloat() const { return static_cast<float>(m_value) / kFixedPointDenominator; } 80 88 inline double toDouble() const { return static_cast<double>(m_value) / kFixedPointDenominator; } 81 82 operator int() const { return toInt(); } 83 operator unsigned() const { return toUnsigned(); } 84 operator float() const { return toFloat(); } 85 operator double() const { return toDouble(); } 86 operator bool() const { return m_value; } 89 #else 90 inline int toInt() const { return m_value; } 91 inline float toFloat() const { return static_cast<float>(m_value); } 92 inline double toDouble() const { return static_cast<double>(m_value); } 93 #endif 94 inline unsigned toUnsigned() const { REPORT_OVERFLOW(m_value >= 0); return toInt(); } 95 96 inline operator int() const { return toInt(); } 97 inline operator unsigned() const { return toUnsigned(); } 98 inline operator float() const { return toFloat(); } 99 inline operator double() const { return toDouble(); } 100 inline operator bool() const { return m_value; } 87 101 88 102 inline FractionalLayoutUnit operator++(int) … … 112 126 #endif 113 127 { 128 #if ENABLE(SUBPIXEL_LAYOUT) 114 129 if (m_value > 0) 115 130 return (m_value + kFixedPointDenominator - 1) / kFixedPointDenominator; 116 131 return (m_value - kFixedPointDenominator + 1) / kFixedPointDenominator; 132 #else 133 return m_value; 134 #endif 117 135 } 118 136 inline int round() const 119 137 { 138 #if ENABLE(SUBPIXEL_LAYOUT) 120 139 if (m_value > 0) 121 140 return (m_value + (kFixedPointDenominator / 2)) / kFixedPointDenominator; 122 141 return (m_value - (kFixedPointDenominator / 2)) / kFixedPointDenominator; 142 #else 143 return m_value; 144 #endif 123 145 } 124 146 -
trunk/Source/WebCore/platform/graphics/FractionalLayoutRect.cpp
r115647 r116549 149 149 } 150 150 151 IntRect pixelSnappedIntRect(const FractionalLayoutRect& rect)152 {153 IntPoint roundedLocation = roundedIntPoint(rect.location());154 return IntRect(roundedLocation, IntSize((rect.x() + rect.width()).round() - roundedLocation.x(),155 (rect.y() + rect.height()).round() - roundedLocation.y()));156 }157 158 151 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/FractionalLayoutRect.h
r116392 r116549 57 57 58 58 IntPoint pixelSnappedLocation() const { return roundedIntPoint(m_location); } 59 IntSize pixelSnappedSize() const { return pixelSnappedIntSize(m_size, m_location); }59 IntSize pixelSnappedSize() const { return IntSize(snapSizeToPixel(m_size.width(), m_location.x()), snapSizeToPixel(m_size.height(), m_location.y())); } 60 60 61 61 void setLocation(const FractionalLayoutPoint& location) { m_location = location; } … … 185 185 } 186 186 187 inline IntRect pixelSnappedIntRect(const FractionalLayoutRect& rect) 188 { 189 #if ENABLE(SUBPIXEL_LAYOUT) 190 IntPoint roundedLocation = roundedIntPoint(rect.location()); 191 return IntRect(roundedLocation, IntSize((rect.x() + rect.width()).round() - roundedLocation.x(), 192 (rect.y() + rect.height()).round() - roundedLocation.y())); 193 #else 194 return IntRect(rect); 195 #endif 196 } 197 187 198 IntRect enclosingIntRect(const FractionalLayoutRect&); 188 199 FractionalLayoutRect enclosingFractionalLayoutRect(const FloatRect&); 189 IntRect pixelSnappedIntRect(const FractionalLayoutRect&);190 200 191 201 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/FractionalLayoutSize.h
r108138 r116549 146 146 } 147 147 148 IntSize pixelSnappedIntSize(const FractionalLayoutSize&, const FractionalLayoutPoint&);149 150 148 } // namespace WebCore 151 149 -
trunk/Source/WebCore/rendering/LayoutTypes.h
r116009 r116549 156 156 } 157 157 158 inline IntSize pixelSnappedIntSize(const FractionalLayoutSize& s, const FractionalLayoutPoint& p) 159 { 160 return IntSize(snapSizeToPixel(s.width(), p.x()), snapSizeToPixel(s.height(), p.y())); 161 } 162 158 163 inline IntRect pixelSnappedIntRect(LayoutPoint location, LayoutSize size) 159 164 {
Note: See TracChangeset
for help on using the changeset viewer.