Changeset 132483 in webkit
- Timestamp:
- Oct 25, 2012 7:48:41 AM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r132480 r132483 1 2012-10-25 Yael Aharon <yael.aharon@intel.com> 2 3 [EFL][WK2][AC] Regression(132392) infinite loop when displaying certain animations. 4 https://bugs.webkit.org/show_bug.cgi?id=100288 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 When PageClientImpl::setViewNeedsDisplay is called, start a 0 length timer. 9 That breaks the synchronous loop we were experiencing when ewk_view_display 10 was called directly. 11 12 * UIProcess/API/efl/EwkViewImpl.cpp: 13 (EwkViewImpl::EwkViewImpl): 14 (EwkViewImpl::displayTimerFired): 15 (EwkViewImpl::redrawRegion): 16 * UIProcess/API/efl/EwkViewImpl.h: 17 (EwkViewImpl): 18 1 19 2012-10-25 Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com> 2 20 -
trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp
r132463 r132483 156 156 #endif 157 157 , m_view(view) 158 , m_displayTimer(this, &EwkViewImpl::displayTimerFired) 158 159 { 159 160 ASSERT(view); … … 247 248 } 248 249 249 void EwkViewImpl:: redrawRegion(const IntRect& rect)250 void EwkViewImpl::displayTimerFired(WebCore::Timer<EwkViewImpl>*) 250 251 { 251 252 Ewk_View_Smart_Data* sd = smartData(); … … 256 257 #if USE(COORDINATED_GRAPHICS) 257 258 EWK_VIEW_IMPL_GET_OR_RETURN(sd, viewImpl); 258 259 evas_gl_make_current(viewImpl->evasGl, viewImpl->evasGlSurface, viewImpl->evasGlContext); 260 viewImpl->pageViewportControllerClient->display(rect, IntPoint(sd->view.x, sd->view.y)); 261 #endif 262 263 evas_object_image_data_update_add(sd->image, rect.x(), rect.y(), rect.width(), rect.height()); 259 #endif 260 261 Region dirtyRegion; 262 for (Vector<IntRect>::iterator it = m_dirtyRects.begin(); it != m_dirtyRects.end(); ++it) 263 dirtyRegion.unite(*it); 264 265 m_dirtyRects.clear(); 266 267 Vector<IntRect> rects = dirtyRegion.rects(); 268 Vector<IntRect>::iterator end = rects.end(); 269 270 for (Vector<IntRect>::iterator it = rects.begin(); it != end; ++it) { 271 IntRect rect = *it; 272 #if USE(COORDINATED_GRAPHICS) 273 evas_gl_make_current(viewImpl->evasGl, viewImpl->evasGlSurface, viewImpl->evasGlContext); 274 viewImpl->pageViewportControllerClient->display(rect, IntPoint(sd->view.x, sd->view.y)); 275 #endif 276 277 evas_object_image_data_update_add(sd->image, rect.x(), rect.y(), rect.width(), rect.height()); 278 } 279 } 280 281 void EwkViewImpl::redrawRegion(const IntRect& rect) 282 { 283 if (!m_displayTimer.isActive()) 284 m_displayTimer.startOneShot(0); 285 m_dirtyRects.append(rect); 264 286 } 265 287 -
trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h
r132463 r132483 29 29 #include <Evas.h> 30 30 #include <WebCore/TextDirection.h> 31 #include <WebCore/Timer.h> 31 32 #include <WebKit2/WKBase.h> 32 33 #include <wtf/HashMap.h> … … 229 230 private: 230 231 Ewk_View_Smart_Data* smartData(); 232 void displayTimerFired(WebCore::Timer<EwkViewImpl>*); 231 233 232 234 Evas_Object* m_view; 233 235 typedef HashMap<WKPageRef, const Evas_Object*> PageViewMap; 234 236 static PageViewMap pageViewMap; 237 WebCore::Timer<EwkViewImpl> m_displayTimer; 238 WTF::Vector <WebCore::IntRect> m_dirtyRects; 235 239 }; 236 240
Note: See TracChangeset
for help on using the changeset viewer.