Changeset 211145 in webkit
- Timestamp:
- Jan 25, 2017, 8:54:28 AM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 6 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/platform/graphics/x11/PlatformDisplayX11.cpp (modified) (3 diffs)
-
WebCore/platform/graphics/x11/PlatformDisplayX11.h (modified) (2 diffs)
-
WebKit2/ChangeLog (modified) (1 diff)
-
WebKit2/UIProcess/gtk/AcceleratedBackingStoreX11.cpp (modified) (6 diffs)
-
WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r211142 r211145 1 2017-01-25 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] UIProcess from WebKitGtk+ 2.15.x SIGSEGVs because of X Error BadDamage in WebKit::AcceleratedBackingStoreX11::update(WebKit::LayerTreeContext const&) () at Source/WebKit2/UIProcess/gtk/AcceleratedBackingStoreX11.cpp:145 4 https://bugs.webkit.org/show_bug.cgi?id=165656 5 6 Reviewed by Michael Catanzaro. 7 8 Also return the base error code from PlatformDisplayX11::supportsXDamage(). 9 10 * platform/graphics/x11/PlatformDisplayX11.cpp: 11 (WebCore::PlatformDisplayX11::supportsXDamage): 12 * platform/graphics/x11/PlatformDisplayX11.h: 13 1 14 2017-01-25 Carlos Garcia Campos <cgarcia@igalia.com> 2 15 -
trunk/Source/WebCore/platform/graphics/x11/PlatformDisplayX11.cpp
r209064 r211145 99 99 } 100 100 101 bool PlatformDisplayX11::supportsXDamage(std::optional<int>& damageEventBase ) const101 bool PlatformDisplayX11::supportsXDamage(std::optional<int>& damageEventBase, std::optional<int>& damageErrorBase) const 102 102 { 103 103 if (!m_supportsXDamage) { … … 107 107 int eventBase, errorBase; 108 108 m_supportsXDamage = XDamageQueryExtension(m_display, &eventBase, &errorBase); 109 if (m_supportsXDamage.value()) 109 if (m_supportsXDamage.value()) { 110 110 m_damageEventBase = eventBase; 111 m_damageErrorBase = errorBase; 112 } 111 113 } 112 114 #endif … … 114 116 115 117 damageEventBase = m_damageEventBase; 118 damageErrorBase = m_damageErrorBase; 116 119 return m_supportsXDamage.value(); 117 120 } -
trunk/Source/WebCore/platform/graphics/x11/PlatformDisplayX11.h
r209064 r211145 44 44 Display* native() const { return m_display; } 45 45 bool supportsXComposite() const; 46 bool supportsXDamage(std::optional<int>& damageEventBase ) const;46 bool supportsXDamage(std::optional<int>& damageEventBase, std::optional<int>& damageErrorBase) const; 47 47 48 48 private: … … 57 57 mutable std::optional<bool> m_supportsXDamage; 58 58 mutable std::optional<int> m_damageEventBase; 59 mutable std::optional<int> m_damageErrorBase; 59 60 }; 60 61 -
trunk/Source/WebKit2/ChangeLog
r211141 r211145 1 2017-01-25 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] UIProcess from WebKitGtk+ 2.15.x SIGSEGVs because of X Error BadDamage in WebKit::AcceleratedBackingStoreX11::update(WebKit::LayerTreeContext const&) () at Source/WebKit2/UIProcess/gtk/AcceleratedBackingStoreX11.cpp:145 4 https://bugs.webkit.org/show_bug.cgi?id=165656 5 6 Reviewed by Michael Catanzaro. 7 8 We are incorrectly handling BadDamage errors because the BadDamage value we pass to the XErrorTrapper is not 9 the actual error code used by X11. Since XDamage is an extension, it has its own errors and a base error 10 code. We need to use the base error code we get when calling XDamageQueryExtension to pass the right error code 11 to the XErrorTrapper. 12 13 * UIProcess/gtk/AcceleratedBackingStoreX11.cpp: 14 (WebKit::AcceleratedBackingStoreX11::create): Get also the damage base error. 15 (WebKit::xDamageErrorCode): Helper to get the actual error code. 16 (WebKit::AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11): Use xDamageErrorCode(). 17 (WebKit::AcceleratedBackingStoreX11::update): Ditto. 18 1 19 2017-01-25 Miguel Gomez <magomez@igalia.com> 2 20 -
trunk/Source/WebKit2/UIProcess/gtk/AcceleratedBackingStoreX11.cpp
r209063 r211145 48 48 49 49 static std::optional<int> s_damageEventBase; 50 static std::optional<int> s_damageErrorBase; 50 51 51 52 class XDamageNotifier { … … 106 107 { 107 108 auto& display = downcast<PlatformDisplayX11>(PlatformDisplay::sharedDisplay()); 108 if (!display.supportsXComposite() || !display.supportsXDamage(s_damageEventBase ))109 if (!display.supportsXComposite() || !display.supportsXDamage(s_damageEventBase, s_damageErrorBase)) 109 110 return nullptr; 110 111 return std::unique_ptr<AcceleratedBackingStoreX11>(new AcceleratedBackingStoreX11(webPage)); … … 116 117 } 117 118 119 static inline unsigned char xDamageErrorCode(unsigned char errorCode) 120 { 121 ASSERT(s_damageErrorBase); 122 return static_cast<unsigned>(s_damageErrorBase.value()) + errorCode; 123 } 124 118 125 AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11() 119 126 { … … 122 129 123 130 Display* display = downcast<PlatformDisplayX11>(PlatformDisplay::sharedDisplay()).native(); 124 XErrorTrapper trapper(display, XErrorTrapper::Policy::Crash, { BadDrawable, BadDamage});131 XErrorTrapper trapper(display, XErrorTrapper::Policy::Crash, { BadDrawable, xDamageErrorCode(BadDamage) }); 125 132 if (m_damage) { 126 133 XDamageNotifier::singleton().remove(m_damage.get()); … … 139 146 140 147 if (m_surface) { 141 XErrorTrapper trapper(display, XErrorTrapper::Policy::Crash, { BadDrawable, BadDamage});148 XErrorTrapper trapper(display, XErrorTrapper::Policy::Crash, { BadDrawable, xDamageErrorCode(BadDamage) }); 142 149 if (m_damage) { 143 150 XDamageNotifier::singleton().remove(m_damage.get()); … … 159 166 size.scale(deviceScaleFactor); 160 167 161 XErrorTrapper trapper(display, XErrorTrapper::Policy::Crash, { BadDrawable, BadDamage});168 XErrorTrapper trapper(display, XErrorTrapper::Policy::Crash, { BadDrawable, xDamageErrorCode(BadDamage) }); 162 169 ASSERT(downcast<PlatformDisplayX11>(PlatformDisplay::sharedDisplay()).native() == GDK_DISPLAY_XDISPLAY(gdk_display_get_default())); 163 170 GdkVisual* visual = gdk_screen_get_rgba_visual(gdk_screen_get_default()); -
trunk/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp
r209534 r211145 62 62 if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) { 63 63 auto& display = downcast<PlatformDisplayX11>(PlatformDisplay::sharedDisplay()); 64 std::optional<int> damageBase ;65 if (!display.supportsXComposite() || !display.supportsXDamage(damageBase ))64 std::optional<int> damageBase, errorBase; 65 if (!display.supportsXComposite() || !display.supportsXDamage(damageBase, errorBase)) 66 66 setAcceleratedCompositingEnabled(false); 67 67 }
Note:
See TracChangeset
for help on using the changeset viewer.