namespace WebKit {
-#if ENABLE(TIZEN_LAYER_FLUSH_THROTTLING)
-static const float defaultLayerFlushDelay = 0.0;
-static const float layerFlushDelayDuringLoading = 0.5;
-#endif
-
PassOwnPtr<DrawingAreaImpl> DrawingAreaImpl::create(WebPage* webPage, const WebPageCreationParameters& parameters)
{
return adoptPtr(new DrawingAreaImpl(webPage, parameters));
if (!m_layerTreeHost)
return;
- m_layerTreeHost->setLayerFlushTimerDelay(layerFlushDelayDuringLoading);
+ m_layerTreeHost->setDeferLayerFlush(true);
}
void DrawingAreaImpl::didFinishProgress()
if (!m_layerTreeHost)
return;
- m_layerTreeHost->setLayerFlushTimerDelay(defaultLayerFlushDelay);
+ m_layerTreeHost->setDeferLayerFlush(false);
}
#endif
namespace WebKit {
+#if ENABLE(TIZEN_LAYER_FLUSH_THROTTLING)
+const float LayerTreeCoordinator::s_layerFlushTimerDelayTable[s_layerFlushTimerDelayMaxLevel] = {0, 0.1, 0.2, 0.6, 1.3};
+#endif
+
PassRefPtr<LayerTreeCoordinator> LayerTreeCoordinator::create(WebPage* webPage)
{
return adoptRef(new LayerTreeCoordinator(webPage));
, m_layerFlushSchedulingEnabled(true)
#if ENABLE(TIZEN_LAYER_FLUSH_THROTTLING)
, m_layerFlushTimerDelay(0.0)
+ , m_deferLayerFlushEnabled(false)
+ , m_layerFlushTimerDelayLevel(0)
#endif
#if ENABLE(TIZEN_WEBKIT2_TILED_AC)
, m_suspendedJavaScript(false)
if (!m_layerFlushSchedulingEnabled)
return;
- if (!m_layerFlushTimer.isActive())
+ if (!m_layerFlushTimer.isActive()) {
#if ENABLE(TIZEN_LAYER_FLUSH_THROTTLING)
+ m_layerFlushTimerDelay = deferredLayerFlushDelay();
m_layerFlushTimer.startOneShot(m_layerFlushTimerDelay);
+ }
#if ENABLE(TIZEN_SYNC_REQUEST_ANIMATION_FRAME)
if (m_layerFlushTimerDelay > 0.0)
m_webPage->suspendAnimationController();
#endif
#else
m_layerFlushTimer.startOneShot(0.0);
+ }
#endif
#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
#endif
#if ENABLE(TIZEN_LAYER_FLUSH_THROTTLING)
-void LayerTreeCoordinator::setLayerFlushTimerDelay(float delay)
+void LayerTreeCoordinator::setDeferLayerFlush(bool deferLayerFlushEnabled)
{
- if (m_layerFlushTimerDelay != delay && m_layerFlushTimer.isActive()) {
+ m_deferLayerFlushEnabled = deferLayerFlushEnabled;
+ m_layerFlushTimerDelayLevel = 0;
+ double newDelay = deferredLayerFlushDelay();
+
+ // If the m_layerFlushTimer is already activated, we stop the old timer and then begin the timer with a new delay
+ if (m_layerFlushTimerDelay != newDelay && m_layerFlushTimer.isActive()) {
m_layerFlushTimer.stop();
- m_layerFlushTimer.startOneShot(delay);
+ m_layerFlushTimer.startOneShot(newDelay);
}
- m_layerFlushTimerDelay = delay;
+ m_layerFlushTimerDelay = newDelay;
#if ENABLE(TIZEN_SYNC_REQUEST_ANIMATION_FRAME)
if (m_layerFlushTimerDelay == 0.0)
m_webPage->resumeAnimationController();
#endif
}
+
+float LayerTreeCoordinator::deferredLayerFlushDelay()
+{
+ if (!m_deferLayerFlushEnabled)
+ return 0;
+
+ if (m_layerFlushTimerDelayLevel >= s_layerFlushTimerDelayMaxLevel)
+ m_layerFlushTimerDelayLevel = s_layerFlushTimerDelayMaxLevel - 1;
+
+ return s_layerFlushTimerDelayTable[m_layerFlushTimerDelayLevel++];
+}
#endif
#if ENABLE(TIZEN_CUTOFF_TILES_OVER_MEMORY_LIMIT)
int compositedContentLayersCount(GraphicsLayer*);
#endif
#if ENABLE(TIZEN_LAYER_FLUSH_THROTTLING)
- void setLayerFlushTimerDelay(float);
+ void setDeferLayerFlush(bool deferLayerFlushEnabled);
+ float deferredLayerFlushDelay();
#endif
void scheduleReleaseInactiveAtlases();
bool m_layerFlushSchedulingEnabled;
#if ENABLE(TIZEN_LAYER_FLUSH_THROTTLING)
float m_layerFlushTimerDelay;
+ bool m_deferLayerFlushEnabled;
+ int m_layerFlushTimerDelayLevel;
+ static const int s_layerFlushTimerDelayMaxLevel = 5;
+ static const float s_layerFlushTimerDelayTable[s_layerFlushTimerDelayMaxLevel];
#endif
#if ENABLE(TIZEN_WEBKIT2_TILED_AC)