Tizen 2.4.0 rev3 SDK Public Release accepted/tizen_2.4_mobile tizen_2.4 accepted/tizen/2.4/mobile/20160307.020021 submit/tizen_2.4/20160306.235807
authorjk7744.park <jk7744.park@samsung.com>
Fri, 4 Mar 2016 11:03:55 +0000 (20:03 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Fri, 4 Mar 2016 11:03:55 +0000 (20:03 +0900)
27 files changed:
.gbs.conf
Source/WTF/wtf/Platform.h
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/shadow/MediaControlElements.cpp
Source/WebCore/html/shadow/MediaControlRootElement.cpp
Source/WebCore/platform/graphics/GraphicsLayer.h
Source/WebCore/platform/graphics/TiledBackingStore.cpp
Source/WebCore/platform/graphics/TiledBackingStore.h
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
Source/WebCore/rendering/PaintPhase.h
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayerBacking.cpp
Source/WebCore/svg/SVGViewSpec.cpp
Source/WebKit2/UIProcess/API/efl/CAPI/ewk_context_menu.h
Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
Source/WebKit2/UIProcess/API/efl/tizen/GestureClient.cpp
Source/WebKit2/UIProcess/API/efl/tizen/Pan.cpp
Source/WebKit2/UIProcess/API/efl/tizen/Pan.h
Source/WebKit2/UIProcess/API/efl/tizen/SmoothAlgorithm.cpp
Source/WebKit2/UIProcess/API/efl/tizen/Zoom.cpp
Source/WebKit2/UIProcess/API/efl/tizen/Zoom.h
Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp
Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h
Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp
Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h

index 411529a..1dd1596 100644 (file)
--- a/.gbs.conf
+++ b/.gbs.conf
@@ -12,10 +12,14 @@ obs = obs.spin
 repos = repo.spin_2.4_base_standard, repo.spin_2.4_mobile_target_tm1
 
 [repo.spin_2.4_mobile_target_tm1]
-url = http://168.219.209.55/download/snapshots/2.4-mobile/common/latest/repos/target-TM1/packages/
+url = http://165.213.149.200/download/snapshots/2.4-mobile-release/common/latest/repos/target-TM1/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
 
 [repo.spin_2.4_base_standard]
-url = http://168.219.209.55/download/snapshots/2.4-base/common/latest/repos/standard/packages/
+url = http://165.213.149.200/download/snapshots/2.4-base/common/latest/repos/standard/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
 
 [profile.sdk]
 
@@ -24,7 +28,11 @@ obs = obs.spin
 repos = repo.spin_2.4_base_emulator, repo.spin_2.4_mobile_emulator
 
 [repo.spin_2.4_mobile_emulator]
-url = http://168.219.209.55/download/snapshots/2.4-mobile/common/latest/repos/emulator/packages/
+url = http://165.213.149.200/download/snapshots/2.4-mobile-release/common/latest/repos/emulator/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
 
 [repo.spin_2.4_base_emulator]
-url = http://168.219.209.55/download/snapshots/2.4-base/common/latest/repos/emulator/packages/
+url = http://165.213.149.200/download/snapshots/2.4-base/common/latest/repos/emulator/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
index cab2ea5..b966eab 100755 (executable)
@@ -989,6 +989,8 @@ com) : Patch to do not adjust cover rect as fixed pixel size*/
 #define ENABLE_TIZEN_AVOID_NORMALIZATION_FOR_FILE 1 /* Loader Team */
 
 #if ENABLE(TIZEN_GSTREAMER_VIDEO)
+#define ENABLE_SKIP_PLAY_MEDIA_SEEKING 0 /* Mahesha N(mahesha.n@samsung.com) : Use Skip Play Seekingfeature for HTML Audio and Video Features. */
+
 #if CPU(X86) || CPU(X86_64)
 #define ENABLE_TIZEN_USE_HW_VIDEO_OVERLAY_IN_FULLSCREEN 0 /* Eojin ham(eojin.ham@samsung.com) : Use HW video overlay when play video in fullscreen. */
 #else
index f9fde2d..dcbc8a2 100644 (file)
@@ -1,3 +1,13 @@
+2013-03-06  Abhishek Arya  <inferno@chromium.org>
+
+        Crash in SVGViewSpec::viewTarget
+        https://bugs.webkit.org/show_bug.cgi?id=111648
+
+        Reviewed by Philip Rogers.
+
+        * svg/SVGViewSpec.cpp:
+        (WebCore::SVGViewSpec::viewTarget):
+
 2013-03-14  Ojan Vafai  <ojan@chromium.org>
 
         Auto height column flexboxes with border and padding are too short
index 89fefe8..0166c8c 100755 (executable)
@@ -2497,9 +2497,7 @@ void HTMLMediaElement::playInternal()
     if (endedPlayback()) {
         ExceptionCode unused;
         seek(0, unused);
-    }
-
-    if (m_mediaController)
+    } else if (m_mediaController)
         m_mediaController->bringElementUpToSpeed(this);
 
     if (m_paused) {
index 5b6880e..8d96f6c 100755 (executable)
@@ -709,10 +709,12 @@ void MediaControlSeekButtonElement::defaultEventHandler(Event* event)
 
 void MediaControlSeekButtonElement::setActive(bool flag, bool pause)
 {
+#if ENABLE(SKIP_PLAY_MEDIA_SEEKING)
     if (flag && !m_seekTimer.isActive())
         m_seekTimer.start(1, cSkipRepeatDelay);
     else if (m_seekTimer.isActive())
         m_seekTimer.stop();
+#endif
 
     MediaControlInputElement::setActive(flag, pause);
 }
@@ -728,9 +730,11 @@ bool MediaControlSeekButtonElement::stopSeeking()
 
 void MediaControlSeekButtonElement::seekTimerFired(Timer<MediaControlSeekButtonElement>*)
 {
+#if ENABLE(SKIP_PLAY_MEDIA_SEEKING)
     ExceptionCode ec;
     float skipTime = isForwardButton() ? cSkipTime : -cSkipTime;
     mediaController()->setCurrentTime(mediaController()->currentTime() + skipTime, ec);
+#endif
 }
 #else
 inline MediaControlSeekButtonElement::MediaControlSeekButtonElement(Document* document, MediaControlElementType displayType)
index 299d0ff..b2dce75 100755 (executable)
@@ -424,8 +424,7 @@ void MediaControlRootElement::reset()
     updateStatusDisplay();
 
 #if ENABLE(TIZEN_GSTREAMER_VIDEO)
-    if (m_mediaController->supportsFullscreen() && !m_isFullscreen)
-        m_fullScreenButton->show();
+    m_fullScreenButton->hide();
 #else
     if (m_mediaController->supportsFullscreen())
         m_fullScreenButton->show();
@@ -602,6 +601,11 @@ void MediaControlRootElement::loadedMetadata()
         m_statusDisplay->hide();
 
     reset();
+
+#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+    if (m_mediaController->supportsFullscreen() && !m_isFullscreen)
+        m_fullScreenButton->show();
+#endif
 }
 
 void MediaControlRootElement::changedClosedCaptionsVisibility()
index 3829b46..e1224bc 100644 (file)
@@ -439,6 +439,11 @@ public:
     void setCoverAreaMultiplier(double coverAreaMultiplier);
 #endif
 
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    virtual bool filterPaintingDisabled() const { return false; }
+    virtual void syncInvalidationForBlurFilter() { }
+#endif
+
 protected:
     // Should be called from derived class destructors. Should call willBeDestroyed() on super.
     virtual void willBeDestroyed();
index f2a7d3e..6fc244e 100644 (file)
@@ -146,6 +146,20 @@ void TiledBackingStore::invalidate(const IntRect& contentsDirtyRect)
 #endif
 }
 
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+bool TiledBackingStore::hasDirtyRect()
+{
+    TileMap::iterator end = m_tiles.end();
+    for (TileMap::iterator it = m_tiles.begin(); it != end; ++it) {
+        if (it->second->isDirty())
+            return true;
+    }
+
+    return false;
+}
+#endif
+
 #if ENABLE(TIZEN_RECORDING_SURFACE_PAINT_THREAD)
 void TiledBackingStore::updateTileBuffersBegin()
 {
index 22d7d5b..496f31a 100644 (file)
@@ -103,6 +103,10 @@ public:
     void setCanInvalidateLowScaleBackingStore(bool canInvalidate) { m_canInvalidateLowScaleBackingStore = canInvalidate; }
 #endif
 
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    bool hasDirtyRect();
+#endif
+
 private:
 #if !ENABLE(TIZEN_RECORDING_SURFACE_PAINT_THREAD)
     void startTileBufferUpdateTimer();
index ada2d24..3e35d09 100755 (executable)
@@ -253,6 +253,15 @@ static gboolean mediaPlayerPrivateVolumeChangeTimeoutCallback(MediaPlayerPrivate
     return FALSE;
 }
 
+static gboolean mediaPlayerPrivateBufferUnderrunCallback(MediaPlayerPrivateGStreamer* player)
+{
+    if (player->isDestroyed(player))
+        return FALSE;
+
+    player->notifyPlayerNoMoreDataToPlay();
+    return FALSE;
+}
+
 static void mediaPlayerPrivateMuteChangedCallback(GObject*, GParamSpec*, MediaPlayerPrivateGStreamer* player)
 {
     if (player->isDestroyed(player))
@@ -313,6 +322,12 @@ static gboolean mediaPlayerPrivateVideoChangeTimeoutCallback(MediaPlayerPrivateG
     return FALSE;
 }
 
+static void mediaPlayerPrivateMultiQueueUnderRunCallback(GstElement* bin, MediaPlayerPrivateGStreamer* player)
+{
+    if (!player->isDestroyed(player))
+        player->multiQueueUnderrunHandle();
+}
+
 #if ENABLE(TIZEN_GSTREAMER_VIDEO)
 static void mediaPlayerPrivateSourceSetupCallback(GObject*, GstElement* source, MediaPlayerPrivateGStreamer* player)
 {
@@ -401,6 +416,7 @@ static void mediaPlayerPrivateElementAddedCallback(GstBin* bin, GstElement* elem
         player->setMultiQueue(element);
         player->initializeMultiQueue();
         g_signal_handlers_disconnect_by_func(GST_ELEMENT_PARENT(element), reinterpret_cast<gpointer>(mediaPlayerPrivateElementAddedCallback), player);
+        g_signal_connect(GST_BIN(element), "underrun", G_CALLBACK(mediaPlayerPrivateMultiQueueUnderRunCallback), player);
     } else if (String(GST_ELEMENT_NAME (element)).startsWith("typefindelement", false)) {
         g_signal_connect(GST_BIN(element), "have-type", G_CALLBACK(mediaPlayerPrivateHaveTypeCallback), player);
     } else if (String(GST_ELEMENT_NAME (element)).startsWith("queue2", false)) {
@@ -562,6 +578,7 @@ MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player)
     , m_hasVideo(false)
     , m_hasAudio(false)
     , m_audioTimerHandler(0)
+    , m_bufferUnderrunHandler(0)
     , m_videoTimerHandler(0)
     , m_webkitAudioSink(0)
     , m_totalBytes(-1)
@@ -600,8 +617,8 @@ MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player)
     , m_updatePixmapSize(true)
 #endif
 {
-#if ENABLE(TIZEN_USE_HW_VIDEO_OVERLAY_IN_FULLSCREEN)
-    if (element()->isFullscreen())
+#if ENABLE(TIZEN_USE_HW_VIDEO_OVERLAY_IN_FULLSCREEN) && ENABLE(TIZEN_EXTENSIBLE_API)
+    if (element()->isFullscreen() && TizenExtensibleAPI::extensibleAPI().hwVideoOverlayInFullscreen())
         m_overlayType = MediaPlayer::HwOverlay;
 #endif
 
@@ -667,6 +684,7 @@ MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer()
 #if ENABLE(TIZEN_GSTREAMER_VIDEO)
         g_signal_handlers_disconnect_by_func(m_playBin.get(), reinterpret_cast<gpointer>(mediaPlayerPrivateSourceSetupCallback), this);
 #endif
+        g_signal_handlers_disconnect_by_func(m_playBin.get(), reinterpret_cast<gpointer>(mediaPlayerPrivateMultiQueueUnderRunCallback), this);
         m_playBin = 0;
     }
 
@@ -684,6 +702,9 @@ MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer()
     if (m_audioTimerHandler)
         g_source_remove(m_audioTimerHandler);
 
+    if (m_bufferUnderrunHandler)
+        g_source_remove(m_bufferUnderrunHandler);
+
 #if ENABLE(TIZEN_ACCELERATED_COMPOSITING) && USE(TIZEN_TEXTURE_MAPPER) && ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     if (m_videoLayer)
         m_videoLayer->clearSurface();
@@ -842,7 +863,7 @@ bool MediaPlayerPrivateGStreamer::changePipelineState(GstState newState)
             g_object_set(m_webkitAudioSink.get(), "provide-clock", 0, NULL);
     }
 
-    if (newState == GST_STATE_PLAYING)
+    if (newState == GST_STATE_PLAYING || (isLocalMediaStream() && newState == GST_STATE_PAUSED))
         MediaResourceControllerGStreamerTizen::mediaResourceController().updateAudioSessionState(element(), ASM_STATE_PLAYING);
 #endif
     GstStateChangeReturn setStateResult = gst_element_set_state(m_playBin.get(), newState);
@@ -1273,6 +1294,17 @@ void MediaPlayerPrivateGStreamer::setVolume(float volume)
                                  static_cast<double>(volume));
 }
 
+void MediaPlayerPrivateGStreamer::notifyPlayerNoMoreDataToPlay()
+{
+    // NetworkError needs to be fired after playing buffered data as libsoup is firing
+    // errors if connection is lost in few seconds.
+    if (m_shouldDelayErrorEvent) {
+        LOG_MEDIA_MESSAGE("Delayed network error event fired.");
+        m_shouldDelayErrorEvent = false;
+        loadingFailed(MediaPlayer::NetworkError);
+    }
+}
+
 void MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange()
 {
     m_volumeTimerHandler = 0;
@@ -1593,6 +1625,15 @@ gboolean MediaPlayerPrivateGStreamer::handleMessage(GstMessage* message)
     return TRUE;
 }
 
+void MediaPlayerPrivateGStreamer::multiQueueUnderrunHandle()
+{
+    // Underrun callback works from streaming thread, need to run handler from
+    // main thread
+    if (m_bufferUnderrunHandler)
+        g_source_remove(m_bufferUnderrunHandler);
+    m_bufferUnderrunHandler = g_timeout_add(0, reinterpret_cast<GSourceFunc>(mediaPlayerPrivateBufferUnderrunCallback), this);
+}
+
 void MediaPlayerPrivateGStreamer::processBufferingStats(GstMessage* message)
 {
     // This is the immediate buffering that needs to happen so we have
index 68e62c7..a369d72 100755 (executable)
@@ -92,6 +92,7 @@ class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface
             void setMuted(bool);
             void muteChanged();
             void notifyPlayerOfMute();
+            void notifyPlayerNoMoreDataToPlay();
 
             void setPreload(MediaPlayer::Preload);
             void fillTimerFired(Timer<MediaPlayerPrivateGStreamer>*);
@@ -203,6 +204,7 @@ class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface
             virtual void changeOverlayType(MediaPlayer::OverlayType);
             virtual void rotateHwOverlayVideo();
 #endif
+            void multiQueueUnderrunHandle();
         private:
             MediaPlayerPrivateGStreamer(MediaPlayer*);
 
@@ -322,6 +324,7 @@ class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface
             bool m_hasVideo;
             bool m_hasAudio;
             guint m_audioTimerHandler;
+            guint m_bufferUnderrunHandler;
             guint m_videoTimerHandler;
             GRefPtr<GstElement> m_webkitAudioSink;
             mutable long m_totalBytes;
index be4c61b..c1f74b7 100644 (file)
@@ -57,6 +57,9 @@ enum PaintBehaviorFlags {
     PaintBehaviorSelectionOnly = 1 << 0,
     PaintBehaviorForceBlackText = 1 << 1,
     PaintBehaviorFlattenCompositingLayers = 1 << 2,
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    PaintBehaviorDiableFilterPainting = 1 << 4,
+#endif
     PaintBehaviorRenderingSVGMask = 1 << 3
 };
 
index 64b987a..f88077d 100644 (file)
@@ -3478,7 +3478,12 @@ void RenderLayer::paintLayerContents(RenderLayer* rootLayer, GraphicsContext* co
 
 #if ENABLE(CSS_FILTERS)
     FilterEffectRendererHelper filterPainter(filterRenderer() && paintsWithFilters());
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    bool filterPaintingDisabled = paintBehavior & PaintBehaviorDiableFilterPainting;
+    if (filterPainter.haveFilterEffect() && !context->paintingDisabled() && !filterPaintingDisabled) {
+#else
     if (filterPainter.haveFilterEffect() && !context->paintingDisabled()) {
+#endif
         LayoutPoint rootLayerOffset;
         convertToLayerCoords(rootLayer, rootLayerOffset);
         RenderLayerFilterInfo* filterInfo = this->filterInfo();
index ce11c72..39241ea 100644 (file)
@@ -1530,7 +1530,15 @@ void RenderLayerBacking::paintContents(const GraphicsLayer* graphicsLayer, Graph
 #endif
 
         // We have to use the same root as for hit testing, because both methods can compute and cache clipRects.
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+        PaintBehavior paintBehavior = PaintBehaviorNormal;
+        if (graphicsLayer->filterPaintingDisabled())
+            paintBehavior |= PaintBehaviorDiableFilterPainting;
+
+        paintIntoLayer(m_owningLayer, &context, dirtyRect, paintBehavior, paintingPhase, renderer());
+#else
         paintIntoLayer(m_owningLayer, &context, dirtyRect, PaintBehaviorNormal, paintingPhase, renderer());
+#endif
 
         if (m_usingTiledCacheLayer)
             m_owningLayer->renderer()->frame()->view()->setLastPaintTime(currentTime());
index 08ab852..f81e806 100644 (file)
@@ -149,7 +149,10 @@ SVGElement* SVGViewSpec::viewTarget() const
 {
     if (!m_contextElement)
         return 0;
-    return static_cast<SVGElement*>(m_contextElement->treeScope()->getElementById(m_viewTargetString));
+    Element* element = m_contextElement->treeScope()->getElementById(m_viewTargetString);
+    if (!element || !element->isSVGElement())
+        return 0;
+    return static_cast<SVGElement*>(element);
 }
 
 SVGTransformListPropertyTearOff* SVGViewSpec::transform()
index 96d185e..befea90 100644 (file)
@@ -39,7 +39,10 @@ extern "C" {
 
 /**
  * \enum    _Ewk_Context_Menu_Item_Tag
- * @brief   Enumeration that provides the tags of items in the context menu.
+ *
+ * @brief   Enumeration that provides the tags of items in the context menu.\n
+ * Enumeration values from 9001 to 9999 of _Ewk_Context_Menu_Item_Tag are reserved for product vendors.
+ *
  * @since_tizen 2.3
  */
 enum _Ewk_Context_Menu_Item_Tag{
index 70f3f16..19ccb05 100755 (executable)
@@ -5220,6 +5220,10 @@ void ewk_view_touch_event_handler_result_set(Evas_Object* ewkView, WebKit::WebEv
         g_enableEvasRender = true;
 #endif
         if (!impl->exceedTouchTapThreshold) {
+            unsigned numberOfTouchPoints = evas_touch_point_list_count(smartData->base.evas);
+            if (numberOfTouchPoints == 0 && wasHandled)
+                impl->gestureClient->setGestureEnabled(false);
+
             impl->gestureClient->setTapEnabled(!wasHandled);
 #if ENABLE(TIZEN_ISF_PORT)
             if (wasHandled && impl->pageProxy->isViewVisible() && impl->inputMethodContext()) {
index ef88800..d16601a 100755 (executable)
@@ -213,7 +213,7 @@ void GestureClient::startTap(const IntPoint& position)
 
 void GestureClient::endTap(const IntPoint& position)
 {
-    if (!m_isTapEnabled) {
+    if (!m_isTapEnabled && m_isGestureEnabled) {
         setTapScheduled(true, position);
         return;
     }
@@ -344,7 +344,7 @@ void GestureClient::startPinch(const IntPoint& position, double scale)
 
     int viewX, viewY;
     evas_object_geometry_get(m_viewImpl->view(), &viewX, &viewY, 0, 0);
-    m_zoom->start(position, IntPoint(viewX, viewY));
+    m_zoom->start(position, IntPoint(viewX, viewY), scale);
 #if ENABLE(TIZEN_DLOG_SUPPORT)
     TIZEN_LOGI("[Touch] position[%d, %d]", position.x(), position.y());
 #endif
index e4f60ba..71b6419 100644 (file)
@@ -45,8 +45,6 @@ Pan::Pan(EwkViewImpl* viewImpl)
 #endif
     , m_isTheFirstPanAnimatorProcessed(false)
     , m_dataStoreTrigger(false)
-    , m_animatorTimeStamp(0)
-    , m_currentAnimatorTime(0)
 #if ENABLE(TIZEN_ENABLE_MINIMUM_2_CPU_ON_MOUSE_DOWN)
     , m_enable2CpuJob(0)
 #endif
@@ -232,12 +230,6 @@ Eina_Bool Pan::panAnimatorCallback(void* data)
 {
     Pan* pan = static_cast<Pan*>(data);
 
-    double currentTimeStamp = ecore_time_get();
-    if (pan->m_animatorTimeStamp)
-        pan->m_currentAnimatorTime = currentTimeStamp - pan->m_animatorTimeStamp;
-
-    pan->m_animatorTimeStamp = currentTimeStamp;
-
     // We have to skip first vsync animator in order to prevent
     // to draw two times within 16ms during GPU clock is low.
     if (!pan->m_isTheFirstPanAnimatorProcessed) {
@@ -260,15 +252,8 @@ void Pan::process()
                                         m_history[index2].x, m_history[index2].y, m_history[index2].time);
     }
 #endif
-    // deltaCalibraion is for the compensation of the irregualr animator time.
-    // delatCalibration should be set when m_currentAnimatorTime is between 8ms and 32ms.
-    // If not, deltaX and deltaY can have meaningless values.
-    double deltaCalibration = 1.0;
-    if (m_currentAnimatorTime > 0.008 && m_currentAnimatorTime < 0.032)
-        deltaCalibration = ecore_animator_frametime_get() / m_currentAnimatorTime;
-
-    int deltaX = floor((m_lastPoint.x() - m_currentPoint.x()) * deltaCalibration + 0.5);
-    int deltaY = floor((m_lastPoint.y() - m_currentPoint.y()) * deltaCalibration + 0.5);
+    int deltaX = m_lastPoint.x() - m_currentPoint.x();
+    int deltaY = m_lastPoint.y() - m_currentPoint.y();
 
     PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
     EINA_SAFETY_ON_NULL_RETURN(pageClientImpl);
index aa9983b..3745057 100644 (file)
@@ -100,8 +100,6 @@ private:
 #endif
     bool m_isTheFirstPanAnimatorProcessed;
     bool m_dataStoreTrigger;
-    double m_animatorTimeStamp;
-    double m_currentAnimatorTime;
 #if ENABLE(TIZEN_ENABLE_MINIMUM_2_CPU_ON_MOUSE_DOWN)
     Ecore_Job* m_enable2CpuJob;
 #endif
index 5744605..7d9c191 100644 (file)
@@ -35,7 +35,7 @@ void SmoothAlgorithm::correctPoint(IntPoint& point, int x1, int y1, double times
 {
     double xVelocity = 0;
     double yVelocity = 0;
-    double currentTime = ecore_time_get();
+    double currentTime = ecore_loop_time_get();
     double timeDifference = currentTime - timestamp1;
 
     // Initialize m_lastPoint with latest position.
index 4852e96..9e12329 100755 (executable)
@@ -49,6 +49,9 @@ Zoom::Zoom(EwkViewImpl* viewImpl)
     , m_isZooming(false)
     , m_isZoomInformationUpdated(false)
     , m_isScaleFactorChanged(false)
+    , m_zoomRate(1.0)
+    , m_zoomBeginningRate(1.0)
+    , m_zoomBaseRate(0)
     , m_baseScaleFactor(0)
     , m_newScaleFactor(0)
     , m_currentScaleFactor(0)
@@ -85,15 +88,18 @@ void Zoom::viewRenderPreCallback(void* data, Evas*, void*)
     }
 }
 
-void Zoom::start(const IntPoint& centerPoint, const IntPoint& viewLocation)
+void Zoom::start(const IntPoint& centerPoint, const IntPoint& viewLocation, const double zoom)
 {
     PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
     EINA_SAFETY_ON_NULL_RETURN(pageClientImpl);
     m_isZooming = true;
     m_isStopped = false;
     m_isZoomInformationUpdated = false;
+    m_zoomRate = zoom;
+    m_zoomBeginningRate = zoom;
     m_baseScaleFactor = pageClientImpl->scaleFactor();
     m_newScaleFactor = m_baseScaleFactor;
+    m_zoomBaseRate = m_baseScaleFactor;
     m_currentScaleFactor = m_baseScaleFactor;
     m_newScrollPosition = m_baseScrollPosition = pageClientImpl->scrollPosition();
     m_centerPoint = centerPoint;
@@ -139,16 +145,30 @@ void Zoom::stop()
 void Zoom::update(const double zoom, const IntPoint& centerPoint)
 {
     if (!m_isZooming)
-        start(centerPoint, IntPoint());
+        start(centerPoint, IntPoint(), zoom);
+
+    double scaleDiff = zoom - m_zoomRate;
+    double newScaleFactor = m_newScaleFactor + (m_zoomBaseRate * (scaleDiff / m_zoomBeginningRate));
+    m_zoomRate = zoom;
 
     PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
     EINA_SAFETY_ON_NULL_RETURN(pageClientImpl);
 #if ENABLE(TIZEN_WEBKIT2_TEXT_ZOOM)
-    double newScaleFactor = m_baseScaleFactor * zoom;
-    if (!m_viewImpl->page()->pageGroup()->preferences()->textZoomEnabled())
-        newScaleFactor = pageClientImpl->adjustScaleWithViewport(newScaleFactor);
+    if (m_viewImpl->page()->pageGroup()->preferences()->textZoomEnabled())
+        newScaleFactor = m_baseScaleFactor * zoom;
+    else {
+        double adjustedScaleFactor = pageClientImpl->adjustScaleWithViewport(newScaleFactor);
+        if (adjustedScaleFactor != newScaleFactor) {
+            m_zoomBeginningRate = zoom;
+            newScaleFactor = m_zoomBaseRate = adjustedScaleFactor;
+        }
+    }
 #else
-    double newScaleFactor = pageClientImpl->adjustScaleWithViewport(m_baseScaleFactor * zoom);
+    double adjustedScaleFactor = pageClientImpl->adjustScaleWithViewport(newScaleFactor);
+    if (adjustedScaleFactor != newScaleFactor) {
+        m_zoomBeginningRate = zoom;
+        newScaleFactor = m_zoomBaseRate = adjustedScaleFactor;
+    }
 #endif
 
     m_newScaleFactor = newScaleFactor;
@@ -165,6 +185,9 @@ void Zoom::realStop()
         }
         m_isZooming = false;
 
+        m_zoomBeginningRate = 1.0;
+        m_zoomRate = 1.0;
+
 #if ENABLE(TIZEN_LOW_SCALE_LAYER)
         m_viewImpl->page()->setPaintOnlyLowScaleLayer(false);
 #endif
index a122639..d9bd0e1 100755 (executable)
@@ -35,7 +35,7 @@ public:
     }
     ~Zoom();
 
-    void start(const WebCore::IntPoint& centerPoint, const WebCore::IntPoint& viewLocation);
+    void start(const WebCore::IntPoint& centerPoint, const WebCore::IntPoint& viewLocation, const double zoom);
     void update(const double zoom, const WebCore::IntPoint& centerPoint);
     void stop();
 
@@ -55,6 +55,9 @@ private:
     bool m_isZooming;
     bool m_isZoomInformationUpdated;
     bool m_isScaleFactorChanged;
+    double m_zoomRate;
+    double m_zoomBeginningRate;
+    double m_zoomBaseRate;
     double m_baseScaleFactor;
     double m_newScaleFactor;
     double m_currentScaleFactor;
index 94f9f23..5bc71e9 100644 (file)
@@ -134,6 +134,9 @@ LayerTreeCoordinator::LayerTreeCoordinator(WebPage* webPage)
 #if ENABLE(TIZEN_DEFER_FIXED_LAYER_UPDATE)
     , m_needUpdateFixedLayerPosition(false)
 #endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    , m_needsSyncAnimation(false)
+#endif
 {
 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
     m_webPage->corePage()->settings()->setScrollingCoordinatorEnabled(true);
@@ -408,6 +411,13 @@ bool LayerTreeCoordinator::flushPendingLayerChanges()
     }
 #endif
 
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    if (m_needsSyncAnimation) {
+        m_rootLayer->syncInvalidationForBlurFilter();
+        m_needsSyncAnimation = false;
+    }
+#endif
+
 #if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     WebProcess::shared().platformSurfacePool()->shrinkIfNeeded();
     SharedPlatformSurfaceManagement::getInstance().allowRemove();
index 194a8df..e327551 100644 (file)
@@ -150,6 +150,12 @@ public:
     virtual void setAccelerationMode(bool mode) { m_accelerationMode = (mode ? OpenGLMode : SoftwareMode); }
     virtual AccelerationMode accelerationMode() const { return m_accelerationMode; }
 #endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    virtual bool needsSyncAnimation() { return m_needsSyncAnimation; }
+    virtual void setNeedsSyncAnimation() { m_needsSyncAnimation = true; }
+#endif
+
 #if ENABLE(TIZEN_UPDATE_ONLY_VISIBLE_AREA_STATE)
     void updateOnlyVisibleAreaState(bool state);
 #endif
@@ -296,6 +302,10 @@ private:
 #if ENABLE(TIZEN_DEFER_FIXED_LAYER_UPDATE)
     bool m_needUpdateFixedLayerPosition;
 #endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    bool m_needsSyncAnimation;
+#endif
 };
 
 }
index 78c4b5e..bf88505 100644 (file)
@@ -138,6 +138,10 @@ WebGraphicsLayer::WebGraphicsLayer(GraphicsLayerClient* client)
 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_SCROLLBAR)
     , m_animationTimer(this, &WebGraphicsLayer::animationTimerFired)
 #endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    , m_needsPaintBlurFilter(false)
+    , m_needsInvalidationForBlurFilter(false)
+#endif
 {
     static WebLayerID nextLayerID = 1;
     m_id = nextLayerID++;
@@ -391,8 +395,10 @@ bool WebGraphicsLayer::setFilters(const FilterOperations& newFilters)
             clearFilters();
             didChangeFilters();
         }
+        m_needsPaintBlurFilter = true;
         return false;
     }
+    m_needsPaintBlurFilter = false;
 #endif
 
     if (filters() == newFilters)
@@ -1190,6 +1196,14 @@ void WebGraphicsLayer::updateContentBuffers()
     }
 
     m_inUpdateMode = true;
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    if (filterPaintingDisabled())
+        m_needsInvalidationForBlurFilter |= m_mainBackingStore ? m_mainBackingStore->hasDirtyRect() : true;
+    else
+        m_needsInvalidationForBlurFilter = false;
+#endif
+
     // This is the only place we (re)create the main tiled backing store, once we
     // have a remote client and we are ready to send our data to the UI process.
     if (!m_mainBackingStore)
@@ -1400,6 +1414,10 @@ bool WebGraphicsLayer::addAnimation(const KeyframeValueList& valueList, const In
     didChangeAnimations();
 #endif
     didChangeLayerState();
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    if (m_webGraphicsLayerClient)
+        m_webGraphicsLayerClient->setNeedsSyncAnimation();
+#endif
     return true;
 }
 
@@ -1501,5 +1519,26 @@ double WebGraphicsLayer::backingStoreMemoryEstimate() const
 }
 #endif
 
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+bool WebGraphicsLayer::filterPaintingDisabled() const
+{
+    if (m_webGraphicsLayerClient && m_webGraphicsLayerClient->needsSyncAnimation() && m_needsPaintBlurFilter)
+        return true;
+
+    return false;
+}
+
+void WebGraphicsLayer::syncInvalidationForBlurFilter()
+{
+    if (m_needsInvalidationForBlurFilter) {
+        // Filter effect was not applied so make dirty rect to repaint.
+        setNeedsDisplay();
+        m_needsInvalidationForBlurFilter = false;
+    }
+
+    for (size_t i = 0; i < children().size(); ++i)
+        children()[i]->syncInvalidationForBlurFilter();
+}
+#endif
 }
 #endif
index 0716323..488a60b 100644 (file)
@@ -101,6 +101,11 @@ public:
     enum AccelerationMode { NotReady, SoftwareMode, OpenGLMode };
     virtual AccelerationMode accelerationMode() const = 0;
 #endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    virtual bool needsSyncAnimation() = 0;
+    virtual void setNeedsSyncAnimation() = 0;
+#endif
 };
 }
 
@@ -257,6 +262,11 @@ public:
     virtual double backingStoreMemoryEstimate() const;
 #endif
 
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    virtual bool filterPaintingDisabled() const ;
+    virtual void syncInvalidationForBlurFilter();
+#endif
+
 private:
     virtual void willBeDestroyed();
     WebKit::WebLayerID m_id;
@@ -357,6 +367,11 @@ private:
 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_SCROLLBAR)
     WebCore::Timer<WebGraphicsLayer> m_animationTimer;
 #endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+    bool m_needsPaintBlurFilter;
+    bool m_needsInvalidationForBlurFilter;
+#endif
 };
 
 WebGraphicsLayer* toWebGraphicsLayer(GraphicsLayer*);