From b0b16248d24a2d31e3156084a365e2aa1519f66e Mon Sep 17 00:00:00 2001 From: "jk7744.park" Date: Fri, 4 Mar 2016 20:03:55 +0900 Subject: [PATCH] Tizen 2.4.0 rev3 SDK Public Release --- .gbs.conf | 16 ++++++-- Source/WTF/wtf/Platform.h | 2 + Source/WebCore/ChangeLog | 10 +++++ Source/WebCore/html/HTMLMediaElement.cpp | 4 +- .../WebCore/html/shadow/MediaControlElements.cpp | 4 ++ .../html/shadow/MediaControlRootElement.cpp | 8 +++- Source/WebCore/platform/graphics/GraphicsLayer.h | 5 +++ .../platform/graphics/TiledBackingStore.cpp | 14 +++++++ .../WebCore/platform/graphics/TiledBackingStore.h | 4 ++ .../gstreamer/MediaPlayerPrivateGStreamer.cpp | 47 ++++++++++++++++++++-- .../gstreamer/MediaPlayerPrivateGStreamer.h | 3 ++ Source/WebCore/rendering/PaintPhase.h | 3 ++ Source/WebCore/rendering/RenderLayer.cpp | 5 +++ Source/WebCore/rendering/RenderLayerBacking.cpp | 8 ++++ Source/WebCore/svg/SVGViewSpec.cpp | 5 ++- .../UIProcess/API/efl/CAPI/ewk_context_menu.h | 5 ++- Source/WebKit2/UIProcess/API/efl/ewk_view.cpp | 4 ++ .../UIProcess/API/efl/tizen/GestureClient.cpp | 4 +- Source/WebKit2/UIProcess/API/efl/tizen/Pan.cpp | 19 +-------- Source/WebKit2/UIProcess/API/efl/tizen/Pan.h | 2 - .../UIProcess/API/efl/tizen/SmoothAlgorithm.cpp | 2 +- Source/WebKit2/UIProcess/API/efl/tizen/Zoom.cpp | 35 +++++++++++++--- Source/WebKit2/UIProcess/API/efl/tizen/Zoom.h | 5 ++- .../LayerTreeCoordinator/LayerTreeCoordinator.cpp | 10 +++++ .../LayerTreeCoordinator/LayerTreeCoordinator.h | 10 +++++ .../LayerTreeCoordinator/WebGraphicsLayer.cpp | 39 ++++++++++++++++++ .../LayerTreeCoordinator/WebGraphicsLayer.h | 15 +++++++ 27 files changed, 245 insertions(+), 43 deletions(-) diff --git a/.gbs.conf b/.gbs.conf index 411529a..1dd1596 100644 --- 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== diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h index cab2ea5..b966eab 100755 --- a/Source/WTF/wtf/Platform.h +++ b/Source/WTF/wtf/Platform.h @@ -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 diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index f9fde2d..dcbc8a2 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,13 @@ +2013-03-06 Abhishek Arya + + 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 Auto height column flexboxes with border and padding are too short diff --git a/Source/WebCore/html/HTMLMediaElement.cpp b/Source/WebCore/html/HTMLMediaElement.cpp index 89fefe8..0166c8c 100755 --- a/Source/WebCore/html/HTMLMediaElement.cpp +++ b/Source/WebCore/html/HTMLMediaElement.cpp @@ -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) { diff --git a/Source/WebCore/html/shadow/MediaControlElements.cpp b/Source/WebCore/html/shadow/MediaControlElements.cpp index 5b6880e..8d96f6c 100755 --- a/Source/WebCore/html/shadow/MediaControlElements.cpp +++ b/Source/WebCore/html/shadow/MediaControlElements.cpp @@ -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*) { +#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) diff --git a/Source/WebCore/html/shadow/MediaControlRootElement.cpp b/Source/WebCore/html/shadow/MediaControlRootElement.cpp index 299d0ff..b2dce75 100755 --- a/Source/WebCore/html/shadow/MediaControlRootElement.cpp +++ b/Source/WebCore/html/shadow/MediaControlRootElement.cpp @@ -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() diff --git a/Source/WebCore/platform/graphics/GraphicsLayer.h b/Source/WebCore/platform/graphics/GraphicsLayer.h index 3829b46..e1224bc 100644 --- a/Source/WebCore/platform/graphics/GraphicsLayer.h +++ b/Source/WebCore/platform/graphics/GraphicsLayer.h @@ -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(); diff --git a/Source/WebCore/platform/graphics/TiledBackingStore.cpp b/Source/WebCore/platform/graphics/TiledBackingStore.cpp index f2a7d3e..6fc244e 100644 --- a/Source/WebCore/platform/graphics/TiledBackingStore.cpp +++ b/Source/WebCore/platform/graphics/TiledBackingStore.cpp @@ -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() { diff --git a/Source/WebCore/platform/graphics/TiledBackingStore.h b/Source/WebCore/platform/graphics/TiledBackingStore.h index 22d7d5b..496f31a 100644 --- a/Source/WebCore/platform/graphics/TiledBackingStore.h +++ b/Source/WebCore/platform/graphics/TiledBackingStore.h @@ -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(); diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp index ada2d24..3e35d09 100755 --- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp @@ -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(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(mediaPlayerPrivateSourceSetupCallback), this); #endif + g_signal_handlers_disconnect_by_func(m_playBin.get(), reinterpret_cast(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(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(mediaPlayerPrivateBufferUnderrunCallback), this); +} + void MediaPlayerPrivateGStreamer::processBufferingStats(GstMessage* message) { // This is the immediate buffering that needs to happen so we have diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h index 68e62c7..a369d72 100755 --- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h +++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h @@ -92,6 +92,7 @@ class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface void setMuted(bool); void muteChanged(); void notifyPlayerOfMute(); + void notifyPlayerNoMoreDataToPlay(); void setPreload(MediaPlayer::Preload); void fillTimerFired(Timer*); @@ -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 m_webkitAudioSink; mutable long m_totalBytes; diff --git a/Source/WebCore/rendering/PaintPhase.h b/Source/WebCore/rendering/PaintPhase.h index be4c61b..c1f74b7 100644 --- a/Source/WebCore/rendering/PaintPhase.h +++ b/Source/WebCore/rendering/PaintPhase.h @@ -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 }; diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp index 64b987a..f88077d 100644 --- a/Source/WebCore/rendering/RenderLayer.cpp +++ b/Source/WebCore/rendering/RenderLayer.cpp @@ -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(); diff --git a/Source/WebCore/rendering/RenderLayerBacking.cpp b/Source/WebCore/rendering/RenderLayerBacking.cpp index ce11c72..39241ea 100644 --- a/Source/WebCore/rendering/RenderLayerBacking.cpp +++ b/Source/WebCore/rendering/RenderLayerBacking.cpp @@ -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()); diff --git a/Source/WebCore/svg/SVGViewSpec.cpp b/Source/WebCore/svg/SVGViewSpec.cpp index 08ab852..f81e806 100644 --- a/Source/WebCore/svg/SVGViewSpec.cpp +++ b/Source/WebCore/svg/SVGViewSpec.cpp @@ -149,7 +149,10 @@ SVGElement* SVGViewSpec::viewTarget() const { if (!m_contextElement) return 0; - return static_cast(m_contextElement->treeScope()->getElementById(m_viewTargetString)); + Element* element = m_contextElement->treeScope()->getElementById(m_viewTargetString); + if (!element || !element->isSVGElement()) + return 0; + return static_cast(element); } SVGTransformListPropertyTearOff* SVGViewSpec::transform() diff --git a/Source/WebKit2/UIProcess/API/efl/CAPI/ewk_context_menu.h b/Source/WebKit2/UIProcess/API/efl/CAPI/ewk_context_menu.h index 96d185e..befea90 100644 --- a/Source/WebKit2/UIProcess/API/efl/CAPI/ewk_context_menu.h +++ b/Source/WebKit2/UIProcess/API/efl/CAPI/ewk_context_menu.h @@ -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{ diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp index 70f3f16..19ccb05 100755 --- a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp +++ b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp @@ -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()) { diff --git a/Source/WebKit2/UIProcess/API/efl/tizen/GestureClient.cpp b/Source/WebKit2/UIProcess/API/efl/tizen/GestureClient.cpp index ef88800..d16601a 100755 --- a/Source/WebKit2/UIProcess/API/efl/tizen/GestureClient.cpp +++ b/Source/WebKit2/UIProcess/API/efl/tizen/GestureClient.cpp @@ -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 diff --git a/Source/WebKit2/UIProcess/API/efl/tizen/Pan.cpp b/Source/WebKit2/UIProcess/API/efl/tizen/Pan.cpp index e4f60ba..71b6419 100644 --- a/Source/WebKit2/UIProcess/API/efl/tizen/Pan.cpp +++ b/Source/WebKit2/UIProcess/API/efl/tizen/Pan.cpp @@ -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(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); diff --git a/Source/WebKit2/UIProcess/API/efl/tizen/Pan.h b/Source/WebKit2/UIProcess/API/efl/tizen/Pan.h index aa9983b..3745057 100644 --- a/Source/WebKit2/UIProcess/API/efl/tizen/Pan.h +++ b/Source/WebKit2/UIProcess/API/efl/tizen/Pan.h @@ -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 diff --git a/Source/WebKit2/UIProcess/API/efl/tizen/SmoothAlgorithm.cpp b/Source/WebKit2/UIProcess/API/efl/tizen/SmoothAlgorithm.cpp index 5744605..7d9c191 100644 --- a/Source/WebKit2/UIProcess/API/efl/tizen/SmoothAlgorithm.cpp +++ b/Source/WebKit2/UIProcess/API/efl/tizen/SmoothAlgorithm.cpp @@ -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. diff --git a/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.cpp b/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.cpp index 4852e96..9e12329 100755 --- a/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.cpp +++ b/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.cpp @@ -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 diff --git a/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.h b/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.h index a122639..d9bd0e1 100755 --- a/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.h +++ b/Source/WebKit2/UIProcess/API/efl/tizen/Zoom.h @@ -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; diff --git a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp index 94f9f23..5bc71e9 100644 --- a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp +++ b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp @@ -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(); diff --git a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h index 194a8df..e327551 100644 --- a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h +++ b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h @@ -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 }; } diff --git a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp index 78c4b5e..bf88505 100644 --- a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp +++ b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp @@ -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 diff --git a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h index 0716323..488a60b 100644 --- a/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h +++ b/Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h @@ -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 m_animationTimer; #endif + +#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER) + bool m_needsPaintBlurFilter; + bool m_needsInvalidationForBlurFilter; +#endif }; WebGraphicsLayer* toWebGraphicsLayer(GraphicsLayer*); -- 2.7.4