void Server::start() { lock.lock(); if(!started && runn) { started = true; if(mode==1) { if(fork()==0) { servicing(this); } } else if(mode==2) { Thread servicing_thread(&servicing, this); servicing_thread.execute(); } else if(mode==3) { servicing(this); } } lock.unlock(); }
void PageAnimator::serviceScriptedAnimations(double monotonicAnimationStartTime) { m_animationFramePending = false; TemporaryChange<bool> servicing(m_servicingAnimations, true); Vector<RefPtr<Document> > documents; documents.append(m_page->mainFrame()->document()); WTF_LOG(ScriptedAnimationController, "PageAnimator::serviceScriptedAnimations: #documents = %d", static_cast<int>(documents.size())); for (size_t i = 0; i < documents.size(); ++i) { if (documents[i]->frame()) { if (const FrameView::ScrollableAreaSet* scrollableAreas = documents[i]->view()->scrollableAreas()) { for (FrameView::ScrollableAreaSet::iterator it = scrollableAreas->begin(); it != scrollableAreas->end(); ++it) (*it)->serviceScrollAnimations(monotonicAnimationStartTime); } } } for (size_t i = 0; i < documents.size(); ++i) DocumentAnimations::updateAnimationTimingForAnimationFrame(*documents[i], monotonicAnimationStartTime); for (size_t i = 0; i < documents.size(); ++i) documents[i]->serviceScriptedAnimations(monotonicAnimationStartTime); }
void PageAnimator::serviceScriptedAnimations(double monotonicAnimationStartTime) { m_animationFramePending = false; TemporaryChange<bool> servicing(m_servicingAnimations, true); WillBeHeapVector<RefPtrWillBeMember<Document> > documents; for (RefPtr<Frame> frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) { if (frame->isLocalFrame()) documents.append(toLocalFrame(frame.get())->document()); } for (size_t i = 0; i < documents.size(); ++i) { if (documents[i]->frame()) { documents[i]->view()->serviceScrollAnimations(); if (const FrameView::ScrollableAreaSet* scrollableAreas = documents[i]->view()->scrollableAreas()) { for (FrameView::ScrollableAreaSet::iterator it = scrollableAreas->begin(); it != scrollableAreas->end(); ++it) (*it)->serviceScrollAnimations(); } } } for (size_t i = 0; i < documents.size(); ++i) { DocumentAnimations::updateAnimationTimingForAnimationFrame(*documents[i], monotonicAnimationStartTime); SVGDocumentExtensions::serviceOnAnimationFrame(*documents[i], monotonicAnimationStartTime); } for (size_t i = 0; i < documents.size(); ++i) documents[i]->serviceScriptedAnimations(monotonicAnimationStartTime); }
void PageAnimator::updateLayoutAndStyleForPainting(LocalFrame* rootFrame) { RefPtr<FrameView> view = rootFrame->view(); TemporaryChange<bool> servicing(m_updatingLayoutAndStyleForPainting, true); // In order for our child HWNDs (NativeWindowWidgets) to update properly, // they need to be told that we are updating the screen. The problem is that // the native widgets need to recalculate their clip region and not overlap // any of our non-native widgets. To force the resizing, call // setFrameRect(). This will be a quick operation for most frames, but the // NativeWindowWidgets will update a proper clipping region. view->setFrameRect(view->frameRect()); // setFrameRect may have the side-effect of causing existing page layout to // be invalidated, so layout needs to be called last. view->updateLayoutAndStyleForPainting(); }
void PageAnimator::serviceScriptedAnimations(double monotonicAnimationStartTime) { RefPtrWillBeRawPtr<PageAnimator> protector(this); m_animationFramePending = false; TemporaryChange<bool> servicing(m_servicingAnimations, true); WillBeHeapVector<RefPtrWillBeMember<Document>> documents; for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) { if (frame->isLocalFrame()) documents.append(toLocalFrame(frame)->document()); } for (size_t i = 0; i < documents.size(); ++i) { if (documents[i]->frame()) { documents[i]->view()->serviceScrollAnimations(monotonicAnimationStartTime); if (const FrameView::ScrollableAreaSet* animatingScrollableAreas = documents[i]->view()->animatingScrollableAreas()) { // Iterate over a copy, since ScrollableAreas may deregister // themselves during the iteration. Vector<ScrollableArea*> animatingScrollableAreasCopy; copyToVector(*animatingScrollableAreas, animatingScrollableAreasCopy); for (ScrollableArea* scrollableArea : animatingScrollableAreasCopy) scrollableArea->serviceScrollAnimations(monotonicAnimationStartTime); } } } for (size_t i = 0; i < documents.size(); ++i) { DocumentAnimations::updateAnimationTimingForAnimationFrame(*documents[i], monotonicAnimationStartTime); SVGDocumentExtensions::serviceOnAnimationFrame(*documents[i], monotonicAnimationStartTime); } for (size_t i = 0; i < documents.size(); ++i) documents[i]->serviceScriptedAnimations(monotonicAnimationStartTime); #if ENABLE(OILPAN) documents.clear(); #endif }
void PageAnimator::serviceScriptedAnimations(double monotonicAnimationStartTime) { m_animationFramePending = false; TemporaryChange<bool> servicing(m_servicingAnimations, true); for (RefPtr<Frame> frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) { if (frame->isLocalFrame()) { RefPtr<LocalFrame> localFrame = toLocalFrame(frame.get()); localFrame->view()->serviceScrollAnimations(); DocumentAnimations::updateAnimationTimingForAnimationFrame(*localFrame->document(), monotonicAnimationStartTime); SVGDocumentExtensions::serviceOnAnimationFrame(*localFrame->document(), monotonicAnimationStartTime); } } WillBeHeapVector<RefPtrWillBeMember<Document> > documents; for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) { if (frame->isLocalFrame()) documents.append(toLocalFrame(frame)->document()); } for (size_t i = 0; i < documents.size(); ++i) documents[i]->serviceScriptedAnimations(monotonicAnimationStartTime); }