Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (106977 => 106978)
--- trunk/Source/_javascript_Core/ChangeLog 2012-02-07 20:45:52 UTC (rev 106977)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-02-07 20:48:30 UTC (rev 106978)
@@ -1,3 +1,12 @@
+2012-02-06 Jer Noble <jer.no...@apple.com>
+
+ Use CMClock as a timing source for PlatformClock where available.
+ https://bugs.webkit.org/show_bug.cgi?id=77885
+
+ Reviewed by Eric Carlson.
+
+ * wtf/Platform.h: Added WTF_USE_COREMEDIA.
+
2012-02-06 Filip Pizlo <fpi...@apple.com>
ValueToNumber and ValueToDouble nodes don't do anything and should be removed
Modified: trunk/Source/_javascript_Core/wtf/Platform.h (106977 => 106978)
--- trunk/Source/_javascript_Core/wtf/Platform.h 2012-02-07 20:45:52 UTC (rev 106977)
+++ trunk/Source/_javascript_Core/wtf/Platform.h 2012-02-07 20:48:30 UTC (rev 106978)
@@ -1141,6 +1141,10 @@
#define WTF_USE_AVFOUNDATION 1
#endif
+#if PLATFORM(MAC) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION)
+#define WTF_USE_COREMEDIA 1
+#endif
+
#if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(EFL) || (PLATFORM(WIN) && !OS(WINCE) && !PLATFORM(WIN_CAIRO)) || PLATFORM(QT)
#define WTF_USE_REQUEST_ANIMATION_FRAME_TIMER 1
#endif
Modified: trunk/Source/WebCore/ChangeLog (106977 => 106978)
--- trunk/Source/WebCore/ChangeLog 2012-02-07 20:45:52 UTC (rev 106977)
+++ trunk/Source/WebCore/ChangeLog 2012-02-07 20:48:30 UTC (rev 106978)
@@ -1,3 +1,27 @@
+2012-02-06 Jer Noble <jer.no...@apple.com>
+
+ Use CMClock as a timing source for PlatformClock where available.
+ https://bugs.webkit.org/show_bug.cgi?id=77885
+
+ Reviewed by Eric Carlson.
+
+ No new tests; performance improvement covered by existing test cases.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/Clock.cpp:
+ (Clock::create): Use PlatformClockCM if available.
+ * platform/mac/PlatformClockCM.h: Added.
+ (WebCore::PlatformClockCM::playRate):
+ (WebCore::PlatformClockCM::isRunning):
+ * platform/mac/PlatformClockCM.mm: Added.
+ (PlatformClockCM::PlatformClockCM):
+ (PlatformClockCM::initializeWithTimingSource):
+ (PlatformClockCM::setCurrentTime):
+ (PlatformClockCM::currentTime):
+ (PlatformClockCM::setPlayRate):
+ (PlatformClockCM::start):
+ (PlatformClockCM::stop):
+
2012-02-06 Anders Carlsson <ander...@apple.com>
ScrollableAreaSet should be moved from Page to FrameView
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (106977 => 106978)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2012-02-07 20:45:52 UTC (rev 106977)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2012-02-07 20:48:30 UTC (rev 106978)
@@ -5598,6 +5598,7 @@
CD82030D1395AB6A00F956C6 /* WebVideoFullscreenHUDWindowController.mm in Sources */ = {isa = PBXBuildFile; fileRef = CD8203091395AB6A00F956C6 /* WebVideoFullscreenHUDWindowController.mm */; };
CD8203101395ACE700F956C6 /* WebWindowAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = CD82030E1395ACE700F956C6 /* WebWindowAnimation.h */; };
CD8203111395ACE700F956C6 /* WebWindowAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = CD82030F1395ACE700F956C6 /* WebWindowAnimation.mm */; };
+ CDAA8D0A14D71B2E0061EA60 /* PlatformClockCM.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDAA8D0814D385600061EA60 /* PlatformClockCM.mm */; };
CDD525D7145B6DD0008D204D /* JSHTMLMediaElementCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF65CCC145B6AFE00C4C7AA /* JSHTMLMediaElementCustom.cpp */; };
CDEA763014608A53008B31F1 /* PlatformClockCA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDEA762E146084DE008B31F1 /* PlatformClockCA.cpp */; };
CDEA76341460B56F008B31F1 /* ClockGeneric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDEA76321460AE29008B31F1 /* ClockGeneric.cpp */; };
@@ -12550,6 +12551,8 @@
CD8203091395AB6A00F956C6 /* WebVideoFullscreenHUDWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebVideoFullscreenHUDWindowController.mm; sourceTree = "<group>"; };
CD82030E1395ACE700F956C6 /* WebWindowAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebWindowAnimation.h; sourceTree = "<group>"; };
CD82030F1395ACE700F956C6 /* WebWindowAnimation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebWindowAnimation.mm; sourceTree = "<group>"; };
+ CDAA8D0714D385600061EA60 /* PlatformClockCM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformClockCM.h; sourceTree = "<group>"; };
+ CDAA8D0814D385600061EA60 /* PlatformClockCM.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PlatformClockCM.mm; sourceTree = "<group>"; };
CDBD93BA1333BD4B002570E3 /* fullscreenQuickTime.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = fullscreenQuickTime.css; sourceTree = "<group>"; };
CDCE5CD014633BC900D47CCA /* EventTargetFactory.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EventTargetFactory.in; sourceTree = "<group>"; };
CDEA762C14608224008B31F1 /* Clock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Clock.h; sourceTree = "<group>"; };
@@ -15035,6 +15038,8 @@
4B2709810AF2E5E00065127F /* PasteboardMac.mm */,
CDEA762E146084DE008B31F1 /* PlatformClockCA.cpp */,
CDEA762F146084EE008B31F1 /* PlatformClockCA.h */,
+ CDAA8D0714D385600061EA60 /* PlatformClockCM.h */,
+ CDAA8D0814D385600061EA60 /* PlatformClockCM.mm */,
BCAA486E14A052530088FAC4 /* PlatformEventFactoryMac.h */,
BCAA486D14A052530088FAC4 /* PlatformEventFactoryMac.mm */,
BC94D1070C274F88006BC617 /* PlatformScreenMac.mm */,
@@ -27092,6 +27097,7 @@
1AAADDE314DC8C8F00AF64B3 /* ScrollingTreeNode.cpp in Sources */,
1AAADDE814DC8DF800AF64B3 /* ScrollingTreeNodeMac.mm in Sources */,
7A54857F14E02D51006AE05A /* InspectorHistory.cpp in Sources */,
+ CDAA8D0A14D71B2E0061EA60 /* PlatformClockCM.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Modified: trunk/Source/WebCore/platform/Clock.cpp (106977 => 106978)
--- trunk/Source/WebCore/platform/Clock.cpp 2012-02-07 20:45:52 UTC (rev 106977)
+++ trunk/Source/WebCore/platform/Clock.cpp 2012-02-07 20:48:30 UTC (rev 106978)
@@ -26,7 +26,9 @@
#include "config.h"
#include "Clock.h"
-#if USE(COREAUDIO)
+#if USE(COREMEDIA)
+ #include "PlatformClockCM.h"
+#elif USE(COREAUDIO)
#include "PlatformClockCA.h"
#else
#include "ClockGeneric.h"
@@ -36,7 +38,9 @@
PassRefPtr<Clock> Clock::create()
{
-#if USE(COREAUDIO)
+#if USE(COREMEDIA)
+ return adoptRef(new PlatformClockCM());
+#elif USE(COREAUDIO)
return adoptRef(new PlatformClockCA());
#else
return adoptRef(new ClockGeneric());
Copied: trunk/Source/WebCore/platform/mac/PlatformClockCM.h (from rev 106977, trunk/Source/WebCore/platform/Clock.cpp) (0 => 106978)
--- trunk/Source/WebCore/platform/mac/PlatformClockCM.h (rev 0)
+++ trunk/Source/WebCore/platform/mac/PlatformClockCM.h 2012-02-07 20:48:30 UTC (rev 106978)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PlatformClockCM_h
+#define PlatformClockCM_h
+
+#if USE(COREMEDIA)
+
+#include "Clock.h"
+#include <wtf/RetainPtr.h>
+
+typedef struct OpaqueCMTimebase* CMTimebaseRef;
+typedef struct OpaqueCMClock* CMClockRef;
+
+namespace WebCore {
+
+class PlatformClockCM : public Clock {
+public:
+ PlatformClockCM();
+ PlatformClockCM(CMClockRef);
+
+private:
+ void initializeWithTimingSource(CMClockRef);
+
+ virtual void setCurrentTime(float);
+ virtual float currentTime() const;
+
+ virtual void setPlayRate(float);
+ virtual float playRate() const { return m_rate; }
+
+ virtual void start();
+ virtual void stop();
+ virtual bool isRunning() const { return m_running; }
+
+ RetainPtr<CMTimebaseRef> m_timebase;
+ float m_rate;
+ bool m_running;
+};
+
+}
+
+#endif
+
+#endif
Added: trunk/Source/WebCore/platform/mac/PlatformClockCM.mm (0 => 106978)
--- trunk/Source/WebCore/platform/mac/PlatformClockCM.mm (rev 0)
+++ trunk/Source/WebCore/platform/mac/PlatformClockCM.mm 2012-02-07 20:48:30 UTC (rev 106978)
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+
+#if USE(COREMEDIA)
+
+#import "PlatformClockCM.h"
+
+#import "FloatConversion.h"
+#import "SoftLinking.h"
+#import <CoreMedia/CMAudioDeviceClock.h>
+
+SOFT_LINK_FRAMEWORK_OPTIONAL(CoreMedia)
+
+SOFT_LINK(CoreMedia, CMAudioDeviceClockCreate, int32_t, (CFAllocatorRef allocator, CFStringRef deviceUID, CMClockRef *clockOut), (allocator, deviceUID, clockOut))
+SOFT_LINK(CoreMedia, CMTimebaseCreateWithMasterClock, int32_t, (CFAllocatorRef allocator, CMClockRef masterClock, CMTimebaseRef *timebaseOut), (allocator, masterClock, timebaseOut))
+SOFT_LINK(CoreMedia, CMTimebaseSetTime, int32_t, (CMTimebaseRef timebase, CMTime time), (timebase, time))
+SOFT_LINK(CoreMedia, CMTimebaseGetTime, CMTime, (CMTimebaseRef timebase), (timebase))
+SOFT_LINK(CoreMedia, CMTimebaseSetRate, int32_t, (CMTimebaseRef timebase, Float64 rate), (timebase, rate))
+SOFT_LINK(CoreMedia, CMTimeMakeWithSeconds, CMTime, (Float64 seconds, int32_t preferredTimeScale), (seconds, preferredTimeScale))
+SOFT_LINK(CoreMedia, CMTimeGetSeconds, Float64, (CMTime time), (time))
+
+using namespace WebCore;
+
+// A default time scale of 1000 allows milli-second CMTime precision without scaling the timebase.
+static const int32_t DefaultTimeScale = 1000;
+
+PlatformClockCM::PlatformClockCM()
+ : m_timebase(0)
+ , m_running(false)
+{
+ CMClockRef rawClockPtr = 0;
+ CMAudioDeviceClockCreate(kCFAllocatorDefault, NULL, &rawClockPtr);
+ RetainPtr<CMClockRef> clock(AdoptCF, rawClockPtr);
+ initializeWithTimingSource(clock.get());
+}
+
+PlatformClockCM::PlatformClockCM(CMClockRef clock)
+ : m_timebase(0)
+ , m_running(false)
+{
+ initializeWithTimingSource(clock);
+}
+
+void PlatformClockCM::initializeWithTimingSource(CMClockRef clock)
+{
+ CMTimebaseRef rawTimebasePtr = 0;
+ CMTimebaseCreateWithMasterClock(kCFAllocatorDefault, clock, &rawTimebasePtr);
+ m_timebase.adoptCF(rawTimebasePtr);
+}
+
+void PlatformClockCM::setCurrentTime(float time)
+{
+ CMTime cmTime = CMTimeMakeWithSeconds(time, DefaultTimeScale);
+ CMTimebaseSetTime(m_timebase.get(), cmTime);
+}
+
+float PlatformClockCM::currentTime() const
+{
+ CMTime cmTime = CMTimebaseGetTime(m_timebase.get());
+ return narrowPrecisionToFloat(CMTimeGetSeconds(cmTime));
+}
+
+void PlatformClockCM::setPlayRate(float rate)
+{
+ if (m_rate == rate)
+ return;
+
+ m_rate = rate;
+ if (m_running)
+ CMTimebaseSetRate(m_timebase.get(), rate);
+}
+
+void PlatformClockCM::start()
+{
+ if (m_running)
+ return;
+ m_running = true;
+ CMTimebaseSetRate(m_timebase.get(), m_rate);
+}
+
+void PlatformClockCM::stop()
+{
+ if (!m_running)
+ return;
+ m_running = false;
+ CMTimebaseSetRate(m_timebase.get(), 0);
+}
+
+#endif